首页 > 解决方案 > 如果用户未指定,ETRS89 在地理空间操作中的默认容差是多少?

问题描述

在 Marklogic 中,我cts.geospatialRegionQuery用来搜索包含(索引)几何的文档,该几何与我搜索的几何有交集。

地理空间区域索引etrs89/double用作坐标系。数据中的所有几何图形都有 9 位小数。

根据 Marklogic地理空间搜索应用程序文档

[...] 针对单精度索引的地理空间查询对于大地坐标系的精确度在 1 米以内。

因此,我希望我的查询具有亚米级的精度。但是,我从cts.geospatialRegionQuery包含距离我的搜索几何最多约 5 米的几何获得搜索结果。据我所知,唯一的原因可能是tolerance我尚未指定的选项,因此使用默认选项。

文档提到

如果您没有明确设置容差,MarkLogic 将使用适用于坐标系的默认容差。为确保准确性,MarkLogic 对每个坐标系强制执行最小容差。

这给我们带来了一个实际的问题:

Marklogic 中 etrs89 坐标系的默认(和最小)容差是多少?

编辑: 在 Marklogic Support 的帮助下进一步研究了这个问题,发现了我的地理空间查询准确性低的原因。

在使用之前,cts.geospatialRegionQuery我使用geo.parseWkt. 此功能不允许您显式设置要使用的坐标系,因此使用 AppServer 设置中设置的坐标系。默认情况下,这是单精度 wgs84。这导致我的搜索几何丢失 2-3 位数。

在 AppServer 设置中将坐标系设置为 etrs89/double 后,geo.parseWkt不再降低搜索几何的精度,并且我的地理空间查询具有预期的 5 毫米精度。

标签: geospatialmarklogic

解决方案


使用 MarkLogic 支持提供的反馈结束此问题的循环:

设置查询时 geo.ParseWkt 用于创建 POINT 并且由于此函数不采用坐标系或精度作为选项,因此默认情况下将结果截断为 8 位有效数字。在纬度,他们正在将精度从 0.5 厘米降低到 5 米,从而导致观察到的结果。

geo.parseWkt("POINT(5.176605744 52.045696539)");

结果是:

POINT(5.1766057 52.045697)

使用 JavaScript 时,解决方案是在 AppServer 中设置正确的坐标系,请参阅 https://docs.marklogic.com/guide/search-dev/geospatial#id_77035和以下示例(用 XQuery 编写):

xquery version "1.0-ml";
import module namespace admin = "http://marklogic.com/xdmp/admin" at "/MarkLogic/admin.xqy";

let $config := admin:get-configuration()
let $groupid := admin:group-get-id($config, "Default")
return admin:save-configuration(
admin:appserver-set-coordinate-system(
$config,
admin:appserver-get-id($config, $groupid, "App-Services"),
"etrs89/double")

完成此操作后,使用 geo.ParseWkt 创建的 POINT 具有正确的精度级别。

使用 XQuery,您可以直接在查询中声明坐标系:

declare option xdmp:coordinate-system "etrs89/double";

推荐阅读