【问题标题】:How to move a marker in an OpenLayers.Layer.Markers layer?如何在 OpenLayers.Layer.Markers 图层中移动标记?
【发布时间】:2012-02-14 14:00:09
【问题描述】:

如何以编程方式移动OpenLayers.Layer.Markers 图层上的现有标记?我似乎找不到合适的方法。

这完全支持吗?还是我必须使用Vector 层?

marker.moveTo() 函数对我不起作用,我有纬度/经度坐标。

【问题讨论】:

    标签: openlayers


    【解决方案1】:

    如果您有新点的 lon/lat,则标记可以移动为:

    var newLonLat = new OpenLayers.LonLat(lon, lat);
    var newPx = map.getLayerPxFromLonLat(newLonLat);
    myMarker.moveTo(newPx);
    

    【讨论】:

      【解决方案2】:

      marker.moveTo() 不是“官方”APIMethod。它由 OpenLayers 中的其他方法在内部使用,实际上不鼓励您使用未标记为“APIMethod”的方法。

      在新位置上删除和添加标记不能满足您的要求吗?有removeMarker()addMarker() APIMethods。

      如果不是,我会考虑使用向量层,因为它在渲染和操作功能方面更加灵活。

      【讨论】:

      • 可能删除和添加标记会起作用,但我不知道层中有许多标记的性能如何。这就是为什么我希望看到 move() 方法。但是,我现在决定去Vector。谢谢。
      【解决方案3】:

      不是一个完整的展示点击事件移动标记的示例

      咖啡脚本:

      projection_4326 = new OpenLayers.Projection("EPSG:4326") #Transform from WGS 1984
      projection_900913 = new OpenLayers.Projection("EPSG:900913") # Spherical Mercator Projection
      markers = new OpenLayers.Layer.Markers( "Markers")
      marker = new OpenLayers.Marker(new OpenLayers.LonLat(0,0).transform(projection_4326, projection_900913), icon)
      markers.addMarker(marker)
      map = new OpenLayers.Map(...init...stuff)
      map.addLayers([markers])
      map.events.register "click", map, (e) ->
                  opx = map.getLayerPxFromViewPortPx(e.xy)
                  lonLat = map.getLonLatFromPixel(e.xy)
                  # now, if your coordinates are in EPSG:4326 you would have to convert the lonLat here
                  #new_position = marker.lonlat.transform(projection_4326, projection_900913)
                  marker.map = map
                  marker.moveTo(opx) #or new_position
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-25
        • 2013-09-13
        • 2016-05-30
        • 2017-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-20
        相关资源
        最近更新 更多