首页 > 编程语言 >GDAL-Python将s57数据转换为GeoJSON

GDAL-Python将s57数据转换为GeoJSON

时间:2023-07-24 23:33:07浏览次数:34  
标签:layer enc Python GeoJSON s57 geojson file path os

from osgeo import ogr
import subprocess
import glob
import os

OGR_S57_OPTIONS = "SPLIT_MULTIPOINT=ON,ADD_SOUNDG_DEPTH=ON"

def GetAllS57Repertory():
    S57Path = []
    for _file in glob.glob(('{0}{1}*.000').format(path, os.sep)):
        S57Path.append(_file)
    return S57Path


def convert():
    # geojson_layers = []
    for _file in GetAllS57Repertory():
        input_file = ogr.Open(_file, 0)
        if not os.path.exists(path+"/geojson/" + os.path.splitext(os.path.basename(_file))[0]):
            os.makedirs(path+"/geojson/" + os.path.splitext(os.path.basename(_file))[0])

        # Get the layers in the file
        enc_layers = []
        for featsClass_idx in range(input_file.GetLayerCount()):
            featsClass = input_file.GetLayerByIndex(featsClass_idx)
            enc_layer = featsClass.GetName()
            enc_layers.append(enc_layer)

        # Convert them into geojson
        for enc_layer in enc_layers:
            # print(f"Converting {enc_layer} to geojson...")
            geojson_layer = f"{path}/geojson/{os.path.splitext(os.path.basename(_file))[0]}/{enc_layer}.geojson"

            # Use ogr2ogr to extract geojson from the enc file
            opt = 'RETURN_PRIMITIVES=OFF, RETURN_LINKAGES=OFF, LNAM_REFS=ON, UPDATES=APPLY, SPLIT_MULTIPOINT=ON,RECODE_BY_DSSI=ON: ADD_SOUNDG_DEPTH = ON'
            subprocess.call(
                # RETURN_PRIMITIVES=OFF, RETURN_LINKAGES=OFF, LNAM_REFS=ON, UPDATES=APPLY, SPLIT_MULTIPOINT=ON,RECODE_BY_DSSI=ON: ADD_SOUNDG_DEPTH = ON
                # f"OGR_S57_OPTIONS={OGR_S57_OPTIONS} ogr2ogr -f GeoJSON -lco 'ENCODING=ascii' -t_srs EPSG:4326 {geojson_layer} {_file} {enc_layer}",
                # f"OGR_S57_OPTIONS={OGR_S57_OPTIONS} ogr2ogr --config SHAPE_ENCODING -f GeoJSON -t_srs EPSG:4326 {geojson_layer} {_file} {enc_layer}",
                f"ogr2ogr -overwrite -f GeoJSON {geojson_layer} {_file} {enc_layer}",
                shell=True,
            )


if __name__ == "__main__":
    path = 'D:/DATA/charts'
    convert()

标签:layer,enc,Python,GeoJSON,s57,geojson,file,path,os
From: https://www.cnblogs.com/echohye/p/17578646.html

相关文章

  • Python入门 - 字符文件读写
    常用操作字符文件本质上还是用二进制方式写出,只是他多了一步查找字符的二进制值的过程。比如:9用二进制写出就是0b1001,utf-8的'9‘写出就是要先在utf-8码表中找'9'对应的二进制0b111001,然后再写出。  写ifnotos.path.exists("NewFolder"):os.mkdir("NewFolder")......
  • python jsonpickle模块不序列化私有变量
    jsonpickle模块可以把对象序列化为JSON文件,还是比较方便的.但是并不是所有变量都需要序列化的,比如有些私有变量就不需要序列化,下面是实现方法:importjsonpickleclassNoSerailPrivates:'''表示不序列化私有变量,以_开头都变量'''def__getstate__(self):......
  • 饮冰三年-人工智能-Django淘宝拾遗-85-常用的Python格式化工具
       Python代码格式化对于团队协作、代码质量、错误预防以及与Python社区的契合都具有重要意义。好的代码格式化不仅是一种编码规范,更是一种良好的编码习惯,有助于提高整个项目的质量和可维护性。   在团队中,可能有不同的编码规范和自定义的格式化规则。尽管有一些格式......
  • CentOS升级Python到2.7版本
    查看python的版本viewsource1 python-VPython2.4.31.先安装GCCviewsource1 yum-yinstallgcc2.下载Python-2.7.2viewsource1 wgethttp://python.org/ftp/python/2.7.2/Python-2.7.2.tar.bz23.解压Python-2.7.2viewsource1 tar-jxvfPython-2.7.2.tar.bz24.进......
  • 基于Python实现种差值方法
    完整资料进入【数字空间】查看——baidu搜索"writebug"一、种差值方法的实现与问题三种插值方法都是使用Python自己实现的。1.1最近邻插值寻找每个中心点周围的八个点中有无未丢失的点,如果有的话就赋值为第一个找到的点,如果没有就扩大范围再次寻找,在最大范围内都找不到的话就跳过......
  • python虚拟环境的安装
    ​1.虚拟环境有多种-Virtualenv第三方,使用比较多-pipenv官方的2.需要安装的两个模块pip3installvirtualenv第三方虚拟环境pip3installvirtualenvwrapper-win 增加模块,在win上让虚拟环境更好用3.配置虚拟环境控制面板=>系统和安全=>系统=>高级系统设......
  • Python学习笔记:递归、闭包以及装饰器
    一、首先,什么是递归?首先,简单来说递归就是在运行的过程中不断调用自身,从而完成“递”和“归”两个过程。在Python当中递归函数也是这个道理,通过直接或者间接调用函数本身就叫递归函数。注:在Python中编写递归函数一定要有结束条件否则会导致内存溢出。1、Python案例:​ 首先......
  • 快速检测HTTP代理IP是否有效的方法及python代码示例
     1.使用在线代理检测工具:有许多免费的在线代理检测工具可用,如ProxyChecker、ProxyScrape等。只需将待检测的代理IP和端口输入工具中,点击开始检测,即可迅速获得代理的可用性和匿名性等信息。 2.使用命令行工具进行检测:在命令行中使用curl命令来测试代理的可用性。例如,输入命令"......
  • python爬虫实战——小说爬取
    python爬虫实战——小说爬取基于requests库和lxml库编写的爬虫,目标小说网站域名http://www.365kk.cc/,类似的小说网站殊途同归,均可采用本文方法爬取。目标网站:传送门本文的目标书籍:《我的师兄实在太稳健了》“渡劫只有九成八的把握,和送死有什么区别?”基本思路网络爬虫的工作实际上主......
  • python DB2 01 安装篇
    #1安装pipinstallibm_db-ihttps://pypi.douban.com/simple安装完,程序里importibm_db,如果没有报错基本就成功了但是在真正执行SQL语句的时候,我报错了:SQLCODE=-1042解决方法:找到Python目录下的site-packages\clidriver\bin\amd64.VC12.CRT中找到msvcp120.dll、msvc......