查询

作者

肖恩吉利斯

作者

赛斯·吉文

联系

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.shapeindexresultObj.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() 用于使用来自另一层的结果进行查询。