Goodafternoon。我有一组坐标
[ [ 52.52132, 4.52342 ], [ 52.52144, 4.52352 ], [ 52.52154, 4.52354 ], [ 52.52166, 4.52376 ] ]
如何将第一个位置(前两个坐标)变为基础。以下所有位置都是与该基地的相对距离?
所以,完全伪示例:
此
[ [ 52.52132, 4.52342 ], [ 52.52144, 4.52352 ], [ 52.52154, 4.52354 ], [ 52.52166, 4.52376 ] ]
然后会变成这样:
[ [ 52.52132, 4.52342 ], [ 0.4123, 0.1232 ], [ 0.1232, 0.5523 ], [ 0.1233, 0.1232 ] ]
第一部分[52.52132,4.52342]是起点。所有其他坐标都与前一个坐标相关。
答案 0 :(得分:1)
这是你的事后......
我不确定你得到0.4123,0.1232, 如52.52144 - 52.52132 = 0.00012
此外,如果你的后续是一个简单的LatLng压缩/解压缩系统。 我在这里做了一点,这是一个非常简单的压缩器,它可以解决你的问题。但是多个循环将差异乘以1 10 100 1000等。并跟踪将返回最小字符串化结果的内容。然后将乘数存储为第一个元素。
例如。您的示例将压缩为 - >
5,52.52132,4.52342,12,10,10,2,12,22
5将等于100000的差异mutliplier,它将使用它来计算出除以差异的区别。将zlib添加到此处很可能会压缩得更多。
var g = [ [ 52.52132, 4.52342 ], [ 52.52144, 4.52352 ], [ 52.52154, 4.52354 ], [ 52.52166, 4.52376 ] ],
n = g.slice(0,1);
function compressLatLng(g) {
var smallest = null, r, mul;
if (!g.length) return '';
for (var l = 1; l < 6; l ++) {
mul = Math.pow(10, l);
r = [l,g[0][0],g[0][1]];
for (var k = 1; k < g.length; k ++) {
r.push(
((g[k][0] - g[k-1][0])*mul).toFixed(5)*1,
((g[k][1] - g[k-1][1])*mul).toFixed(5)*1
);
}
var j = r.join(',');
if (!smallest) smallest = j;
else if (j.length < smallest.length) smallest = j;
}
return smallest;
}
function uncompressLatLng(s) {
var r = s.split(',');
if (!r.length) return [];
var mul = Math.pow(10,r[0]);
var j = [[r[1]*1, r[2]*1]];
var last = j[0];
for (var l = 3; l < r.length; l += 2) {
var t = [
(last[0] + r[l] / mul).toFixed(5)*1,
(last[1] + r[l+1] / mul).toFixed(5)*1
];
j.push(t);
last = t;
}
return j;
}
for (var l = 1; l < g.length; l ++) {
n.push([
(g[l][0] - g[l-1][0]).toFixed(5)*1,
(g[l][1] - g[l-1][1]).toFixed(5)*1
]);
}
console.log('O:Original S:Simple C:Compressed U:Uncompressed');
console.log('O: ' + JSON.stringify(g));
console.log('S: ' + JSON.stringify(n));
var compressed = compressLatLng(g);
console.log('C: ' + compressed);
console.log('U: ' + JSON.stringify(uncompressLatLng(compressed)));