【问题标题】:OpenLayers: Automatically transform EPSG 4326 -Coordinates from Text Layer into map`s projection (EPSG:900913)OpenLayers:自动将 EPSG 4326 - 坐标从文本图层转换为地图投影(EPSG:900913)
【发布时间】:2012-07-02 10:00:59
【问题描述】:

目前,我正在使用 Mono4Droid 实现地图应用程序,并且我正在使用 WebView 来呈现由我自己的 tileserver 提供的地图。 我正在使用 OpenLayers 来显示此地图,现在我想使用文本层来显示一些自定义 POI。 可惜地图使用的是 90013 投影:

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:900913"),
            displayProjection: new OpenLayers.Projection("EPSG:900913")
        } );

所以当我想显示 TextLayer 提供的标记时,我必须使用正确格式的坐标。使地图居中很容易:

var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
            map.setCenter (lonLat, zoom);

但是我怎样才能为 TextLayer 自动进行这种转换呢?我想根据众所周知的 EPSG4326 将经纬度值放入文本层数据文件(经纬度列),而不是根据 900913 的值(我目前正在做的工作)。

有没有办法让 OpenLayers 将 Text Layer 的坐标自动转换为地图中使用的格式?也许像 onShow 这样的回调函数?

感谢您的帮助! 否则我将不得不自己翻译纬度值并将计算值放入文本文件中,这将使性能受到影响......

【问题讨论】:

    标签: javascript openlayers openstreetmap


    【解决方案1】:

    最后,我自己找到了答案,我必须说我印象深刻! OpenLayers 相当强大! 这是我的解决方案: 在地图对象的选项中,您必须将 displayOptions 设置为图层的投影,在我的情况下,它支持 EPSG:4326:

    displayProjection: new OpenLayers.Projection("EPSG:4326")
    

    那么你只需要注意图层使用这个投影(如果它不是默认值)。就我而言,文本层在 Android 上无法正常工作(在 WebView 中):单击文本文件中的标记图像时,我无法打开弹出窗口。相反,我使用的是根据sundials-Example 的向量层:

    new OpenLayers.Layer.Vector("TextLayer", {
                projection: map.displayProjection,
                strategies: [new OpenLayers.Strategy.Fixed()],
                protocol: new OpenLayers.Protocol.HTTP({
                    url: "layerdata/chargingstationsmaptxtlayer.txt",
                    format: new OpenLayers.Format.Text({
                        extractStyles: true,
                        extractAttributes: true
                    })
                })
            });
    

    在文本文件中,我现在可以使用 EPSG-4326 格式的 LatLon 值。这很容易;-)

    【讨论】:

      猜你喜欢
      • 2011-11-26
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 2017-07-12
      • 2021-08-28
      • 2020-06-08
      • 2019-07-03
      相关资源
      最近更新 更多