首页 > 其他分享 >.NET|--杂类|--将Shp文件转为GeoJson-通过GDAL

.NET|--杂类|--将Shp文件转为GeoJson-通过GDAL

时间:2024-07-18 18:19:02浏览次数:6  
标签:Shp 文件 -- GeoJson OSGeo GDAL

前言


真实需求是将Shp转为pbf文件,
不过我现在已经实现了, 将GeoJson格式数据转换为pbf文件, 
所以需要实现将Shp文件转换为GeoJson格式即可.

1.下载GDAL的程序集

下载地址 → https://www.gisinternals.com/development.php

下载完成, 解压zip文件,可以看到这些dll文件(路径 : release-1930-x64-gdal-3-9-1-mapserver-8-2-0\bin\gdal\csharp)

2."依赖项-程序集"中添加4个程序集

依赖项→(右击)→添加项目引用→浏览 : 将这4个程序集选中.

3.Nuget包管理器,安装GDAL

Visual Studio菜单栏--工具--NuGet包管理器--管理解决方案的NuGet程序包

搜索"GDAL", 不出意外的, 第一个就是要安装的~

注意, Nuget中安装了GDAL后, 会自动生成一个类GdalConfiguration, 后面会用到

4.代码


 public static class ShpFileUtility
    {
        /// <summary>
        /// 将Shp文件转换为GeoJson格式文件
        /// </summary>
        /// <param name="shpFilePath"></param>
        /// <param name="geoJSONFilePath"></param>
        /// <returns></returns>
        public static bool Convert2GeoJSONFile(string shpFilePath, string geoJSONFilePath)
        {
            bool isOk = false;

            GdalConfiguration.ConfigureGdal();
            GdalConfiguration.ConfigureOgr();

            if (string.IsNullOrWhiteSpace(shpFilePath) || string.IsNullOrWhiteSpace(geoJSONFilePath))
            {
                throw new ArgumentException("输入参数路径不合法");
            }

            OSGeo.GDAL.Gdal.AllRegister();
            OSGeo.OGR.Ogr.RegisterAll();

            // 为了支持中文路径,请添加下面这句代码
            OSGeo.GDAL.Gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
            // 为了使属性表字段支持中文,请添加下面这句
            OSGeo.GDAL.Gdal.SetConfigOption("SHAPE_ENCODING", "");

            //Gdal.SetConfigOption("DXF_ENCODING", "UTF-8");

            //打开数据
            DataSource ds = Ogr.Open(shpFilePath, 0);
            if (ds == null)
            {
                throw new Exception($"打开文件失败{shpFilePath}");
            }
            using OSGeo.OGR.Driver dv = Ogr.GetDriverByName("GeoJSON");
            if (dv == null)
            {
                throw new Exception($"打开驱动失败:GeoJSON");
            }

            using var ret = dv.CopyDataSource(ds, geoJSONFilePath, null);
            // 手动释放, 否则生成的geoJSONFilePath一直被占用, 并且反序列化JSON的时候会报错 : Newtonsoft.Json Unexpected character encountered while parsing value: .Path...
            ret.FlushCache();
            ret.Dispose();


            isOk = true;
            return isOk;
        }

    }

摘抄文档

标签:Shp,文件,--,GeoJson,OSGeo,GDAL
From: https://www.cnblogs.com/love-zf/p/18310209

相关文章

  • C# annoymous object contain array
    privatevoidSerializeDemo(){varobj=new[]{new{CountryId=1,CountryName="USA",StateList=new[]{new[]{......
  • Mac使用Charles抓包并且解决中文乱码
    1.安装软件直接去官网下载,这里就不多比比了。2.激活下载好之后打开界面,点击help->register输入下面这个,如果不能使用再百度一下,多得很RegisteredName:https://zhile.ioLicenseKey:48891cf209c6d32bf4123.解决乱码问题:Proxy->SSLProxyingSettings,勾选EnableSSLProxying,点......
  • 前端WebSocket的方法封装
    一、封装方法在项目根目录src下的utils中新增webSocketManager.js封装文件,代码内容如下://webSocketManager.js/**WebSocketMessenger封装类*/classWebSocketManager{constructor(url=null,userId=null,receiveMessageCallback=null){this.socket=nul......
  • 8个软件和渲染农场:让3D建模和渲染变得简单
    3D建模和渲染已成为艺术与技术的交汇点,尽管这一领域充满挑战,但总有一些工具和资源能让用户使用变得不那么艰难。今天,我们将探讨“8个软件和渲染农场:让3D建模和渲染变得简单”,这些工具不仅简化了建模和渲染的过程,还通过渲染农场技术,使得即使是资源有限的个人也能享受到专业的渲染效......
  • Ubuntu 安装docker
    一、docker安装本文主要是基于Ubuntu18.04操作系统安装docker的方法,本文基本涵盖基于前人所有可行的安装步骤与基础使用方法,由于笔者使用默认存储库在Ubuntu上成功安装了docker,因此主要首先介绍该方法和一些基础的使用操作。第1步:更新软件存储库更新本地软件数据库以确保可以访......
  • 拓扑排序 + 习题
    P4017最大食物链计数 题目链接:https://www.luogu.com.cn/problem/P4017题意:给你一个食物网,求出这个最大食物链的数量最大食物链定义为左端不会捕食其他捕食者,最右端不会被捕食.解释看例子第1行nm表示生物种类n和吃和被吃的关系m接下来m行AB表示A被B吃.........
  • 视频联网共享平台LntonCVS视频监控汇聚平台视频云解决方案
    LntonCVS流媒体平台是一款遵循国家GB28181标准协议的先进视频监控与云服务平台。该平台设计独特,能够同时接入并处理多路设备的视频流,支持包括RTSP、RTMP、FLV、HLS、WebRTC在内的多种视频流格式的分发。其功能丰富多样,涵盖了视频直播监控、云端录像存储、高效的云存储解决方案......
  • YARA:第十三章-编写定制化模块
        目录1. 模块模板2.模块集成3.声明部分(Declarationsection)3.1基础类型(Basictypes)3.2结构(Structures)3.3 数组(Arrays)3.4字典(Dictionaries)3.5方法(Function)4.初始化和退出函数(Initialization and finalization)5.加载函数和退出加载函数(Loadand......
  • 聊聊测试用例编写方法及适用场景
    有过一定测试理论基础的从业者,对测试用例编写方法基本上可以张口就来,什么等价类划分法,边界值分析法,因果图法,场景设计法,错误猜测法等。这篇文章主要聊聊等价类划分,边界值分析法两个使用频率稍微较高的测试用例编写方法和适用场景。等价类划分法:是一种常用的黑盒测试技术,用于减......
  • C语言 指针方法 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对
    输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:第一个:输入10个数;第二个:进行处理;第三个:输出10个数。#include<stdio.h>voidinputNumbers(int*arr){printf("Enter10integers:");for(inti=0;i<10;i++){......