【发布时间】:2022-08-22 03:00:52
【问题描述】:
我目前正试图弄清楚vesselfinder.com 如何计算其用于从后端查询数据的框边界(bbox)。
给定如下输入:lat, lon = 59.8230, 22.9586
他们使用这个 bbox 获取数据:13761899,35886447,13779795,35898097
如果我尝试使用 bboxfinder.com 获得类似的 bbox,我会得到以下值,这些值甚至与我的预期不相近:2553560.4710,8358928.9331,2556565.4293,8360514.8411
上面的网站默认使用 EPSG:4326 (WGS 84) 到 EPSG:3857 (WHS 84 / Pseudo-Mercator)。我试图在vesselfinder 的JS 代码中验证他们也在使用这种转换。
var c = new s.geom.MultiLineString(t);
return c.transform(\'EPSG:4326\', \'EPSG:3857\'),
还提到了以下几个,但我很确定,它必须是上面显示的转换。
it = [
new $(\'EPSG:3857\'),
new $(\'EPSG:102100\'),
new $(\'EPSG:102113\'),
new $(\'EPSG:900913\'),
现在的问题是:我究竟做错了什么? / 我哪里想错了?
我还尝试使用 Python 进行转换,甚至尝试了其他提到的 EPSG:XXXXXX 类型,但没有得到想要的结果。在创建 Transformer 时,我还更改了两种 EPSG 类型的顺序,但同样不是预期的结果。
from pyproj import Transformer
TRAN_4326_TO_3857 = Transformer.from_crs(\"EPSG:4326\", \"EPSG:3857\", always_xy=True)
lat = 59.823002
lon = 22.958583
expansion = 2000
res = TRAN_4326_TO_3857.transform(lng, lat)
bbox = (round(res[0]-expansion), round(res[1]-expansion), round(res[0]+expansion), round(res[1]+expansion))
print(bbox)
# (2455738, 8260436, 2655738, 8460436)
这个与我从 bboxfinder 得到的很接近,但又与正在使用的 bbox 容器查找器不接近。
-
对于它的价值,我得到的结果与你对 EPSG:3857 的结果相同,所以你做错的答案可能是“假设 CRS 是 EPSG:3857”。这引发了一个明显的后续问题“那么它是什么?”,不幸的是,我没有答案。
-
确切地说,这只是根据他们的 JS 代码中的发现做出的假设。但很高兴听到,这很可能不是实施问题。希望其他人有一个想法。否则,我将尝试暴力破解所有 CRS 并找出哪个接近所需的 bbox。
-
我不知道vesselfinder 在做什么,但是您的Python 代码混淆了lon 和lat。 Transformer 中的
always_xy表示经度第一,纬度第二,所以应该是transform(lon, lat)。这给出了接近 bboxfinder.com 的结果(2553738、8358436、2557738、8362436)。 -
这也是我在玩 lat / lon 的顺序时得到的。我现在与 bboxfinder 一致,但又不与vesselfinder 一致。无论如何,谢谢你的提示。
标签: python coordinates gis ais