目前我从设备获取坐标(lat,long)并将它们存储在一个数组中,如下所示:
[35.23223,-5.293222]
但是,有几次这些坐标会重复(也许设备会发送相同的坐标等等)。
为此,我实施了以下内容:
var uniqueCoords = [Array.from(new Set(coords))];
在每个调用中,挖掘现有数组并删除任何重复的坐标。
然而,这会引起严重的问题,特别是在(例如)新的纬度和旧的经度(即[35.23223,-5.319399])或反之亦然时。
在这个特定的示例uniqueCoords
中,我会深入了解35.23223
重复并删除的数组,并且在旅程结束时它会单独留下-5.319399
它可能会结束:
[35.23223,-5.293222,-5.319399]
我想要的是仅在两者同时移除(纬度/长度) lat& long ,与数组中已存在的对完全相同。
当前代码:
this.storage.get('route').then((route) => {
let uniqueCoords: any = [Array.from(new Set(route))];
uniqueCoords.push(latLng.lat, latLng.lng);
this.storage.set('routeTaken', uniqueCoords);
}).catch((error) => {
this.presentAlert(error)
})
原始数据数组:
[35.7790733,-5.8453983,35.779335,-5.8465283,35.779705,-5.84782,35.7787533,-5.8482083,35.7780167,-5.8491983,35.77782,-5.8504883,35.7774783,-5.8518267,35.776955,-5.852945,35.7765,-5.8541383,35.7761667,-5.855425,-5.8566467,35.77628,-5.8579367,35.7763233,-5.8588633,35.776435,-5.8591367,35.7767667,-5.8594817,35.7776267,-5.8586933,35.7785467,-5.8577233,-5.8585467,35.77949,-5.8597567,35.7797183,-5.86081,35.7805917,-5.8606533,35.7817533,-5.8606867,35.7826217,-5.8618667,35.78295,-5.8636367,35.7834217,-5.8643667]
答案 0 :(得分:2)
您可以加入坐标并在进行独特后拆分它们。
var coordinates = [[35.23223, -5.293222], [35.23223, -5.319399], [35.23223, -5.319399]],
unique = Array.from(new Set(coordinates.map(a => a.join('|'))), s => s.split('|').map(Number));
console.log(unique);
.as-console-wrapper { max-height: 100% !important; top: 0; }
如果你取一个点的数组,比如[35.23223, -5.293222]
,你就会在一个点上插入一个对象。具有相同坐标的另一个pont生成一个新对象,该对象不等于前一个数组。为了使两者相等,你需要对数组进行一些串联。这可以是JSON字符串,或者更简单,例如与分隔符连接。
与单个数组中的连续坐标相同。
var coordinates = [35.23223, -5.293222, 35.23223, -5.319399, 35.23223, -5.319399],
unique = Array.from(new Set(coordinates
.reduce((r, a, i) => (i % 2 ? r[r.length - 1].push(a) : r.push([a]), r), [])
.map(a => a.join('|'))), s => s.split('|').map(Number));
console.log(unique);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
假设<ngContent></ngContent>
的格式为uniqueCoords
而[lat,long,lat,long,...]
的格式与new Set
类似
[lat, long]
答案 2 :(得分:0)
如果您只是切换到['lat,lng', ...]
的格式(作为字符串),您的代码将正常工作。
但是你应该在添加新的坐标后检查重复项。目前你在之前。
答案 3 :(得分:0)
这是一个非常合乎逻辑的,一步一步的,没有花哨的方式来做这件事
var coords = [
35.7790733, -5.8453983,
35.779335, -5.8465283,
35.7790733, -5.8453983,
35.779705, -5.84782
];
var temp = [];
var unique = [];
var uniqueCoords = [];
for (var i = 0; i < coords.length; i += 2) {
temp.push(coords[i] + '---' + coords[i + 1]); // create some strings
}
for (var i = 0; i < temp.length; i++) {
if (unique.indexOf(temp[i]) === -1) // remove duplicates
unique.push(temp[i]);
}
for (var i = 0; i < unique.length; i++) { // split the strings back into array
uniqueCoords = uniqueCoords.concat(unique[i].split('---'));
}
console.log(uniqueCoords)
&#13;
答案 4 :(得分:0)
this.storage.get('route').then((route) => {
if (route.length < 2 || route[route.length - 2] != latLng.lat || route[route.length - 1] != latLng.lng) {
uniqueCoords.push(latLng.lat, latLng.lng);
this.storage.set('routeTaken', uniqueCoords);
}
}).catch((error) => {
this.presentAlert(error)
})