MarkLogic搜索包含多边形的文档
我正试图针对包含地理空间信息的MarkLogic文档集编写一个查询。搜索包含点的文档相对容易,但我有一些定义多边形的文档MarkLogic搜索包含多边形的文档,marklogic,Marklogic,我正试图针对包含地理空间信息的MarkLogic文档集编写一个查询。搜索包含点的文档相对容易,但我有一些定义多边形的文档 <gml:Polygon gml:id="test" srsName="EPSG:4326"> <gml:exterior> <gml:LinearRing> <gml:pos>0 5</gml:pos> <gml:pos>5 10</gml:pos>
<gml:Polygon gml:id="test" srsName="EPSG:4326">
<gml:exterior>
<gml:LinearRing>
<gml:pos>0 5</gml:pos>
<gml:pos>5 10</gml:pos>
<gml:pos>10 5</gml:pos>
<gml:pos>5 0</gml:pos>
<gml:pos>0 5</gml:pos>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
0 5
5 10
10 5
5 0
0 5
我的问题是,我找不到cts:或gml:类型的查询,该查询允许用户定义多边形来搜索多边形。我可以使用()类型的函数比较多边形,但这似乎不允许我查询多边形,只需比较形状对象即可
如果您对如何执行此操作提出任何建议(或确认我无法执行此操作),我们将不胜感激。创建一个
cts:polygon
,并将其与一起使用。$regions
参数采用cts:region*
,而cts:polygon
是cts:region
的子类型。一旦有了cts:element地理空间查询
,您就可以将其与其他cts:query
项组合,并将其与或一起使用
在尝试创建一个按预期工作的查询时经过了大量的尝试和错误之后,我创建了一个适合我的情况的解决方案。我在MarkLogic中的文档混合了
gml:Point
和gml:Polygon
信息。我遇到的问题是,当用户输入任何WKT查询时,试图获得一个涵盖这两种情况的查询
例如gml:Point
:
<gml:Point srsDimension="2" srsName="http://somesite.com">
<gml:pos>1 1</gml:pos>
</gml:Point>
然后,添加适当的地理空间元素子索引将使查询返回我所期望的结果,并给出0.2秒以下的响应。很接近,但仍有一些情况下,您的搜索多边形可以覆盖数据库中的区域,而不覆盖该区域的一个边界点 MarkLogic Professional Services有一个库,可以对存储的多边形、线串、长方体、圆进行标准地理操作(相交、不相交、包含、内部、重叠等),它通过使用预过滤步骤工作,该步骤涉及基于cts的正向和反向查询的组合:边界框和附加装饰点,利用MarkLogic地理索引。然后,它有一个第二步,对第一次过滤后的多边形/区域执行细粒度的精确过滤,因此最终得到一组精确的匹配区域
它不是公开提供的,但是如果您想引入专业服务来访问该库,可以联系您的MarkLogic客户经理。那么您想搜索具有特定顶点集的多边形吗?仅精确匹配?任何匹配项是否也会以同样的方式使用
gml:Polygon
?我希望能够使用多边形搜索多边形,并为用户提供指定“相交”、“包含”的选项。。。可能是“不相交”(我没有看到API调用,但我假设有一种方法可以做到这一点)。Polygon只是一个例子,因为我希望能够接收WKT并将其用于搜索参数。这绝对是我所需要的,尽管测试我的数据返回的结果不够多(根据我假设的结果)。我将进一步讨论这个问题,但如果我不能弄清楚如何得到我期望的结果,我可能不得不提出另一个问题。经过一系列测试,这实际上不起作用。查询没有在一个非常简单的数据集中返回所有预期结果。更多信息请参见我的答案。
<gml:Point srsDimension="2" srsName="http://somesite.com">
<gml:pos>1 1</gml:pos>
</gml:Point>
cts:or-query((
cts:element-child-geospatial-query(
xs:QName("gml:Point"),
xs:QName("gml:pos"),
$parsedGeometry
),
cts:element-child-geospatial-query(
xs:QName("gml32:Point"),
xs:QName("gml32:pos"),
$parsedGeometry
),
cts:element-child-geospatial-query(
xs:QName("gml:LinearRing"),
xs:QName("gml:pos"),
$parsedGeometry
),
cts:element-child-geospatial-query(
xs:QName("gml32:LinearRing"),
xs:QName("gml32:pos"),
$parsedGeometry
)
))