在谷歌地图上叠加ESRI shapefile的最佳方法是什么?

70

如何将shapefile图层叠加到Google Maps中?

经过一些阅读后建议,可以将shapefile转换为KML格式并在Google地图上叠加KML图层。如果这样的话,如何将shapefile转换为KML格式呢?

我相信有一些开源工具可用于此转换。有没有人指出一种能够完整转换shapefile为KML格式的工具?


gis.stackexchange也可能会提供帮助,例如http://gis.stackexchange.com/questions/68027/how-to-read-coordinates-from-shapefiles-and-overlay-on-google-maps - decvalts
7个回答

47

我喜欢使用(开源且图形用户界面友好的)量子地理信息系统将shapefile转换为kml格式。

Google Maps API仅支持KML标准的子集,其中一个限制是文件大小。

为了减少文件大小,你可以使用 量子地理信息系统 的“简化几何”功能。这个功能“平滑”多边形。

然后,你可以选择图层并对其执行“另存为kml”的操作。

如果需要处理一堆文件,则可以使用 osgeo4w shell 中的量子地理信息系统 ogr2ogr 命令批量处理。

最后,我建议你使用你最喜欢的压缩程序将kml文件压缩成zip格式以减小文件大小,并将其保存为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

17

截止2019年12月03日,FusionTables已不再可用...

使用ShpEscape将Shapefile导入到Google FusionTables (http://www.google.com/fusiontables),然后您可以使用多种方式使用数据,例如使用GoogleMaps显示它。


该过程本身运行良好。然而,在我的情况下,一些形状未被转换(例如,坐标未被转换)。 - Leukipp
在程序完成后,需要标记融合图表的公共访问,并将 API 密钥添加到 Google 地图。这样可以正常工作。 - vishwakarma09
1
就像其他许多实验性的谷歌产品一样,Google Fusion Tables也将很快被淘汰。https://support.google.com/fusiontables/answer/9185417 - Zdenek Machek

16

我不建议使用KML,而是使用GeoJSON,现在Google Maps API可以本地消费它。这是一个较新的功能,在原来的响应中不存在。

无论如何,只需在Quantum GIS中打开SHP文件,就可以将其以任何格式输出(KML、GeoJSON)。

如果您正在使用Google Maps for Work,则可以使用高级扩展程序直接处理加载shapefiles,只需连接到您从ESRI生成的shapefile即可。我在CMaps网站上进行搜索,并找到了此片段,它加载了按州分类的美国shapefile: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);

14
您是说Esri shapefile这种文件格式吗?无论如何,您都可以使用GDAL软件包中提供的ogr2ogr执行转换。您需要.shp文件以及最好有相应的.dbf文件(它将提供上下文信息)。
此外,在将形状文件转换为KML之前,考虑使用MapShaper等工具减少其复杂性;根据您需要多少细节,您可以大大减小文件大小。

2

更新这些答案,ESRI已在ArcMap 10.X中包含了这个工具,即图层转KML。此外,还有一个地图转KML工具。

只需导入所需的图层(矢量或栅格),选择输出位置、分辨率等,非常简单易用。


2

ArcGIS 9的免费“导出到KML”脚本

这里有一份已有人整理的可用方法列表。

此外,我认为最有效的多边形图层表示方法是使用Google Maps API的折线编码,它可以显着压缩纬度-经度数据。但是,要将其转换成该格式需要一些工作:使用ArcMap将Shape导出为纬度/经度坐标,然后使用Google Maps API将其转换为折线。


链接已经失效! - Zvi Redler

1

但是 mapshaper 没有被问及的 Google 地图图层。 - nurgasemetey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接