Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在shapefile列表中检查一个点是否位于内部,并且它是否与给定字段相同?_Python_List_Gdal_Shapefile_Osgeo - Fatal编程技术网

Python 如何在shapefile列表中检查一个点是否位于内部,并且它是否与给定字段相同?

Python 如何在shapefile列表中检查一个点是否位于内部,并且它是否与给定字段相同?,python,list,gdal,shapefile,osgeo,Python,List,Gdal,Shapefile,Osgeo,我正在绘制地址点并检查它们是否在一个大的shapefile中。 但是,现在我还要检查它们是否属于市区类型。此信息以功能列表的形式提供,其中一列为TYPE。如果我想要的点是城市还是非城市,我通过(城市=真) 我的共存点代码: def get_random_point_in_polygon(region, urban=None): while True: address = ogr.Geometry(ogr.wkbPoint) address.AddP

我正在绘制地址点并检查它们是否在一个大的shapefile中。 但是,现在我还要检查它们是否属于市区类型。此信息以功能列表的形式提供,其中一列为TYPE。如果我想要的点是城市还是非城市,我通过(城市=真)

我的共存点代码:

def get_random_point_in_polygon(region, urban=None):
    while True:
        address = ogr.Geometry(ogr.wkbPoint)    
        address.AddPoint(random.uniform(region.get_region().geometry().GetEnvelope()[0],
                                    region.get_region().geometry().GetEnvelope()[1]),
                     random.uniform(region.get_region().geometry().GetEnvelope()[2],
                                    region.get_region().geometry().GetEnvelope()[3]))
        if region.get_region().geometry().Contains(address) and XXXXXXXXXX:
            return address
区域是一个大的形状文件 现在我还列出了其他52项功能,它们都在该区域内。 它们有一个包含城市或农村信息的字段

我想用一个代码来实现我的XXXXXX,代码上写着:“如果地址在列表中的任何功能中,那么字段=URBAN”

有什么想法吗? 比如:

any(x in a for x in b)

但是对于shapefile…

我想我找到了一个解决方案,尽管相当麻烦。 shapeInput.urban是一个要素列表

但是,请注意,此代码非常昂贵。鉴于城市地区比农村地区小得多,这确实需要很长时间

好吧,它起作用了

def get_random_point_in_polygon(region, urban=True):
    while True:
        address = ogr.Geometry(ogr.wkbPoint)
        address.AddPoint(random.uniform(region.get_region().geometry().GetEnvelope()[0],
                                    region.get_region().geometry().GetEnvelope()[1]),
                     random.uniform(region.get_region().geometry().GetEnvelope()[2],
                                    region.get_region().geometry().GetEnvelope()[3]))
        if region.get_region().geometry().Contains(address):
            if urban is True:
                for item in ShapesInput.urban:
                    if item.geometry().Contains(address):
                        return address
            else:
                return address

啊!请找个人!