2012-07-02 89 views
1

目前,我正在使用Mono4Droid實現地圖應用程序,並且我正在使用WebView呈現提供的地圖由我自己的tileserver。 我使用OpenLayers來顯示這張地圖,現在我想使用文本圖層來顯示一些自定義POI。 不幸的是,地圖使用90013投影:OpenLayers:自動將EPSG 4326座標從文本圖層轉換爲地圖投影(EPSG:900913)

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提供的Markes的,我在正確的格式使用的座標。以地圖爲中心很容易:

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

但是我怎麼能自動爲TextLayer做這個轉換?我想根據着名的EPSG4326將經緯度值寫入文本層數據文件(列lat long),而不是根據900913(我現在正在做的工作)的值。

有沒有辦法讓OpenLayers自動將文本圖層的座標轉換爲地圖中使用的格式?也許一個回調函數重寫像onShow?

感謝您的幫助! 否則,我將不得不翻譯我自己的經緯度值,並將計算值置於文本文件中,這會使性能受到影響......

回答

4

最後,我自己找到了答案,我必須說我對我印象非常深刻! 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值。這很容易;-)

相關問題