【问题标题】:Openlayers: markers disappear when zoommingOpenlayers:缩放时标记消失
【发布时间】:2013-03-30 07:09:16
【问题描述】:

我是 Openlayers 的新手,所以不知道出了什么问题。当我更改选择下拉菜单和单击地图时,我可以添加标记。当我缩放地图时,问题出现了,标记消失了。

我意识到标记不会消失,它们只是移动到另一个地方,到点 0,0。

这是代码

(function($) {
$().ready(function() {        
    var ZOOM_LEVEL_PROVINCE = 12;

    var projection = new OpenLayers.Projection("EPSG:4326");

    var map;
    var markerLayer;

    var initMap = function() {

        map = new OpenLayers.Map ("map", {
            controls:[
                new OpenLayers.Control.Navigation(),
                new OpenLayers.Control.PanZoomBar(),
                new OpenLayers.Control.Permalink(),
                new OpenLayers.Control.ScaleLine({geodesic: true}),
                new OpenLayers.Control.Permalink('permalink'),
                new OpenLayers.Control.MousePosition(),                    
                new OpenLayers.Control.Attribution()],
            //maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
            maxResolution: 156543.0339,
            numZoomLevels: 19,
            units: 'm',
            projection: new OpenLayers.Projection("EPSG:4326"),
            displayProjection: new OpenLayers.Projection("EPSG:4326")
        } );

        layer = new OpenLayers.Layer.OSM("Simple OSM Map");
        map.addLayer(layer);

        var point = getLonLatProvince('san-jose');
        map.setCenter(point.transform(projection, map.getProjectionObject()), ZOOM_LEVEL_PROVINCE);
    }

    var initMakerLayer = function(){
        markerLayer = new OpenLayers.Layer.Markers( "MarkerLayer" );
        markerLayer.id = "MarkerLayer";
        map.addLayer(markerLayer);
    }

    var showMarker = function( province ){
        var point = getLonLatProvince(province);
        var location = point.transform(projection, map.getProjectionObject());
        showMarkerPosition(location);
    }

    var showMarkerPosition = function( location ){
        markerLayer.clearMarkers(); 
        var size = new OpenLayers.Size(21,25);
        var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
        var icon = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker.png',size,offset);

        markerLayer.addMarker(new OpenLayers.Marker(location,icon.clone()));

        var newPoint = location.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326"));

        $("#edit-plonlat").val( newPoint );
    }

    var getLonLatProvince = function( province ){
        ...
    }

    initMap();
    initMakerLayer();
    showMarker('san-jose');

    map.events.register("click", map, function(e) {
        var location = map.getLonLatFromPixel(e.xy);
        showMarkerPosition(location);
    });


    $('#edit-pprovinces').change(function() {
        var selectedPronvince = $(this).val();
        var point = getLonLatProvince(selectedPronvince);
        showMarker(selectedPronvince);
        map.setCenter(point.transform(projection, map.getProjectionObject()), ZOOM_LEVEL_PROVINCE);
    });
});

})(jQuery);

【问题讨论】:

    标签: maps openlayers marker


    【解决方案1】:

    我认为您对 map.getLonLatFromPixel(e.xh) 的调用正在获得 WGS84 (EPSG:4326) 中的位置,因为那是地图的投影。然后你在“点击”处理程序中调用 showMarkerPosition。在 showMarkerPosition 中,您将该位置从 Google 投影转换为 WGS84 投影,这会将较大的纬度/经度(以米为单位)更改为更小的纬度/经度(以度为单位)。

    如果您从米到度转换的度数开始,那么我认为您最终会得到非常接近非洲西海岸 0,0 的纬度/经度。

    当我看到 0,0 lat/lon's 时,我总是开始寻找投影变换问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多