1.背景

最近要做一个地理空间数据不同格式之间的转换功能,在网上找了很多类库,因为我是在netcore中使用,所以找到两个比较好用的类库,第一个就是aspose.gis,但是收费的,就放弃这个了,第二个就是gdal类库,是免费的。最后选择的免费的gdal类库。

2.实现原理

借助gdal类库,通过获取不同空间数据格式的驱动对不同格式的数据进行处理和转换(不同格式之间的互转也是类似)。在netcore中使用需要下载gdal.core类库和Gdal.Core.WindowsRuntime(windows版本)或者Gdal.Core.LinuxRuntime(linux版本)。

最终就是要实现数据的导入和导出功能:

1.数据导入:将不同格式的空间数据坐标信息入库,并将数据对应的坐标系转换成84坐标系(本篇不细讲导入),如下图:

2.数据导出:将数据库中的坐标信息导出成不同格式的文件,并将坐标系转换成对应选中的坐标系,如下图:

3.代码

直接上干货:        

             需要注意的就是kml和kmz两个驱动名一样的时候会当成是kml解析

    /// <summary>/// 将json转换为其他格式的文件/// </summary>/// <param name="filePath">json的文件</param>/// <param name="foramt">要转换成的目标格式</param>/// <returns></returns>public static ExportJsonToFileDto JsonToFile(string filePath, string foramt){try{//注册GdalGdal.AllRegister();//注册OgrOgr.RegisterAll();//属性支持中文 Gdal.SetConfigOption("SHAPE_ENCODING", "UTF-8");//支持中文路径Gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");DataSource ds = Ogr.Open(filePath, 0);if (ds == null)//打开失败//返回的模型return new ExportJsonToFileDto() { Result = false }; ;//获取驱动名var layerName = GetDriverName(foramt);var dv = Ogr.GetDriverByName(layerName);var outPutPath = Path.Combine(Address, "json");if (!Directory.Exists(outPutPath)){Directory.CreateDirectory(outPutPath);}var fileName = $"{Guid.NewGuid()}.{foramt}";outPutPath = Path.Combine(outPutPath, fileName);//属性值使用utf-8编码,要不然会乱码string[] options = { "ENCODING=UTF-8" };var result = dv.CopyDataSource(ds, outPutPath, options );result.Dispose();//这是为了释放当前的gdal,同时可以补全转换后的json少括号的问题dv.Dispose();ds.Dispose();return new ExportJsonToFileDto() { Result = true, FileName = fileName, FilePath = outPutPath };}catch (Exception ex){//写日志,可以记录一下错误信息return new ExportJsonToFileDto() { Result = false };}}/// <summary>/// 通过不同的数据格式获取对应的驱动类型/// </summary>/// <param name="fileFormat"></param>/// <returns></returns>public static string GetDriverName(string fileFormat){//if (string.IsNullOrWhiteSpace(fileFormat) return "";var format = fileFormat.ToLower();var layerName = "";switch (fileFormat){case "shp":layerName = "ESRI Shapefile";break;case "geojson":case "json":layerName = "GeoJSON";break;case "kml":layerName = "KML";break;case "kmz":layerName = "LIBKML";break;case "dxf":layerName = "dxf";break;case "gpx":layerName = "GPX";break;default:layerName = "PCIDSK";break;}return layerName;}

4.特别说明

(1)在一些稍微复杂的情况下,导出kml是正常的,但是导出kmz会有问题,针对这个问题,想了一种解决办法,就是先用gdal库导出成kml,然后把kml组织成kmz需要的格式文件即可(可以通过zip格式转成kmz)。

(2)针对通过kml间接导出的kmz文件,在导入kmz时,有时会拿不到空间数据,针对这个问题,也是要通过解压kmz的形式,提取当中的kml文件,然后直接导入kml文件即可拿到相应的空间数据。

c#实现json转kml、kmz、shp格式相关推荐

  1. bigemap如何导入矢量边界范围下载地图(KML/KMZ/SHP)

    第一步:选在多边形工具 打开BIGEMAP软件,在软件的最上面工具栏选择[],单机左键选择,如下图: 第二步:点击上图中的[确定](提示:如果不是封闭的下载区域,将无法导入),如下图所示: 以下是红色 ...

  2. dxf制作kml_如何导入矢量边界文件,kml  shap.dxf 格式

    导入矢量边界文件下载 特别BIGEMAP地图下载器提供了多种选择的下载方式,方便用户得到不同的应用当中: 4.导入外部边界文件下载(支持kml/kmz/shp格式) 本文主要介绍应用多边形如何下载想要 ...

  3. 如何在地图上标注,并且导入导出kmz、kml、shp等格式

    官方网站:http://www.wolfmap.cn/ 打开WOLFMAP地图下载器,这里以百度地图为例.通过侧边栏切换到地图标注,新建一个文件夹.右键"我的标注"弹出菜单在选择& ...

  4. 【附练习数据】 .shp .dwg KML/KMZ常见矢量格式随意转换(ArcGIS和Global Mapper教程)

    1 KML/KMZ SHP DWG 这几我们工作中比较常见的矢量数据,有时由于软件的原因我们不得不要将数据进行格式转换. 今天就简单讲下在ArcGIS和Global Mapper中的转换 文末有矢量数 ...

  5. KMZ转换为KML,KML转换为shp文件格式方法

    最近项目使用谷歌地球的kmz数据,请教了各位高手收了解了kmz转换为kml到shp格式的方法: 参考资料 KMZ和KML转换为shape格式: ArcGIS学习记录-KMZ KML与SHP文件互相转换 ...

  6. 在SHP, DWG, DXF, KML/KMZ矢量数据中自由行走

    矢量数据是我们每天都要打交道的,范围勾画,数据处理,有时客户还时不时扔你一个你见都没见过的格式.这些都难免少不了一顿转换折腾. 那今天我们就来梳理下工作中我们常见的一些矢量数据的格式转换. .shp ...

  7. ArcGIS学习记录—SHP文件转换为KML KMZ数据,并显示面要素相应的标注

    网上教学shp矢量转KMZ的方法已经很多了,本人在通过学习网上的方法后,整理了一套比较方便的方法,并附加相应小工具,并且将遇到的相关问题也提供出来,提供给各位新人学习. 先不多说,直接上图.(图一图二 ...

  8. 【Python】批量爬取OSM建筑瓦片数据并整合为shp格式数据

    目录 1 简介 2 效果展示 3 思路及代码 3 完整代码 4 一些说明 1 简介 最近在做一项课题,涉及到建筑足迹(Building footprints)数据.所以想看看现在比较常用的都有什么产品 ...

  9. ESRI的Shapefile文件向Google Earth中KML文件的格式转换

    转载自http://wenku.baidu.com/link?url=3TG7c0cERbdnZwFBLq6n2v-chB-k4ja5ikNYSyRQHyLf4yvYCGBEGrlhch8GD5e-9 ...

  10. 华测RTK采集的GPX数据如何带属性转出kml、shp进行后续的管理和分析

    0.问题来源 部分自然资源和规划局经常性的基于华测中绘RTK设备采集点位.轨迹等相关数据.比如需要保护的古树.古建.古道路信息等. 后续一旦需要对这些古物进行改造或者方案设计,这些信息就显得十分关键. ...

最新文章

  1. 【PC工具】PhotoScape简单好用绿色免费功能强大的照片编辑器(文章评论小程序测试)...
  2. python中nltk_python2.7和NLTK安装详细教程
  3. python:实现简单的web开发demo
  4. iphone中使用第三方工具(RegexKitLite)实现正则表达式
  5. c语言中的素数定理,素数定理
  6. linux服务器不会中毒,[转载]ubuntu 不会中毒的原因(转)
  7. arduino joy_如何用Joy开发Kubernetes应用
  8. JavaScript玩转机器学习:模型和层
  9. Java中的强软弱虚引用《对Java的分析总结三》
  10. 使用思科asa防火墙deny QQ农场
  11. Python 数据分析实战,揭秘国内顶尖医院分布现状!
  12. 【数据结构】栈的应用--括号匹配的检验
  13. 【雅思大作文考官范文】——第十六篇:climate change essay
  14. 什么是域名服务器作用是啥,域名服务器的作用是什么?域名服务器原理及流程...
  15. 关于基线长度对双天线GNSS测姿精度的影响
  16. 网络爬虫是干什么的呢?
  17. 如何检索IDC研究报告?
  18. PyCharm 社区版(Community)能不能商用?
  19. python的学习笔记案例1--汇率兑换4.0
  20. 这届世界杯真是谁预测谁尴尬,他却要来一次现场直播预测……

热门文章

  1. 用户反馈小程序模板源码
  2. ISO27001学习笔记
  3. 字节跳动产品经理面经——飞书
  4. linux安装包文件格式,一般软件的安装包格式
  5. wps表格在拟合曲线找点_用excel寻找拟合曲线上的某一点的使用方法
  6. 基于点云的骨骼感知三维人体形状重建
  7. java项目实战达内代码_2018最新达内学子商城项目静态页面+sql+java代码
  8. 软考初级程序员真题资料(2009年上半年——2019年上半年)
  9. 阶段案例趣PHP网站开发实战,PHP基础案例第16章 阶段案例——趣PHP网站开发实战.ppt...
  10. ghost系统之优劣?