【问题标题】:Get features by querying shapefile通过查询 shapefile 获取特征
【发布时间】:2015-12-08 17:58:38
【问题描述】:

我有一个 shapefile,我想通过执行 SQL 脚本来查询几何(多边形)内部的特征。我正在使用 Python osgeo 库来运行查询:

shapefile = osgeo.ogr.Open(file)
layer = shapefile.GetLayer()
driver = osgeo.ogr.GetDriverByName('ESRI Shapefile')
layer = shapefile.GetLayer()
test = shapefile.ExecuteSQL('select * from "%s"' % layer.GetName())

不过,我不知道如何改变这个SELECT语句来选择是多边形的内部项目(即POLYGON(12.578608968 55.6344916225,12.578625747 55.6344383472,12.5791438324 55.633937277,12.5792915832 55.6339468684,12.5793944291 55.6340760336,12.578608968 55.6344916225))。我的直觉说它会是这样的:

select * from layer
where geometry in Polygon(.....)

我可以使用 QuantumGIS 桌面中的 GUI 来做到这一点,因此它必须也可以在 SQL 中查询要素,尽管我在网上找不到任何资源。

对此有什么想法吗?

【问题讨论】:

  • Qgis 控制台(python)可以吗?
  • 你这是什么意思?我不想使用 Qgis。我拥有的是独立的 Python 应用程序,我想在其中查询 shapefile。
  • 您要选择另一个多边形内的多边形吗?那么你需要两个多边形还是单独的几何图形?例如县内的学校?
  • 我想选择多边形中的点(来自 shapefile 的特征)
  • 好的,那么示例将是 X 县内有多少所学校?

标签: python sql gis qgis osgeo


【解决方案1】:

我认为 GDAL 的 Intersects 方法是您需要的方法,它通过比较来确定两个几何图形是否相互交叉:

geomA.Intersects(geomB)

使用此方法,您可以将要比较的多边形保存到几何中,然后迭代 shapefile 中的特征,比较每个特征以查看它是否与所需的多边形相交(使用GetNextFeature(),或通过执行一些查询然后迭代结果集)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 2015-09-13
    相关资源
    最近更新 更多