gpt4 book ai didi

python - 如何从 vesselfinder 重新创建坐标转换 (EPSG :4326 to EPSG:3857)?

转载 作者:行者123 更新时间:2023-12-05 05:36:08 25 4
gpt4 key购买 nike

我目前正在尝试弄清楚 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 得到的那个,但又不接近 vesselfinder 正在使用的 bbox。

最佳答案

https://gis.stackexchange.com/a/370496似乎有数学。

convertCoordinates(lon, lat) {
var x = (lon * 20037508.34) / 180;
var y = Math.log(Math.tan(((90 + lat) * Math.PI) / 360)) /
(Math.PI / 180);
y = (y * 20037508.34) / 180;
return [x, y];
}

或者,在 C# ( https://gis.stackexchange.com/a/325551 ) 中

public static double[] latLonToMeters(double lat, double lon)
{
//Debug.Log(Mathd.Tan((90d + lat) * Mathd.PI / 720));
//Debug.Log(Mathd.Tan((90d + lat) * Mathd.PI / 360d));
double[] meters = new double[2];
meters[0] = lat * originShift / 180d;
meters[1] = Mathd.Log(Mathd.Tan((90d+lon) * Mathd.PI / 360d)) /
(Mathd.PI / 180d);
//meters[1] = Mathd.Log(5) / (Mathd.PI / 180d);
meters[1] = meters[1] * originShift / 180d;
return meters;
}

无论如何,请注意它们来自哪个网站;那可能是获得算法的更好地方。 (然后,如果您在转换为首选语言方面需要帮助,请返回此处。)

关于python - 如何从 vesselfinder 重新创建坐标转换 (EPSG :4326 to EPSG:3857)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73345967/

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