如何检查shapefile列表是否有一个点落在内部并且它与给定的FIELD相同?

时间:2016-01-31 17:43:32

标签: python list gdal shapefile osgeo

我正在绘制地址点并检查它们是否在大型shapefile中。 但是,现在我还要检查它们是否属于URBAN类型。此信息来自其中一列为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

Region是一个大型shapefile 现在我还列出了其他52个功能,这些功能都在区域内。 它们有一个包含URBAN或RURAL信息的FIELD。

我希望使用以下代码来实现我的XXXXXX:'如果地址位于列表中的任何功能内,则为FIELD = URBAN'

有什么想法吗? 类似的东西:

any(x in a for x in b)

但是对于shapefile ...

1 个答案:

答案 0 :(得分:0)

我认为我找到了一个解决方案,虽然相当繁琐。 ShapesInput.urban是一个功能列表

但请注意,此代码的成本非常高。鉴于城市地区比农村地区小得多,确实需要很长时间。

嗯,它有效......

SELECT link, description, resources, keyword 
FROM _db 
INNER JOIN keywords 
ON _db.id=keywords.db_id
WHERE keyword.value IN (" . atomize($q) . ")