2012-07-25 63 views
3

我想弄清楚哪些映射工具最適合我的基於java swing的OSM地圖。早些時候,我根據MapPanel製作了功能圖。後來,我幾乎可以克隆應用程序,只需用JMapViewer替換MapPanel即可使其正常工作。我更喜歡後者,因爲它具有在地圖上放置標記和多邊形的功能。然而,缺點是由於某些原因,我無法用鼠標拖動地圖。在JMapViewer的包中有一個Demo類,它顯示相同的行爲。如何使OSMap在JMapViewer中可拖動?JMapViewer OSM地圖無法拖動

編輯:此代碼將繪製可以通過添加mapControllersetMovementMouseButton()被顯示在面板使地圖可拖動的地圖。

private JMapViewer drawOpenStreetMap(double lon, double lat, int zoom) { 
    mapViewer = new JMapViewer(); 
    mapViewer.setZoom(zoom); 
    mapViewer.setDisplayPositionByLatLon(lat, lon, zoom); 
    mapViewer.repaint(); 
    DefaultMapController mapController = new DefaultMapController(mapViewer); 
    mapController.setMovementMouseButton(MouseEvent.BUTTON1); 
    mapViewer.addMapMarker(new MapMarkerDot(52, 5.5)); 
    return mapViewer; 
} 
+0

Demo類的圖片[在這裏](http://wiki.openstreetmap.org/wiki/JMapViewer)。 – jhulst 2012-07-25 21:50:07

回答

3

在運行Demo.java時,按住Control鍵點擊或右鍵單擊地圖以平移視圖。使用setMovementMouseButton()來控制行爲。

+0

非常好,那有效!此代碼將繪製可以顯示在面板中的地圖,並通過添加mapController和setMovementMouseButton()來使地圖可拖動。 – jhulst 2012-07-26 09:21:19

+0

:JMapViewer drawOpenStreetMap(double lon,double lat,int zoom){ \t mapViewer = new JMapViewer(); \t mapViewer.setZoom(zoom); mapViewer.setDisplayPositionByLatLon(lat,lon,zoom); mapViewer.repaint(); \t DefaultMapController mapController = new DefaultMapController(mapViewer); \t \t mapController.setMovementMouseButton(MouseEvent.BUTTON1); mapViewer.addMapMarker(新的MapMarkerDot(52,5.5)); \t return mapViewer; } – jhulst 2012-07-26 09:25:00

+0

爲了便於閱讀,我將您的代碼片段遷移到了問題中,但您也可以[將其作爲答案發布](http://meta.stackexchange.com/q/17463/163188)。您可以點擊左側的[空格勾號](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)接受答案。 – trashgod 2012-07-26 15:18:09