Openlayers:缩放时标记消失

时间:2013-03-30 07:09:16

标签: maps openlayers marker

我是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的);

1 个答案:

答案 0 :(得分:0)

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

如果你已开始使用度数进行米到度变换,那么我认为你最终会得到非常接近非洲西海岸0,0的纬度/经度。

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

相关问题