geospatial - 如果用户未指定,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 毫米精度。
解决方案
使用 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";
推荐阅读
- mysql - MySQL 表必须包含 80 到 100 行
- mysql - 列类型时间,来自带日期的服务器,不显示
- perforce - Perforce,“需要解决”消息是否总是暗示未决的更改?
- resize - 带有“桌面”类型提示的可移动 GtkWindow
- c - 没有从 C 程序获得预期的输出
- node.js - 使用 GeoFire 按半径查询位置
- r - 如何为R中数据集的每一行打印箱线图?
- docker - Unhealthy 与 Degraded .NET 健康检查状态有什么区别
- python - 使用子查询注释计数
- android - 对话框中的 GraphView 不起作用 - logcat 中的错误