2011-03-22 55 views
59

什麼是覆蓋谷歌地圖shapefile的最佳方式?覆蓋谷歌地圖上的ESRI shapefile的最佳方式?

一些閱讀表明,將shapefile轉換爲KML並在Google地圖中覆蓋KML是一種選擇。如果是這種情況,我如何將shapefile轉換爲KML?

我相信會有一些可用於此轉換的開源工具。任何人都可以指向一個工具來將shapefile轉換爲KML而不會丟失任何數據?

+0

gis.stackexchange也可以幫助,例如, http://gis.stackexchange.com/questions/68027/how-to-read-coordinates-from-shapefiles-and-overlay-on-google-maps – decvalts 2017-01-24 14:23:42

回答

12

你的意思是shapefile在Esri shapefile?無論如何,您應該可以使用GDAL軟件包中的ogr2ogr執行轉換。您需要.shp文件和理想的相應.dbf文件(它將提供上下文信息)。

此外,考慮使用像MapShaper這樣的工具來降低shapefile的複雜度,然後再將它們轉換爲KML;您將大幅減少文件大小,具體取決於您需要多少細節。

15

使用http://www.shpescape.com/將Shapefile導入Go​​ogle FusionTables(http://www.google.com/fusiontables),並從那裏您可以以多種方式使用數據,例如。使用GoogleMaps顯示它。

+0

程序本身運作良好。然而在我的情況下,幾個形狀沒有被轉換(例如,座標未被轉換)。 – Leukipp 2016-01-05 09:14:59

+0

這個工程。在程序結束後,需要標記融合圖公共訪問權限,並在谷歌地圖上添加api密鑰 – vishwakarma09 2017-07-17 08:51:28

36

我喜歡使用(開源和GUI友好)Quantum GIS將shapefile轉換爲kml。 Google地圖API僅支持subset of the KML standard。一個限制是文件大小。

要縮小文件大小,您可以使用Quantum GIS的「簡化幾何圖形」功能。這「平滑」多邊形。

然後,你可以選擇你的圖層,並做一個「另存爲kml」。

如果您需要處理一堆文件,可以使用Quantum GIS的osgeo4w shell的ogr2ogr命令對進程進行批處理。

最後,我建議將您的kml(使用您最喜愛的壓縮程序)壓縮以減小文件大小並將其保存爲kmz。

+1

1. ctrl-shift-v加載形狀文件:http://www.qgis.org/en/docs/user_manual/ working_with_vector/supported_data.html; 2.另存爲KML:http://www.townshipgis.com/resources/problems-and-workarounds/convert-shapefiles-to-kml – cloudsurfin 2014-01-25 20:05:24

2

Free "Export to KML" script for ArcGIS 9

的,有人發現可用的方法Here is a list

另外,在我看來,多邊形圖層最有效的表示方法是使用Google Maps API的折線編碼,該編碼顯着壓縮經緯度數據。但進入這種格式需要努力:使用ArcMap將Shape導出爲緯度/經度座標,然後使用Google Maps API轉換爲多段線。

1

爲了更新這些答案,ESRI在ArcMap 10.X中包含了該工具,即Layer to KML。此外,還有一個Map to KML工具。

只需導入所需的圖層(矢量或柵格)並選擇輸出位置,分辨率等。非常簡單的工具。

8

我不會使用KML。而是使用GeoJSON,您現在可以在Google Maps API中原生地使用它。這是一個新的功能,從原來的迴應中並不存在。

在任何情況下,只需打開Quantum GIS中的SHP文件,然後就可以以任何您喜歡的格式(KML,GeoJSON)輸出它。

如果您使用的是Google Maps for Work,我找到了一個高級擴展,可直接處理加載shapefile,您可以直接連接到從ESRI生成的shape文件。我做對的CMap網站搜索,發現該片段由哪個國家shape文件加載美國:https://gmapsplugin.net/cmapsanalytics/assets/shapes/usstates.shp

var cMap = new centigon.locationIntelligence.MapView(); 
    cMap.key([your_api_key]); 


    cMap.layerNames(["Basic Shapes"]); 
    cMap.dbfKeys([['Alabama','Alaska','Arizona','Arkansas','California','Colorado','Connecticut','Delaware','District of Columbia','Florida','Georgia','Hawaii','Idaho','Illinois','Indiana','Iowa','Kansas','Kentucky','Louisiana','Maine','Maryland','Massachusetts','Michigan','Minnesota','Mississippi','Missouri','Montana','Nebraska','Nevada','New Hampshire','New Jersey','New Mexico','New York','North Carolina','North Dakota','Ohio','Oklahoma','Oregon','Pennsylvania','Rhode Island','South Carolina','South Dakota','Tennessee','Texas','Utah','Vermont','Virginia','Washington','West Virginia','Wisconsin','Wyoming']]); 
    cMap.userShapeKeys([['Massachusetts','Minnesota','Montana','North Dakota','Hawaii','Idaho','Washington','Arizona','California','Colorado','Nevada','New Mexico','Oregon','Utah','Wyoming','Arkansas','Iowa','Kansas','Missouri','Nebraska','Oklahoma','South Dakota','Louisiana','Texas','Connecticut','New Hampshire','Rhode Island','Vermont','Alabama','Florida','Georgia','Mississippi','South Carolina','Illinois','Indiana','Kentucky','North Carolina','Ohio','Tennessee','Virginia','Wisconsin','West Virginia','Delaware','District of Columbia','Maryland','New Jersey','New York','Pennsylvania','Maine','Michigan','Alaska']]); 
    cMap.labels([['Massachusetts','Minnesota','Montana','North Dakota','Hawaii','Idaho','Washington','Arizona','California','Colorado','Nevada','New Mexico','Oregon','Utah','Wyoming','Arkansas','Iowa','Kansas','Missouri','Nebraska','Oklahoma','South Dakota','Louisiana','Texas','Connecticut','New Hampshire','Rhode Island','Vermont','Alabama','Florida','Georgia','Mississippi','South Carolina','Illinois','Indiana','Kentucky','North Carolina','Ohio','Tennessee','Virginia','Wisconsin','West Virginia','Delaware','District of Columbia','Maryland','New Jersey','New York','Pennsylvania','Maine','Michigan','Alaska']]); 

    cMap.polyDataSources([centigon.locationIntelligence.CMapAnalytics.DATA_PROVIDERS.SHAPE_DATAPROVIDER]); 
    cMap.layerTypes([centigon.mapping.Layer.TYPE.POLY]); 
    cMap.locations([["https://gmapsplugin.net/cmapsanalytics/assets/shapes/usstates.shp"]]); 

    cMap.panTo("USA"); 
    cMap.zoomLevel(3);