這是我第一次用地圖編寫web應用程序。
我正在使用Java servlets,Netbeans IDE,javascript,html和css。
我創建了一個算法,該算法創建來自openstreetmap的給定圖(* osm
文件)的路徑。
* osm文件是在openstreetmap中表示圖形的XML文件,更多信息here。如何將路徑與節點座標轉換爲<path>帶點標記
路徑結構具有節點列表,其中的第一個節點是源的最後一個節點是目標:
public class Way
{
private double m_Length;
private long m_Id;
//private List<Long> m_NodesRefs; // this is for <nd ref=123123>
private List<Node> m_Nodes;
...
}
每個節點具有緯度和經度:
public class Node implements Comparable<Node>
{
private long m_Id;
private List<Edge> m_Adjacencies = new ArrayList<Edge>();
private double m_Longtitude;
private double m_Latitude;
private Node m_Prev;
private double m_MinDistance = Double.POSITIVE_INFINITY;
...
}
使用Leaflet我成功顯示地圖,但現在我也希望能夠顯示我的算法找到的一些路徑。
這是從OpenStreetMap的一個例子,我要如何顯示的路徑:
我注意到他們正在使用<path>
與位置。
我讀了here約<path>
標籤。
我明白,我需要創建這個標籤的位置的內容,以顯示在地圖上的路徑。
我的問題是,我只有每個節點的座標,我不知道如何將它翻譯成職位。
例如,如果我有3個長度的路徑:
<node id="2500639640" lat="32.1555549" lon="34.8946619"/>/>
<node id="2500639651" lat="32.1556683" lon="34.8946958"/>
<node id="2500639647" lat="32.1557488" lon="34.8947266"/>
如何從這個<path>
標籤與崗位創造?
我的HTML代碼(map.html):
<!DOCTYPE html>
<html >
<head>
<script type="text/javascript" src="js/jquery-2.1.1.min.js" ></script>
<script type="text/javascript" src="js/map/leaflet.js"></script>
<script type="text/javascript" src="js/map/map.js" ></script>
<meta charset="UTF-8">
<title>MyApp</title>
<link rel="stylesheet" href="css/leaflet.css" />
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/map.css" />
</head>
<body>
<div class="wrapper">
<div class="container">
<img src="Images/AppLogo.png" class="logo">
<div id="dataviewer">
<div id="map">
</div>
</div>
</div>
</div>
</body>
</html>
我的JavaScript代碼來顯示地圖(map.js):
var g_Map;
$(function() { //on load
g_Map = L.map('map').setView([32.0641463, 34.7811246], 13);
var tilesAttrib = '© <a href="www.openstreetmap.org/copyright">OpenStreetMap</a> contributors <small>Data:ODbL, Map:cc-by-sa</small>';
// var tilesUrl = 'https://{s}.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png';
var tilesUrl = 'http://{s}.tile.osm.org/{z}/{x}/{y}.png';
var tiles = new L.TileLayer(tilesUrl, {attribution: tilesAttrib});
g_Map.addLayer(tiles);
scaleControl = new L.Control.Scale({metric: true, imperial: false, });
scaleControl.addTo(g_Map);
});