1. 程式人生 > >D3地圖上如何標註座標點

D3地圖上如何標註座標點

1. 標註是什麼

標註,是指地圖上只需要一個座標即可表示的元素。例如,在經緯度(116, 39)處畫一個圓,在(108, 30)處畫一個符號,這些都屬於標註,也可以將標註理解為“點元素”。

我們知道,只知道經緯度是不能直接在地圖上作圖的,需要先用投影函式將其轉換成畫素座標。例如,如果要在中國地圖上標出“北京”的位置,但是不知道北京的畫素座標。北京的經緯度可通過查詢得知是(116.3, 39.9),將此值作為投影函式的引數即可得到畫素座標。其實,GeoJSON檔案的地理資訊也是經緯度,也是經過投影函式轉換後得到了畫素座標。因此,如果使用同一個投影函式,那麼轉換後的北京座標即可直接在地圖上繪製。

2. 在D3的地圖上如何標註

首先,定義一個投影函式如下。

  1. var projection = d3.geo.mercator()  
  2.             .center([107, 31])  
  3.             .scale(600)  
  4.             .translate([width/2, height/2]);  

其次,使用此投影定義地理路徑生成器 d3.geo.path,用於繪製地圖。

[javascript] view plaincopy
  1. var path = d3.geo.path()  
  2.                 .projection(projection);  

然後,以北京的經緯度作為投影的引數,得到北京的畫素座標。

[javascript] view plaincopy
  1. var peking = [116.3, 39.9];  
  2. var proPeking = projection(peking);  

最後,用上面得到的畫素座標繪製一個圓,該圓就正好位於北京的位置。

[javascript] view plaincopy
  1. svg.append("circle")  
  2.     .attr("class","point")  
  3.     .attr("cx",proPeking[0])  
  4.     .attr("cy"
    ,proPeking[1])  
  5.     .attr("r",8);