返回顶部
首页 > 资讯 > 后端开发 > Python >python如何使用GDAL实现栅格tif转矢量shp
  • 107
分享到

python如何使用GDAL实现栅格tif转矢量shp

2023-06-20 21:06:14 107人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章给大家分享的是有关python如何使用GDAL实现栅格tif转矢量shp的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言目前有一张tif格式的栅格影像,需要在WEB地图上进行展示,使用动态切片WMS的方

这篇文章给大家分享的是有关python如何使用GDAL实现栅格tif转矢量shp的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

前言

目前有一张tif格式的栅格影像,需要在WEB地图上进行展示,使用动态切片WMS的方式,渲染速度比较慢,而且大的时候会出现模糊的问题。并且后面需要做多期影像的切换,渲染与加载效率也值得关注。

计划是使用栅格转矢量的方式,将栅格数据转为矢量shp文件,然后进行矢量切片,使用Mapbox进行前端动态渲染。在网上查询了很多资料,有人说使用d3-contournode.js中生成或者使用rasterioPython中进行转换,整体过程都比较麻烦,很不易实现。最终选定了使用GDAL进行栅格转矢量的方法,代码比较简单。
原始tif影像(12.8MB)如下:

python如何使用GDAL实现栅格tif转矢量shp

核心函数

GDAL中栅格转矢量的函数主要是以下两个,二者的参数没有任何区别,只是功能有区别:

FPolygonize(*args, **kwargs)

FPolyGonize(Band srcBand, Band maskBand, Layer outLayer, int iPixValField, char options=None, GDALProgressFunc callback=0, void * callback_data=None) -> int

将每个像元转成一个矩形。

Polygonize(*args, **kwargs) **

Polygonize(Band srcBand, Band maskBand, Layer outLayer, int iPixValField, char ** options=None, GDALProgressFunc callback=0, void * callback_data=None) -> int

将每个像元转成一个矩形,然后将相似的像元进行合并。

转换代码

from osgeo import gdal, ogr, osrimport osimport datetimeimport numpy as nppath = "Z_NAFP20210727.tif"if __name__ == '__main__':    start_time = datetime.datetime.now()    inraster = gdal.Open(path)  # 读取路径中的栅格数据    inband = inraster.GetRasterBand(1)  # 这个波段就是最后想要转为矢量的波段,如果是单波段数据的话那就都是1    prj = osr.SpatialReference()    prj.ImportFromWkt(inraster.GetProjection())  # 读取栅格数据的投影信息,用来为后面生成的矢量做准备    outshp = path[:-4] + ".shp"  # 给后面生成的矢量准备一个输出文件名,这里就是把原栅格的文件名后缀名改成shp了    drv = ogr.GetDriverByName("ESRI Shapefile")    if os.path.exists(outshp):  # 若文件已经存在,则删除它继续重新做一遍        drv.DeleteDataSource(outshp)    Polygon = drv.CreateDataSource(outshp)  # 创建一个目标文件    Poly_layer = Polygon.CreateLayer(path[:-4], srs=prj, geom_type=ogr.wkbMultiPolygon)  # 对shp文件创建一个图层,定义为多个面类    newField = ogr.FieldDefn('value', ogr.OFTReal)  # 给目标shp文件添加一个字段,用来存储原始栅格的pixel value,浮点型,    Poly_layer.CreateField(newField)    gdal.Polygonize(inband, None, Poly_layer, 0)  # 核心函数,执行的就是栅格转矢量操作    # gdal.FPolygonize(inband, None, Poly_layer, 0)  # 只转矩形,不合并    Polygon.SyncToDisk()    Polygon = None    end_time = datetime.datetime.now()    print("Succeeded at", end_time)    print("Elapsed Time:", end_time - start_time)  # 输出程序运行所需时间

转换效果

  • 使用FPolygonize

转换之后的矢量数据有270MB,非常大,打开非常卡

python如何使用GDAL实现栅格tif转矢量shp

  • 使用Polygonize

合并之后的矢量数据有48MB,相对第一种方法数据量大大减少

python如何使用GDAL实现栅格tif转矢量shp

感谢各位的阅读!关于“python如何使用GDAL实现栅格tif转矢量shp”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: python如何使用GDAL实现栅格tif转矢量shp

本文链接: https://lsjlt.com/news/300012.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python如何使用GDAL实现栅格tif转矢量shp
    这篇文章给大家分享的是有关python如何使用GDAL实现栅格tif转矢量shp的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言目前有一张tif格式的栅格影像,需要在web地图上进行展示,使用动态切片WMS的方...
    99+
    2023-06-20
  • python 使用GDAL实现栅格tif转矢量shp的方式小结
    前言 目前有一张tif格式的栅格影像,需要在web地图上进行展示,使用动态切片WMS的方式,渲染速度比较慢,而且大的时候会出现模糊的问题。并且后面需要做多期影像的切换,渲染与加载效率也值得关注。 计划是使用栅格转...
    99+
    2022-06-02
    python GDAL栅格转矢量 python 栅格tif转矢量shp
  • 基于Python实现nc批量转tif格式
    由于做项目需要运用到netCDF格式的气象数据,而ArcGIS中需要用栅格影像进行处理,对于较多的文件,ArcGIS一个个手动转换过于繁琐,因此我们采用Python进行转换,当然也可...
    99+
    2024-04-02
  • Python如何利用GDAL模块实现读取栅格数据并对指定数据加以筛选掩膜
    1 代码分段讲解1.1 模块与路径准备首先,需要对用到的模块与存放栅格图像的各类路径加以准备。import os import copy import numpy as np import pylab as plt from osgeo i...
    99+
    2023-05-15
    Python gdal
  • Python ArcPy如何实现批量拼接长时间序列栅格图像
    本篇内容介绍了“Python ArcPy如何实现批量拼接长时间序列栅格图像”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先,我们...
    99+
    2023-07-05
  • Python利用GDAL模块实现读取栅格数据并对指定数据加以筛选掩膜
    目录1 代码分段讲解1.1 模块与路径准备1.2 栅格图像文件名读取与配对1.3 输出文件名称准备1.4 栅格文件数据与信息读取1.5 差值计算与QA波段筛选1.6 结果栅格文件写入...
    99+
    2023-02-23
    Python GDAL读取栅格数据 Python GDAL读取数据 Python GDAL Python读取栅格数据
  • HTML教程:如何使用Grid布局实现栅格布局
    在前端开发中,实现栅格布局是非常常见的需求,通过栅格布局可以灵活地排列网页中的各个元素,使页面美观且具有响应式布局。而在HTML中,我们可以使用Grid布局来实现栅格布局。本文将详细介绍如何使用Grid布局来实现栅格布局,并提供具体的代码示...
    99+
    2023-10-21
    html Grid布局 栅格布局
  • Python如何用arcpy模块实现栅格的创建与拼接
    本篇内容介绍了“Python如何用arcpy模块实现栅格的创建与拼接”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先,相关操作所需具体代码...
    99+
    2023-07-05
  • Python怎么用GDAL模块实现读取栅格数据并对指定数据加以筛选掩膜
    这篇文章主要讲解了“Python怎么用GDAL模块实现读取栅格数据并对指定数据加以筛选掩膜”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python怎么用GDAL模块实现读取栅格数据并对指定...
    99+
    2023-07-06
  • Python如何实现xml格式转txt格式
    本篇内容介绍了“Python如何实现xml格式转txt格式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、前言最近学习Yolo v5是遇见...
    99+
    2023-06-29
  • Python如何实现批量读取HDF多波段栅格数据并绘制像元直方图
    本篇内容介绍了“Python如何实现批量读取HDF多波段栅格数据并绘制像元直方图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先将本文所需...
    99+
    2023-07-05
  • 使用Python和GDAL给图片加坐标系的实现思路(坐标投影转换)
    ** 使用Python和GDAL给图片加坐标系 ** 假设你已经知道arcgis地理配准(如下图内容),懂一点python。 ** -目的和背景 1.从地图网站获得一张PNG格式...
    99+
    2024-04-02
  • 如何实现python图片格式转换脚本
    这篇文章给大家分享的是有关如何实现python图片格式转换脚本的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.cv2pip install opencv-python之后就可以import cv21.1 导包i...
    99+
    2023-06-22
  • 如何使用es6实现两个变量的转换
    本篇内容主要讲解“如何使用es6实现两个变量的转换”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用es6实现两个变量的转换”吧!4种实现:1、采用二进制异或的方法来交换数值,语法“a = ...
    99+
    2023-07-04
  • 如何在python中使用openpyxl实现带格式复制表格
    如何在python中使用openpyxl实现带格式复制表格?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。有合并单元格的,先把合并单元格复制过去,合并单元格用wm=list(...
    99+
    2023-06-13
  • 如何使用Python将图片转为漫画风格
    本篇内容主要讲解“如何使用Python将图片转为漫画风格”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Python将图片转为漫画风格”吧!安装OpenCV首先,我们需要安装OpenCV。...
    99+
    2023-07-06
  • 如何使用Golang实现Socket转发
    Golang是一种快速、高效且易于使用的编程语言,它被广泛应用于网络编程领域。在实际的项目中,我们常常需要进行Socket转发,本文将介绍如何使用Golang实现Socket转发。一、Socket转发简介Socket转发是指将一个Socke...
    99+
    2023-05-14
  • Python中如何使用pygame实现金币旋转效果
    这篇文章给大家分享的是有关Python中如何使用pygame实现金币旋转效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、实现逻辑step1、保存图像到list列表。step2、在主窗口每次显示一张list列...
    99+
    2023-06-15
  • 如何使用Bootstrap实现CSS3价格表
    这篇文章给大家分享的是有关如何使用Bootstrap实现CSS3价格表的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。先来看效果图查看演示 下载源码首先在页面中引入bootstra...
    99+
    2024-04-02
  • 如何使用css实现网格布局
    这篇“如何使用css实现网格布局”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“如何使用css实现网格布局”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作