首先需要引入NuGet包

ProjNET、NetTopologySuite、NetTopologySuite.Features、NetTopologySuite.GeoJson、

NetTopologySuite.Shapefile

之后直接上代码

shapePath为文件的路径,stringBuilder为返回值

using NetTopologySuite.Features;
using NetTopologySuite.Geometries;
using NetTopologySuite.IO;
using NetTopologySuite.IO.Converters;
using Newtonsoft.Json;
using ProjNet.CoordinateSystems;
using ProjNet.CoordinateSystems.Transformations;
using System;
using System.IO;
using System.Text;namespace Bd.Util.Web
{public  static class ShapeFileHelper{public static void ShpToGeoJson(string shapePath, out StringBuilder stringBuilder){ShpToFeatureCollection1(shapePath, out var collection);var target = new FeatureCollectionConverter();stringBuilder = new StringBuilder();var writer = new JsonTextWriter(new StringWriter(stringBuilder));var serializer = GeoJsonSerializer.Create(new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore },GeometryFactory.Default);target.WriteJson(writer, collection, serializer);writer.Flush();writer.Close();}private static void ShpToFeatureCollection1(string filename, out FeatureCollection collection){collection = null;try{var featureCollection = new FeatureCollection();if (!File.Exists(filename + ".dbf")){}if (!File.Exists(filename + ".prj")){}var mathForm = GetTransformFilter(filename);var dataReader = new ShapefileDataReader(filename, new GeometryFactory(new PrecisionModel()), Encoding.GetEncoding("GB2312"));while (dataReader.Read()){var transGeometry = Transform(dataReader.Geometry, mathForm);var feature = new Feature { Geometry = transGeometry };var length = dataReader.DbaseHeader.NumFields;var keys = new string[length];for (int i = 0; i < length; i++)keys[i] = dataReader.DbaseHeader.Fields[i].Name;feature.Attributes = new AttributesTable();for (var i = 0; i < length; i++){var val = dataReader.GetValue(i + 1);feature.Attributes.Add(keys[i], val);}featureCollection.Add(feature);}dataReader.Close();dataReader.Dispose();if (featureCollection.Count == 0){}collection = featureCollection;}catch (Exception ex){}}public static void Feature2GeoJson(Feature feature, out string geoJson){var geoJsonWriter = new GeoJsonWriter();geoJson = geoJsonWriter.Write(feature);}public static void Feature2Wkt(Feature feature, out string wkt){var writer = new WKTWriter();wkt = writer.Write(feature.Geometry);}public static Geometry Transform(Geometry geometry, MathTransform mathTransform){geometry = geometry.Copy();geometry.Apply(new TransFilter(mathTransform));return geometry;}/// <summary>/// geoJson 转 geometry/// </summary>/// <param name="geoJsonText"></param>/// <param name="geometry"></param>/// <param name="wkt"></param>public static void GeoJson2Geometry(string geoJsonText, out Geometry geometry, out string wkt){var reader = new GeoJsonReader();var writer = new WKTWriter();var feature = reader.Read<Feature>(geoJsonText);geometry = feature.Geometry;wkt = writer.Write(geometry);}public static MathTransform GetTransformFilter(string path){var ctFact = new CoordinateTransformationFactory();var csFact = new CoordinateSystemFactory();var wkt = File.ReadAllText(path);if (wkt.Contains("Gauss_Kruger")){wkt = wkt.Replace("Gauss_Kruger", "Transverse_Mercator");}var csForm = csFact.CreateFromWkt(wkt);var anotherSystem = GeographicCoordinateSystem.WGS84;var transformer = ctFact.CreateFromCoordinateSystems(csForm, anotherSystem);return transformer.MathTransform;}}
}

使用后端解析地图.shp.prj文件得到GeoJson数据相关推荐

  1. 日本国边界shp格式arcgis和geojson数据省县边界2021年资料

    日本国边界shp格式arcgis和geojson数据省县边界2021年资料,数据里面有名称字段,文件夹包含shp和geojson二种格式.下载链接: 在这里插入图片描述

  2. 解析oracle的dump文件,读懂数据块dump文件信息

    尊重作者著作,转自http://blog.csdn.net/guoyjoe/article/details/8567076 -------------------------------------- ...

  3. Geoserver怎样设置地图shp文件为相对路径,可轻松复制移植

    场景 GeoServer简介.下载.配置启动.发布shapefile全流程(图文实践): GeoServer简介.下载.配置启动.发布shapefile全流程(图文实践)_BADAO_LIUMANG_ ...

  4. arcgis中如何导出奥维可识别的图_如何将ArcGIS(SHP)文件导入到奥维中

    奥维支持导入北京54.西安80.CGCS2000等分带投影坐标系以及WGS-84经纬度坐标系以及自定义坐标系的SHP文件,可实现与ArcGIS的协同设计. 下面分别对奥维PC端和手机端导入SHP文件进 ...

  5. SHP(shapefile)文件详细格式介绍

    shape文件由ESRI开发,一个ESRI(Environmental Systems Research Institute)的shape文件包括一个主文件,一个索引文件,和一个dBASE表.其中主文 ...

  6. C#读取shp多边形文件

    读取给定的shp多边形文件并显示出来,程序框架见附件中程序代码,请在程序框架内完成此程序,使其达到我们程序设计要求. 一. 设计思路: 1. Shp.cs Shp.cs主要由两个类组成,Shp和Shp ...

  7. unity使用tiled文件,将数据用unity打开,可以无限tiled地图

    做游戏时,先实现游戏的基本功能,最后可能会用到更多的地图,对于创建地图如果有方便的软件,就更容易了,现在咱们展示一下如何用tiled制造地图,生成数据库,然后用unity显示出地图. 首先会使用的软件 ...

  8. python学习之中国地图shp文件下载与读取

    中国地图shp文件下载途径 地图选择器 网址: http://datav.aliyun.com/tools/atlas/#&lat=37.239127922945805&lng=116 ...

  9. GDAL创建带有空间参考坐标系的shp矢量文件遇到的问题与解决方法

    之前项目需求:创建矢量文件: 网上查找GDAL/OGR创建矢量文件的各种博客,也查了GDAL官网手册,可是实际生成的shp总是没有成功写入坐标系,空间参考坐标系总是unknown,这就让人很困惑了,实 ...

  10. 山东县市区矢量地图.shp较新

    山东县市区矢量地图.shp较新 https://download.csdn.net/download/bingrry/12317143 [本图适合于做示意图使用]此为本人经过联合和合并面状数据制作的山 ...

最新文章

  1. mapgis矢量化怎么打分数_mapgis矢量化的详细工作流程
  2. VS调试查看寄存器学习总结
  3. 在eclipse中new 对象后怎么通过快捷键自动生成返回对象
  4. SharePoint2010整合Silverlight 4应用——Bing地图控件
  5. 嵌入式linux mongodb,小白在Ubuntu安装mongoDB与mongo-c-driver
  6. Objective-C:内存管理的小结
  7. android item复用,RecyclerView item正确的复用方式
  8. 深入理解 switch....case 中的case
  9. curl Unsupported protocol: https 问题解决
  10. 谷歌浏览器安装FeHelper插件
  11. FAR花菜一个前所未有的机遇
  12. xshell免费版安装
  13. 【python标准库】sys模块全解
  14. 【ARM】IMX6UL串口通信
  15. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
  16. Smartbi电子表格_零编码做报表
  17. 噪声与振动控制工程手册_强夯施工振动安全距离研究总结说明
  18. 新华书店推网售业务对抗当当卓越
  19. 软件工程毕业设计课题(75)微信小程序毕业设计PHP购物商城小程序系统设计与实现
  20. 华为手机哪一款手机是鸿蒙系统_华为首款鸿蒙系统手机是哪一款

热门文章

  1. SpringBoot+POI方式导出excel【加水印】
  2. 面试前你要准备这些东西
  3. 数据分析案例-基于随机森林算法探索影响人类预期寿命的因素并预测人类预期寿命
  4. (二)外显子组数据分析之原始数据sra数据下载
  5. 软件测试系统性总结思维导图
  6. 用PhotoShop压缩PNG图片
  7. 通过倍福Twincat的R3IO添加外部C++程序
  8. centos7,php7.3使用pecl安装swoole,新手教学
  9. android gc卡顿,由于频繁GC造成的界面卡顿原因分析
  10. 2018年三月总结与四月展望