我应该如何更正格式错误的经纬度对以对 PHP 计算有效
How should I correct ill-formatted lat-long pairs to be valid for PHP computation
我可以访问包含纬度和经度对的数据集,但它们的格式不正确且未在数据集中正确表示。
例如,一对经纬度可能如下所示:31333445, 105530865
而 应该 是 31.333445, -105.530865
。鉴于我正在使用的数据集,我知道纬度的最小值是 31.0
,最大值是 37.0
,经度的 min/max 是 -103
到 -109
.
如果给我一张纸和一支铅笔,我自己可以很容易地纠正这些错误,但是当我们从不同的程序接收到输入时,纠正需要即时进行。在数据到达我们的系统之前,我们无法控制数据的格式,然后我们可以进行更改和更正,经纬度对全部采用上面列出的整数格式,而不是浮点数。
手动更正此错误的最佳方法是什么?我正在为我们的处理系统使用 PHP。
如果它们的长度相同,则只需除以 1000000
并在需要的地方取负值:
echo $lat / 1000000;
echo -$lon / 1000000;
如果不是,则获取开头的数字个数(此处为 2 和 3),如果需要则取负数,然后插入一个小数,其余的:
echo substr($lat, 0, 2) . '.' . substr($lat, 2);
echo -substr($lon, 0, 3) . '.' . substr($lon, 3);
如果需要,您可以对结果使用 floatval()
。
如果位数总是相同的固定大小,则使用@AbraCadaver 在他的评论中建议的解决方案(只需除以 1000000 并乘以 -1)
如果位数可以不同,则需要不同的解决方案
我有一个奇怪的想法(在 0:24am)
I would convert the number to a string resulting in "31333445"
then concatenate "0." with the "31333445" resulting in "0.31333445"
then convert it back to a double resulting in 0.31333445
and then multiply it with 100 resulting in 31.333445 (and multiply the other value with -1 )
:-B
有了这个解决方案,你从外面得到的号码是 3 位还是 14 位都没有关系
可能听起来很奇怪,但应该可以。
如果这听起来是一个有用的解决方案,我将在明天编写代码。
我可以访问包含纬度和经度对的数据集,但它们的格式不正确且未在数据集中正确表示。
例如,一对经纬度可能如下所示:31333445, 105530865
而 应该 是 31.333445, -105.530865
。鉴于我正在使用的数据集,我知道纬度的最小值是 31.0
,最大值是 37.0
,经度的 min/max 是 -103
到 -109
.
如果给我一张纸和一支铅笔,我自己可以很容易地纠正这些错误,但是当我们从不同的程序接收到输入时,纠正需要即时进行。在数据到达我们的系统之前,我们无法控制数据的格式,然后我们可以进行更改和更正,经纬度对全部采用上面列出的整数格式,而不是浮点数。
手动更正此错误的最佳方法是什么?我正在为我们的处理系统使用 PHP。
如果它们的长度相同,则只需除以 1000000
并在需要的地方取负值:
echo $lat / 1000000;
echo -$lon / 1000000;
如果不是,则获取开头的数字个数(此处为 2 和 3),如果需要则取负数,然后插入一个小数,其余的:
echo substr($lat, 0, 2) . '.' . substr($lat, 2);
echo -substr($lon, 0, 3) . '.' . substr($lon, 3);
如果需要,您可以对结果使用 floatval()
。
如果位数总是相同的固定大小,则使用@AbraCadaver 在他的评论中建议的解决方案(只需除以 1000000 并乘以 -1)
如果位数可以不同,则需要不同的解决方案 我有一个奇怪的想法(在 0:24am)
I would convert the number to a string resulting in "31333445"
then concatenate "0." with the "31333445" resulting in "0.31333445"
then convert it back to a double resulting in 0.31333445
and then multiply it with 100 resulting in 31.333445 (and multiply the other value with -1 )
:-B
有了这个解决方案,你从外面得到的号码是 3 位还是 14 位都没有关系 可能听起来很奇怪,但应该可以。
如果这听起来是一个有用的解决方案,我将在明天编写代码。