当前位置: 首页 > article >正文

【问题解决】ogr.GetDriverByName(‘ESRI Shapefile‘),driver输出路径命名问题

场景描述

之前在写这篇博客的时候【GIS教程】使用GDAL实现栅格转矢量(GeoJSON、Shapefile)- 附完整代码,发现一个小Tips:在这里插入图片描述
意思是:当生成ESRI Shapefile时候,这里output_file指定的是一个文件夹的路径,这样生成的shpfile文件都会存在这个文件夹目录下。

但是当我今天写代码的时候发现,我生成的shp并不会整理到文件夹中,于是我有了一系列的尝试和总结。

源代码

这里代码是实现将数组中的点转为point-shp文件。默认坐标系为web墨卡托(3857),属性表定义为三个字段分别为id,X,Y,储存点的xy坐标。

def points_to_shapefile(points, output_shp_path):
        # shp空模板
        prj = osr.SpatialReference()
        prj.ImportFromEPSG(3857)
        # 创建一个空的矢量图层
        driver = ogr.GetDriverByName('ESRI Shapefile')
        data_source = driver.CreateDataSource(output_shp_path)
        layer = data_source.CreateLayer('points', geom_type=ogr.wkbPoint, srs = prj)
        layer.CreateField(ogr.FieldDefn('id', ogr.OFTInteger))
        layer.CreateField(ogr.FieldDefn('X', ogr.OFTReal))
        layer.CreateField(ogr.FieldDefn('Y', ogr.OFTReal))

        # 将点数组添加到Shapefile
        for idx, point in enumerate(points):
            # 创建一个Feature
            feature = ogr.Feature(layer.GetLayerDefn())

            # 设置Feature的属性
            feature.SetField('id', idx)
            feature.SetField('X', point[0])
            feature.SetField('Y', point[1])
            # 创建点几何
            point_geom = ogr.Geometry(ogr.wkbPoint)
            point_geom.AddPoint_2D(point[0], point[1])

            # 设置Feature的几何
            feature.SetGeometry(point_geom)

            # 将Feature添加到图层
            layer.CreateFeature(feature)

            # 销毁Feature对象
            feature.Destroy()

        # 保存并关闭数据源
        data_source.Destroy()

points=[(np.float64(13120637.15326138), np.float64(2836732.2116149245)), (np.float64(13120244.669731455), np.float64(2836903.800231201))]
output_shp_path = 'points' #是输出的文件路径
points_to_shapefile(points, output_shp_path)

解决

总结成果如下:

涉及参数有两个:
(1)output_shp_path :是输出的文件路径,以下简称参数1
(2)layer = data_source.CreateLayer('points', geom_type=ogr.wkbPoint, srs = prj)中的'points':是指定义的矢量要素的图层名称,这里我命名为points。可以按需修改。,以下简称参数2

情况1:

参数1 = 参数2 时:根目录下生成文件夹points,shp要素名称points。

output_shp_path = 'points' 
layer = data_source.CreateLayer('points', geom_type=ogr.wkbPoint, srs = prj)

在这里插入图片描述

情况2:

参数1 名字不变加后缀.shp,根目录下直接生成points.shp

output_shp_path = 'points.shp' 
layer = data_source.CreateLayer('points', geom_type=ogr.wkbPoint, srs = prj)

在这里插入图片描述

情况3:

参数1 名字改名字加后缀.shp,根目录下生成newname.shp

output_shp_path = 'newname.shp' 
layer = data_source.CreateLayer('points', geom_type=ogr.wkbPoint, srs = prj)

在这里插入图片描述

情况4:

参数1参数2名字不一样,且不加后缀.shp,会在根目录下生成newname文件夹,文件夹中是shp文件,名称为points.shp,与参数2名称一致。

output_shp_path = 'newname' 
layer = data_source.CreateLayer('points', geom_type=ogr.wkbPoint, srs = prj)

在这里插入图片描述

总结:

1、output_shp_path 不加后缀.shp时,会生成以该名称命名的文件夹矢量要素名称为data_source.CreateLayer中定义的图层名称

2、output_shp_path 加后缀.shp时,会生成以该名称命名的shp要素,data_source.CreateLayer中定义的图层名称失效


http://www.kler.cn/a/464351.html

相关文章:

  • P8打卡——YOLOv5-C3模块实现天气识别
  • GitHub 及 GitHub Desktop 详细使用教程(通俗易懂)
  • linux驱动开发笔记
  • java控制语句详解
  • ts总结一下
  • 《CCSIP 2024中国网络安全产业全景册(第七版)》
  • 深入了解多模态深度学习:概述与未来发展
  • 基于Hadoop的物品租赁系统的设计与实现-springboot+vue
  • 单片机常用外设开发流程(1)(IMX6ULL为例)
  • MarkDown 的 mermaid gantt(甘特图)、mermaid sequenceDiagram (流程图) 语法解析和应用
  • SQL Server 架构、数据库文件组和数据库对象
  • 自动化删除work32挖矿脚本
  • windows C#-字符串和字符串字面量(一)
  • 力扣hot100——图论
  • Cauchy-Schwarz不等式:向量内积的“上限卫士”,帮你衡量向量有多“同向”
  • 数据挖掘——神经网络分类
  • df.replace({‘b‘: ‘.‘}, {‘b‘: np.nan})
  • SpringMVC(四)响应
  • 【Go学习】-01-1-入门及变量常量指针
  • R语言基础| 广义线性模型