GDAL+OGR学习

这篇博客介绍了如何使用GDAL+OGR库在Python环境中对高德POI数据进行筛选。作者首先讲述了如何解决GDAL库安装问题,然后展示了如何通过表格数据筛选出特定类型的POI,并将筛选结果保存到新的shapefile中。整个过程涉及到了数据处理、字段添加和特征筛选等操作。
摘要由CSDN通过智能技术生成

GDAL+OGR学习

每次写代码用Arcpy就得切回python2,很麻烦,故来学习一下gdal+ogr。

gdal库安装

直接cmd写pip intsall gdal会报错
在这里插入图片描述
打开该链接gdal库下载,根据python版本下载对应版本的包,我的版本是python3.9+64位,按需下载。
在这里插入图片描述
在这里插入图片描述
将wheel文件复制到相应文件夹再次运行pip install 安装成功。在这里插入图片描述

使用OGR筛选数据

分别是高德POI表type结构和POIshp type的结构
在这里插入图片描述在这里插入图片描述
将利用表格内含有的POI类型里对shp里的的POI类型进行筛选

#-*- coding:utf-8 -*-
#2022.2.10
'''
将表格里统计的poi进行筛选,然后选出指定区域内的poi类别
'''
import time
import pandas as pd
from osgeo import ogr
import os

def identify(poistr,selectpoilist):
    if poistr.split(';')[2] in selectpoilist:
        return 1
    else:
        return 0

def selectpoi(poitype,lyr):
    n = lyr.GetFeatureCount()
    print("共",n,"条poi数据")
    #添加字段
    defn = lyr.GetLayerDefn()
    fieldIndex = defn.GetFieldIndex('selectid')
    if fieldIndex < 0:
        # 添加字段
        lyr.CreateField(  # 为图层添加一个selectid字段
            ogr.FieldDefn('selectid', ogr.OFTInteger,SetPrecision(3))
        )
    fieldIndex2 = defn.GetFieldIndex('selectid')
    if fieldIndex2 > 0:
        print("字段创建成功:", fieldIndex)
      
    m = 0
    starttime = time.time()
    for feat in lyr:
        name = feat.GetField('name')
        type = feat.GetField('type')
        #计算r值判断是否选取,>0则选取,是0则不选
        if (type.count("|")>0):
            r=0
            for i in range(0,type.count("|")):
                r =r+identify(type.split('|')[i],poitype)
        else:
            r=identify(type,poitype)
        if  r>0:
            feat.SetField('selectid', 1)  # 设置字段的值
        else:
            feat.SetField('selectid', 0)  # 设置字段的值
        lyr.SetFeature(feat)
        m=m+1
        print("正在运行第",m,"条数据",feat.GetField('selectid'),name,type)
        if m==n:
            break;
    endtime = time.time()
    print("运行时间共计",endtime-starttime)


if  __name__=="__main__":
    #读取POI类型表格
    datapath = r'E:\WHDATA\region_data\jianghan_district\database'
    poifilename  = "./细类别POI.xlsx"
    poitype = pd.read_excel(poifilename)
    type = poitype['小类'].to_list()
    #读取江汉区POIshp数据
    in_poishp = os.path.join(datapath,"poi.shp")
    outpath = os.path.join(datapath,"poi_select.shp")
    ds = ogr.Open(in_poishp,1)#1表示可写,0表示只读
    lyr = ds.GetLayer()
    selectpoi(type,lyr)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值