在Google地图中叠加shapefile的最佳方法是什么?
经过一些阅读建议,将shapefile转换为KML并在Google地图中叠加KML是一种选择。如果是这种情况,我如何将shapefile转换为KML?
我相信会有一些开源工具可用于此转换。任何人都可以指向一个工具来将shapefile转换为KML而不会丢失任何数据吗?
答案 0 :(得分:41)
我喜欢使用(开源和gui友好)Quantum GIS将shapefile转换为kml。
Google Maps API仅支持subset of the KML standard。一个限制是文件大小。
要减小文件大小,您可以Quantum GIS使用“简化几何图形”功能。这个“平滑”多边形。
然后您可以选择您的图层并在其上执行“另存为kml”。
如果您需要处理一堆文件,可以使用来自osgeo4w shell的Quantum GIS的ogr2ogr命令对该过程进行批处理。
最后,我建议使用你最喜欢的压缩程序压缩你的kml,以减小文件大小并将其保存为kmz。
答案 1 :(得分:16)
使用http://www.google.com/fusiontables将Shapefile导入Google FusionTables(http://www.shpescape.com/),然后您可以通过多种方式使用数据,例如。使用GoogleMaps显示它。
答案 2 :(得分:13)
你的意思是Esri shapefile中的shapefile吗?无论哪种方式,您都应该能够使用ogr2ogr包中提供的GDAL来执行转换。您需要.shp
文件,理想情况下需要相应的.dbf
文件(它将提供上下文信息)。
另外,考虑使用像MapShaper这样的工具来降低shapefile的复杂性,然后再将它们转换为KML;根据您需要的详细信息,您将大大减少文件大小。
答案 3 :(得分:11)
我不会使用KML。相反,现在使用您可以在Google Maps API中原生使用的GeoJSON。这是一个较新的功能,原始响应中不存在。
在任何情况下,只需打开Quantum GIS中的SHP文件,然后您可以以任何您喜欢的格式(KML,GeoJSON)输出它。
如果您使用的是Google Maps for Work,我找到了一个高级扩展程序,可直接处理加载shapefile,您可以直接连接到从ESRI生成的shapefile。我在CMaps网站上搜索了一下,发现这个片段通过状态shapefile加载了US: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);
答案 4 :(得分:2)
Free "Export to KML" script for ArcGIS 9
Here is a list某人找到的可用方法。
此外,在我看来,多边形图层的最有效表示是使用Google Maps API的折线编码,它可以显着压缩lat-lng数据。但是进入该格式需要工作:使用ArcMap将Shape导出为lat / lng坐标,然后使用Google Maps API转换为折线。
答案 5 :(得分:2)
为了更新这些答案,ESRI在ArcMap 10.X中添加了此工具,称为Layer to KML。此外,还存在Map to KML工具。
只需导入所需的图层(矢量或光栅)并选择输出位置,分辨率等。非常简单的工具。
答案 6 :(得分:0)
2018年......我发现这个奇妙的在线工具http://mapshaper.org/可以从ESRI shapefile转换为SVG,TopoJSON,GeoJSON。
以下是如何使用https://www.statsilk.com/maps/convert-esri-shapefile-map-geojson-format
的说明快速而直接! :)