2016-03-31 42 views
0

我的名字是Cyrille,我正在製作代號爲1的地圖應用程序。目標是製作一個應用程序,可以搜索用戶公司(使用搜索欄)並添加他們想要的公司列表。然後,列表出現在主窗口中,點擊它們在地圖上顯示出來。來源事件奇怪的經度和緯度

我在代碼名爲1的事件部分有問題。下面是我的代碼的一部分:

PointLayer point = new PointLayer(new Coord(lat.doubleValue(), lng.doubleValue()), 
          companyName, null); 
        pl.addPoint(point); 
        pl.addActionListener(new ActionListener() { 
         public void actionPerformed(ActionEvent evt) { 
          PointLayer p = (PointLayer) evt.getSource(); 
          System.out.println("pressed " + p); 
          Dialog.show("Details", "" + p.getName() + "\nLatitude: " + p.getLatitude() + "\nLongitude: " + p.getLongitude(), "Ok", null); 
         } 
        }); 

是的,我把基本地圖模板^^」 我的問題是:當我問點的coordonates我得到:

{‘東經’ :2.3485853, '緯度':48.8769309}

但是當我問evt.getSource的coordonates我得到:

{「東經」:261443.31964417442,「緯度」:6254004.882818963}

這是一種擾動...

我看了看,因爲昨日的互聯網,但我沒有找到任何東西,也許我我沒有在正確的地方尋找。發生了什麼的任何線索?

編輯: 感謝回覆我發現問題。這些座標是在代碼名爲1的其他系統中使用的:流行的可視化CRS Mercator。爲了使用它,你必須將其轉換爲:com.codename1.maps.Mercator.inverseMercator(latitude,longitude); 或者你可以使用谷歌標誌,而不是一個代號的[這就是我所做]

回答

1


我找不到爲什麼它返回此值,但也許你可以通過建立一個座標對象繞過這個問題。 例子:

Coord coord = new Coord(lat.doubleValue(), lng.doubleValue()); 
PointLayer point = new PointLayer(coord, companyName, null); 
        pl.addPoint(point); 
        pl.addActionListener(new ActionListener() { 
         public void actionPerformed(ActionEvent evt) { 
          PointLayer p = (PointLayer) evt.getSource(); 
          System.out.println("pressed " + p); 
          Dialog.show("Details", "" + p.getName() + "\nLatitude: " + coord.getLatitude() + "\nLongitude: " + coord.getLongitude(), "Ok", null); 
         } 
        }); 

EDITED 我有同樣的問題1個月前。我解決了它通過使用MapContainer,我使用addMarker();從地圖上。通過這種方式,我可以這樣使用它:

MapContainer map = new MapContainer(); // This used gMaps 
for(Coord points : coords){ 
    map.addMarker((EncodedImage) myIcon, coord,"","", new ActionListener(){ 
     Dialog.show("Details", "" + p.getName() + "\nLatitude: " + points.getLatitude() + "\nLongitude: " + points.getLongitude(), "Ok", null); 
    }) 
} 
+0

感謝您的回答!其實它適用於像我的例子一樣的單點。不幸的是,我在地圖上有一個地圖列表的地圖存在同樣的問題。該應用程序應該知道點擊哪個點,以便它可以採取協調。由於我們無法在pointLayer上添加actionListener,但只能在pointLayers上添加coords對象,因此無法繞過此問題。 –

+0

我會嘗試並讓您知道! –

2

我想你在事件得到的座標都在流行的可視化CRS墨卡託投影(EPSG:900913或EPSG:3785)座標系,這是什麼地圖控制使用。添加到地圖後,您在經緯度中添加的點會自動轉換爲此係統。 「緯度」和「經度」有點誤導; 「x」和「y」是投影座標的標準術語。

+0

O_o謝謝,我不知道。那麼是否有可能強制應用程序獲得未投影的座標或是否需要轉換它們? (我看到一些有很多不同公式的文章取決於投影版本) –

+0

你可能不得不將它們變回自己。試試'com.codename1.maps.Mercator。逆墨卡託(緯度,經度);'。由於'Mercator'是'Projection'的唯一實現,我想這就是正在使用的那個。 –

+0

謝謝我修好了! –