gpt4 book ai didi

javascript - GeoServer - DWITHIN 没有正确过滤点

转载 作者:行者123 更新时间:2023-11-30 21:19:31 26 4
gpt4 key购买 nike

我正在寻找的解决方案是为 DWITHIN 请求将千米转换为度数的准确方法,或者让 GeoServer 识别请求中指定的单位以便能够直接以千米为单位传递。

我正在向 GeoServer 发出 WFS 请求以返回一定距离内的点(例如,在一个点的 3 公里内),但我的结果不准确。我目前正在使用 OpenLayers 版本 3.11.2 并运行 GeoServer 版本 2.6.2,并且还使用 2.7.1 进行了测试。

这是我用于 DWITHIN 的 CQL 过滤器,其中第 3 个参数是返回结果的半径的度值。我使用“%29”做了一个右括号,因为我在发出请求时遇到了被丢弃的问题。

CQL_FILTER=dwithin(the_geom,point(46.1379%20-60.1957),0.05577532499489729,meters%29

问题是 GeoServer 中存在一个错误,它只支持度数,即使我将单位声明为米。更多信息请点击此处 https://gis.stackexchange.com/questions/132251/dwithin-wfs-filter-is-not-working

我之前尝试过解决这个问题并达到了当时足够准确的比例,可以在此处阅读 Geoserver - filtering points using DWITHIN

这些计算是在 JavaScript 中完成的。最初我使用 radius/111.325 将 km 转换为度数,这没有返回搜索范围内的一些点。例如Radius设置为2.7km,2km以外的结果有时不会返回。

我现在已经使用来自这个问题 https://gis.stackexchange.com/questions/142326/calculating-longitude-length-in-miles 的信息更改了计算以根据纬度调整经度之间的距离

//get value of a degree in radians at current Latitude
var latRadians = lat * Math.PI / 180;

//get the value in kilometers for the current latitude based off radian value
var degreeKM = latRadians * 111.325

var converteddistance = radius / degreeKM;

然后我在 CQL Fitler 中传递转换后的距离作为半径以返回结果。这个问题是一些结果现在返回半径之外。这个圆是用5km的半径画的,你可以看到5.79km外返回的结果。

Image Radius

我还将纬度/经度放入计算器中的圆心和出现在圆外的点的这个 url。计算器给了我相同的距离和我在图像中使用的测量工具所以我相信圆圈和测量工具工作正常。 http://www.movable-type.co.uk/scripts/latlong.html

最佳答案

计算 1 度的长度的方式有几个问题。

首先,纬度的长度与经度的长度不同。这样做会产生一个椭圆,而不是一个圆。如果您使用最小的长度(经度),您将省略点,如果您使用最长的长度(纬度),您将有太多的点。

要获得给定纬度的经度长度,您必须使用余弦并以度为单位进行计算。

degreeKM = cos(latDegree) * 111.325

在 60 度时,大致为 cos(60)*111.325 = 55.66 km,对应于找到的值 here ,这几乎是您当前长度的一半。

话虽这么说,但整个方法对于诸如此类基本任务而言相当麻烦。您是否可以访问像 PostGIS 这样的数据库,您可以在其中进行过滤?

关于javascript - GeoServer - DWITHIN 没有正确过滤点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45333651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com