in method ‘Geometry_Contains‘, argument 2 of type ‘OGRGeometryShadow *‘

8 篇文章 1 订阅

一、需求和问题

需求:我想找出pt这个坐标所在的图层的polygon的位置
我的代码如下:

import os
from osgeo import ogr
from shapely.geometry import Polygon, Point, MultiPolygon

#我的图层是多polygon数据
polygon_1106 = r'G:\shiya\lyr_name.shp'
ogr.UseExceptions() #捕获异常
driver = ogr.GetDriverByName("ESRI Shapefile")#获取驱动
input_dataset = driver.Open(polygon_1106,0)  #1代表可写,0代表可
target_lyr = input_dataset.GetLayer(0)#获取图层

pt = Point(290073.9839023614,4205727.000051972)
for in_feat in target_lyr: 
    polygon = in_feat.geometry()
    print(polygon.Contains(pt))

然后报错:
在这里插入图片描述

二、分析问题

问题根源是ogr和shapely这两个包。我在创建点要素pt的时候,用的是from shapely.geometry import Polygon, Point, MultiPolygon,该方法创建的要素的类型是class 'shapely.geometry.point.Point';
而我在读取polygon图层的时候用的是from osgeo import ogr,该方法返回的要素类型是class 'osgeo.ogr.Geometry'。而这两种类型是不可相互兼容的。

from osgeo import ogr
from shapely.geometry import Polygon, Point, MultiPolygon

pt = Point(290073.9839023614,4205727.000051972)
print(type(pt))
for in_feat in target_lyr: 
    polygon = in_feat.geometry()
    print(type(polygon))

在这里插入图片描述

三、解决问题

import os
from osgeo import ogr

#我的图层是多polygon数据
polygon_1106 = r'G:\shiya\lyr_name.shp'
ogr.UseExceptions() #捕获异常
driver = ogr.GetDriverByName("ESRI Shapefile")#获取驱动
input_dataset = driver.Open(polygon_1106,0)  #1代表可写,0代表可
target_lyr = input_dataset.GetLayer(0)#获取图层

x,y = 290073.9839023614,4205727.000051972
pt = ogr.Geometry(ogr.wkbPoint)
pt.AddPoint(x,y)
print(type(pt))
for in_feat in target_lyr: 
    polygon = in_feat.geometry()
    if polygon.Contains(pt):
        print(polygon)
        print(type(polygon))
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值