shp与json互转(转载)

转自:http://blog.sina.com.cn/s/blog_673c98be0102v78i.html

对于搞GIS开发的,这2种数据格式太重要了。

 

一.shp转json

这个要容易些,方法也比较多啊。你想通过shp来定义自己的坐标串json,其实方法还是比较多的,没有直接的但间接的很多。

(1)shp->kml/kmz

在ArcMap里利用工具就可以直接转换得到,废话不多说。不会的自己查啊。

 

(2)shp发布了地图服务,那么通过请求rest service返回geomerty,设置格式为json,也能得到

shp与json互转

(3)GDAL工具,得到的是GeoJson格式啊

参考http://www.bram.us/2012/03/14/convert-esri-shapefile-shp-to-geojson-json/

插件里看是否装了GDAL工具,没装的话自行安装

shp与json互转

找到ogr2ogr.exe,拖到cmd里

shp与json互转

输入命令,主要是源文件shp的路径,目标文件json的路径,主要转换有警告,是不支持中文啊,而且文件所在目录也不要有中文,否则会报错的。

shp与json互转

 

主要是为了得到坐标串,结果出来了就ok了。

shp与json互转

 

(4)ARCGIS10.2以上版本啊,支持了geometry转wkt/json

参考http://blog.csdn.net/linghe301/article/details/29554257,这哥们的博客很强大。

由于我的还是10.0,没有亲自试一试,不过肯定是没问题的啊。

(5)在线shp转geojson

网址http://shp2json.ronny.tw/

但是我没有研究明白是如何操作的。

(6)mapshaper,这个在线的很不错,可以拖拽shp,显然是html5做的啊,牛逼!

http://mapshaper.org/

不尽能转换,这个主要目的貌似是为了简化抽稀shp的。

 

 

二.json转shp

好像不好搞哦,我搜索了很久的啊。

(1)通过1(4)中提到的方法是可以的。得是arcgis认识的json格式才行吧。

(2)mapshaper,在线转换geoJson

shp与json互转

 

 

 

 

 

json具体用的时候肯定得根据自己的需要再上述结果上进行处理的,具体你是用手工的还是写程序来处理就看自己的了。

 

仅供参考,各位如果有更好的方法,可以交流学习啊,谢谢!

转载于:https://www.cnblogs.com/zhaoyanhaoBlog/p/9025592.html

在C#中,可以使用OGR库来实现shp与text之间的互转。首先,需要安装OGR库,可以通过NuGet包管理器来进行安装。 将shp为text,可以使用以下代码: ```csharp using OSGeo.OGR; // 打开shp文件 var driver = Ogr.GetDriverByName("ESRI Shapefile"); var dataSource = driver.Open("path/to/shapefile.shp", 0); // 获取第一个图层 var layer = dataSource.GetLayerByIndex(0); // 创建txt文件 var textDriver = Ogr.GetDriverByName("CSV"); var textDataSource = textDriver.CreateDataSource("path/to/textfile.txt", null); // 创建新的图层 var textLayer = textDataSource.CreateLayer("layer_name", null, wkbGeometryType.wkbUnknown, null); // 获取字段 var layerDef = layer.GetLayerDefn(); var fieldCount = layerDef.GetFieldCount(); for (int i = 0; i < fieldCount; i++) { var fieldDef = layerDef.GetFieldDefn(i); var fieldName = fieldDef.GetName(); var fieldType = fieldDef.GetFieldType(); var fieldWidth = fieldDef.GetWidth(); var fieldPrecision = fieldDef.GetPrecision(); // 在新的图层中创建字段 var textFieldDef = new FieldDefn(fieldName, fieldType); textLayer.CreateField(textFieldDef); } // 获取要素 var feature = layer.GetNextFeature(); while (feature != null) { // 在新的图层中创建要素 var textFeature = new Feature(textLayer.GetLayerDefn()); for (int i = 0; i < fieldCount; i++) { var fieldValue = feature.GetFieldAsString(i); textFeature.SetField(i, fieldValue); } // 设置几何图形 var geometry = feature.GetGeometryRef(); if (geometry != null) { var textGeometry = geometry.Clone(); textFeature.SetGeometry(textGeometry); } // 将要素写入文件中 textLayer.CreateFeature(textFeature); // 获取下一个要素 feature = layer.GetNextFeature(); } // 关闭文件 dataSource.Dispose(); textDataSource.Dispose(); ``` 将textshp,可以使用以下代码: ```csharp using OSGeo.OGR; // 打开txt文件 var driver = Ogr.GetDriverByName("CSV"); var dataSource = driver.Open("path/to/textfile.txt", 0); // 获取第一个图层 var layer = dataSource.GetLayerByIndex(0); // 创建shp文件 var shpDriver = Ogr.GetDriverByName("ESRI Shapefile"); var shpDataSource = shpDriver.CreateDataSource("path/to/shapefile.shp", null); // 创建新的图层 var shpLayer = shpDataSource.CreateLayer("layer_name", null, wkbGeometryType.wkbUnknown, null); // 获取字段 var layerDef = layer.GetLayerDefn(); var fieldCount = layerDef.GetFieldCount(); for (int i = 0; i < fieldCount; i++) { var fieldDef = layerDef.GetFieldDefn(i); var fieldName = fieldDef.GetName(); var fieldType = fieldDef.GetFieldType(); var fieldWidth = fieldDef.GetWidth(); var fieldPrecision = fieldDef.GetPrecision(); // 在新的图层中创建字段 var shpFieldDef = new FieldDefn(fieldName, fieldType); shpLayer.CreateField(shpFieldDef); } // 获取要素 var feature = layer.GetNextFeature(); while (feature != null) { // 在新的图层中创建要素 var shpFeature = new Feature(shpLayer.GetLayerDefn()); for (int i = 0; i < fieldCount; i++) { var fieldValue = feature.GetFieldAsString(i); shpFeature.SetField(i, fieldValue); } // 设置几何图形 var geometry = feature.GetGeometryRef(); if (geometry != null) { var shpGeometry = geometry.Clone(); shpFeature.SetGeometry(shpGeometry); } // 将要素写入文件中 shpLayer.CreateFeature(shpFeature); // 获取下一个要素 feature = layer.GetNextFeature(); } // 关闭文件 dataSource.Dispose(); shpDataSource.Dispose(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值