2013-07-03 50 views
3

我正在嘗試使用D3 JavaScript API製作波多黎各的交互式地圖。 但是,波多黎各政府使用的座標系是舊朗伯座標系 。 D3能夠處理這樣的座標嗎?是否有處理它們的具體投影 ? (我已經瀏覽了預測維基,並且找不到任何有用的 。)如果不是,我能做些什麼來將座標轉換爲標準的 經度/緯度?在D3中使用或轉換蘭伯特座標

+0

最好的辦法是使用桌面GIS,例如[QGIS](http://www.qgis.org/)將座標轉換爲D3可以處理的東西。您可以進行自定義投影,但這可能會涉及更多,特別是如果您只需要執行一次。 –

回答

3

最有可能的投影是1983年的State Plane Coordinate System的一部分,定義於this NOAA PDF的第72頁。您也可以通過在spatialreference.org上搜索「puerto rico」(例如,EPSG:2866)來找到它。

可以使用ogr2ogr通過指定EPSG:4326WGS84)標投影重新投影的shape文件的經度和緯度。例如,從您的投影shape文件球面座標生成GeoJSON的,你可以說:

ogr2ogr \ 
    -f GeoJSON \ 
    -t_srs EPSG:4326 \ 
    output.json \ 
    input.shp 

一旦你擁有了它的緯度和經度的幾何形狀,是指任何的D3地理例子來看看如何顯示shapefile在你選擇的投影中。

或者,您可以使用投影座標按原樣顯示。有關更多詳細信息,請參閱projected TopoJSON example,但缺點是您可以使用topojson command-line tool在投影座標中創建TopoJSON文件。那麼你根本不需要重責!例如,如果你想在一個960x500的空間來顯示它:

topojson \ 
    --width 960 \ 
    --height 500 \ 
    --margin 20 \ 
    -o output.json \ 
    -- input.shp 

(你甚至可以添加一個-s .25參數來簡化幾何形狀的屏幕分辨率,這對於節省空間和提高渲染速度非常有用。)

最後,如果你這樣做最終會重新投影的經度和緯度,但仍希望在其官方狀態平面上的投影顯示波多黎各,您可以定義使用d3.geo.conicConformal即投影,蘭勃特圓錐形投影:

var projection = d3.geo.conicConformal() 
    .scale(5000) // adjust to your liking 
    .rotate([66 + 26/60, 0]) 
    .center([0, 17 + 50/60]) 
    .parallels([18 + 2/60, 18 + 26/60]) 
    .translate([width/2, height/2]); 

另請參閱project to bounding box example,瞭解如何計算比例尺並自動翻譯感興趣的特徵。

+0

非常感謝您的回答。我遵循備選方案,因爲它更高效,並且通過了預計的TopoJSON示例。一切都很美妙。非常感謝。 – shredmasteryjm