gpt4 book ai didi

javascript - 地理定位、准确性和仿射变换 : What is causing my inaccurate conversion from a lat/long location into a point on my image

转载 作者:行者123 更新时间:2023-11-29 02:55:10 25 4
gpt4 key购买 nike

我已经实现了一些代码来创建一些代码来处理相对较小位置的图像,例如平面,以便在我存储的图像位置和传入的纬度/经度信息之间进行转换。

使用 https://msdn.microsoft.com/en-us/library/jj635757(v=vs.85).aspx 中提供的公式我写了这些代码行等等

var vector = math.matrix(
[[x1],
[y1],
[x2],
[y2]]);
var matrix = math.matrix(
[[lat1,long1,1,0]
,[-long1,lat1,0,1]
,[lat2,long2,1,0]
,[-long2,lat2,0,1]]);
var solution = math.multiply(math.inv(matrix),vector);

当我将其放入数据库并从数据库中取回时,存在从返回到解决方案的向量到转换数据的隐式转换。

a = parseFloat(conversiondata['A']);
b = parseFloat(conversiondata['B']);
c = parseFloat(conversiondata['C']);
d = parseFloat(conversiondata['D']);
var long = position.coords.longitude;
var lat = position.coords.latitude;
var x = a * lat + b * long + c;
var y = b * lat - a * long + d;

值 x1、x2、y1、y2 是通过获取用户点击数据提供的。lat1、lat2、long1、long2 值由用户响应两次点击 map 图像而提供。

当将 x,y 放回 map 时,它的位置不太正确, map 上的位置似乎几乎位于 (x1,y1) 和 (x2,y2) 定义的直线的另一侧。我试图告诉不准确的原因是什么。 (不过我暂时假设明显的反射是巧合)

如果有人可以帮助我缩小可能出现问题的范围,这是我考虑过的事情( map 在任何方向上都没有达到一英里以供引用)。

仿射变换根本不起作用 - 但根据提供的链接,它包括缩放,所以这不应该是问题的原因我的变量设置有问题 - 我查看我的代码的时间太长了,看不出它是否存在。我失去了太多的准确性,将 var 数据作为 float 移动到 MySQL 或作为字符串移动到 PHP我没有从点击数据/纬度/经度输入中提供足够准确的信息。 - 我在点击 map 并从谷歌地图获取纬度/经度时显着放大了我SVG 不够准确 - 虽然查看 xml 数据,但它保留了小数点。我正在处理的区域太大,无法通过假设局部 map 是平面来简化

感谢您提供任何帮助,感谢您阅读到这里。

为了进一步引用,我将 JavaScript 提供给我的纬度/经度数据放入谷歌地图中,​​我将精度与该数据而不是我的实际位置进行比较。

附加引用:我在图像的东西边缘发现了“地标”,并计算出经度差为 0.02695,图像的长度至少是高度的两倍。

完整运行值的示例值。

引用点

点 1 (x,y) = (619,564)

点 1 (lat,long) = (X.099546,-Y.465179)

点 2 (x,y) = (1181,190)

点 2 (lat,long) = (X.10365341,-Y.457014)

地理位置

预测坐标(x,y) = (975,262)

给定坐标(lat,long) = (X.102851,-Y.459996)

真实信号 (x,y) = (1022.7498707999475,351.02335709985346)

真实信号(大约经纬度)= (X.101964, -Y.459340)

(真正的 blip lat long 是近似的,因为它在没有好的地标的水体中)

为了安全起见,我已经从纬度/经度坐标中取出小数点前的数字,但我可以确认所有 X 都相等且所有 Y 都相等

另外,我在 Chrome 的开发者工具中使用了经纬度值,轴似乎稍微旋转了大约 30 度

最佳答案

经过充分的探索后,我发现我错误地订购了纬度和经度。在我尚未从顶部的 N 旋转的 map 上,以下代码将我带到了几英尺之内,比依赖用户输入和像素网格导致的精度不足更容易解释。

var matrix = math.matrix(
[[long1,lat1,1,0]
,[-lat1,long1,0,1]
,[long2,lat2,1,0]
,[-lat2,long2,0,1]]);

var x = a * long + b * lat + c;
var y = b * long - a * lat + d;

对于有兴趣将此作为简化其应用程序数学运算的潜在解决方案的任何其他人发生的漂移在对 Angular 线为 8000 英尺且引用点差异约为 3000 英尺的 map 上不到 40 英尺。这意味着漂移略高于引用点距离的 1%,这包括人为错误的影响。

当您在较小的 map 上工作时,此错误应该会减少,而在您在较大的 map 上工作时会增加。

我在一张旋转了 ~90 度的 map 上再次测试了它并且代码被阻止了

关于javascript - 地理定位、准确性和仿射变换 : What is causing my inaccurate conversion from a lat/long location into a point on my image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31372785/

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