Leaflet 聚合物1.0/传单贴图1.0贴图在单击按钮时不一致地返回给定点

Leaflet 聚合物1.0/传单贴图1.0贴图在单击按钮时不一致地返回给定点,leaflet,latitude-longitude,polymer-1.0,web-component,observers,Leaflet,Latitude Longitude,Polymer 1.0,Web Component,Observers,我正在尝试使用Polymer 1.0和传单地图1.0实现一个地图,它有一个按钮,单击该按钮时应将地图平移到当前地理位置的中心 地图(“mymap”)和“geoButton”是主索引页中同一级别的元素。我有一些类似的工作,但前后不一致 地图设置如下(目前,初始中心已硬编码): 在传单-core.html(具有从传单.js中继承的属性和事件)中,纬度和经度属性都有一个观察者方法“\u viewChanged”: _viewChanged: function(newValue, oldValu

我正在尝试使用Polymer 1.0和传单地图1.0实现一个地图,它有一个按钮,单击该按钮时应将地图平移到当前地理位置的中心

地图(“mymap”)和“geoButton”是主索引页中同一级别的元素。我有一些类似的工作,但前后不一致

地图设置如下(目前,初始中心已硬编码):

在传单-core.html(具有从传单.js中继承的属性和事件)中,纬度和经度属性都有一个观察者方法“\u viewChanged”:

    _viewChanged: function(newValue, oldValue) {

        if (this.map) {

        this.async(function() {

                this.map.setView(L.latLng(this.latitude, this.longitude), this.zoom);

                console.log("new lat? " +this.latitude );
                console.log("new long? " +this.longitude );

            });

        }

    }
问题是地图并不总是重置到新的中心。如果我将地图平移到远离初始点的地方,然后单击Geo按钮,它将重新居中(调用“viewreset”事件)。此外,如果我在单击地理按钮后拖动地图,地图将重置为正确的中心

如果我删除observer方法中的async函数,并直接调用'this.map.setView',则映射实际上将正确地重新居中到地理定位点。但在这种情况下,如果我平移地图,它将“反弹”回地理位置的纬度(无论我平移地图到哪里,经度都将保持不变)。我想这是因为'u viewChanged'被调用了两次,但是第二次的纬度没有从第一次调用改变

在调用this.map/.setView之前,我是否可以在observer方法中强制对映射进行某种重置或刷新(调用该方法后拖动映射时似乎会发生这种情况)?或者,这里还有什么我遗漏的吗

经过更多的测试后,我注意到如果我注释掉:

 // mymap.latitude = locator.latitude;
然后地图将缩放到正确的(地理位置)经度,但将保留在按钮单击前地图设置的任何纬度上…如果我注释掉经度线,则情况也是如此;然后地图平移到正确的(地理位置)纬度和当前经度。
换句话说,我可以正确地传递一个更新的属性,但不能传递两个…两者都使用相同的观察者方法。

我找到了一个解决方案。关键是向传单核心元素添加一个函数,以便我可以同时传递新的纬度和经度,然后在按钮的事件处理程序中调用该方法:

(在传单core.html中)

(在geobutton元素中-点击回调)

    _viewChanged: function(newValue, oldValue) {

        if (this.map) {

        this.async(function() {

                this.map.setView(L.latLng(this.latitude, this.longitude), this.zoom);

                console.log("new lat? " +this.latitude );
                console.log("new long? " +this.longitude );

            });

        }

    }
 // mymap.latitude = locator.latitude;
     setToPoint: function(newLat, newLong){
        if (this.map) {
            this.async(function() {
              this.map.setView(L.latLng(newLat, newLong), this.zoom, {pan: {animate: true}});
              this.map.invalidateSize();
            });

        }

     },
mymap.setToPoint(locator.latitude, locator.longitude);