查询¶
- 作者
肖恩吉利斯
- 作者
赛斯·吉文
- 联系
Sethg在gegraph ika.co.uk网站上
- 最后更新
2021-05-22
介绍¶
MapScrip HOWTO文档旨在通过特定主题的用法示例来补充API参考。本文档中的所有示例都是指与MapServer一起分发并位于以下源代码管理中的Mapfile和Testing Layers Mapserver/tests
。
下面的示例是用Python语言编写的。所有MapScrip语言都使用相同的API,但需要使用相关语言的语法重写。查询概述
查询结果集¶
可以使用空间查询方法或属性查询方法查询地图图层以选择要素。暂时忽略我们执行的是空间查询还是属性查询,结果如下所示:
# for any query to be successful it needs to have a template
# set - any value here will do
if not layer.template:
layer_obj.template = "ttt"
layer.query() # not an actual method!
results = layer.getResults()
在失败的查询或具有零结果的查询的情况下, layerObj.getResults()
返回NULL。
结果集成员¶
查询结果的单个成员的获取方式如下:
if results:
for i in range(results.numresults): # iterate over results
result = results.getResult(i)
这 mapscript.resultObj
是该层的一个要素的句柄,它具有 resultObj.shapeindex
和 resultObj.tileindex
可用作参数的属性 layerObj.getShape()
。
结果特征¶
现在可以将前面的示例代码扩展到获取所有查询要素的情况:
layer.template = "FAKE"
layer.queryByAttributes(test_map, "FID", '"1"', mapscript.MS_MULTIPLE)
results = layer.getResults()
if results:
# open layer in preparation of reading shapes
layer.open()
for i in range(results.numresults):
result = results.getResult(i)
shape = layer.getShape(result)
# get the value of the attribute at index 1
print(shape.getValue(1))
# close when done
layer.close()
属性查询¶
按属性¶
使用 layerObj.queryByAttributes()
用于按属性查询。注意:属性是字符串。
# select by feature Id
layer.queryByAttributes(test_map, "FID", "1", mapscript.MS_MULTIPLE)
# select by a string attribute, returning a single result
layer.queryByAttributes(test_map, "FNAME", "A Polygon", mapscript.MS_SINGLE)
空间查询¶
矩形的¶
使用 layerObj.queryByRect()
用于使用边界框进行查询。 MS_MULTIPLE
是默认设置的。
qrect = mapscript.rectObj(-10.0, 45.0, 10.0, 55.0)
layer.queryByRect(test_map, qrect)
逐点¶
使用 layerObj.queryByPoint()
用于使用点进行查询。该点也可以被缓冲。
qpoint = mapscript.pointObj(0.0, 51.5)
layer.queryByPoint(test_map, qpoint, mapscript.MS_MULTIPLE, 2.0)
按形状¶
使用 layerObj.queryByShape()
用于使用形状进行查询。
qrect = mapscript.rectObj(-10.0, 45.0, 10.0, 55.0)
qshape = qrect.toPolygon()
self.layer.queryByShape(self.map, qshape)
通过选择¶
使用 layerObj.queryByFeatures()
用于使用来自另一层的结果进行查询。