如何在一个shapefile列表中检查一个点是否落在里面并且它是否与给定字段相同?

2024-06-08 04:08:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在绘制地址点并检查它们是否在一个大的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)

但对于形状文件。。。你知道吗


Tags: 代码in信息区域列表getaddress地址
1条回答
网友
1楼 · 发布于 2024-06-08 04:08:31

我想我找到了一个解决办法,虽然相当麻烦。 形状输入.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

相关问题 更多 >

    热门问题