我应该如何更正格式错误的经纬度对以对 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 位都没有关系 可能听起来很奇怪,但应该可以。

如果这听起来是一个有用的解决方案,我将在明天编写代码。