首页 > 解决方案 > 如何在提供的 lat/lng 对数组之间获取所有 lat/lng 对的数组

问题描述

在这个提供的数组之间获取所有纬度/经度对的好方法是什么?

提供的纬度和经度的示例数组:

var locs = [{
        lat: -96.7260,
        lng: 44.2599
    },
    {
        lat: -96.7315,
        lng: 44.3334
    },
    {
        lat: -96.8434,
        lng: 44.3321
    },
    {
        lat: -96.8551,
        lng: 44.2525
    }
]

function getLowAndHighValues(locArr) {
    var latLow = Number.POSITIVE_INFINITY,
        latHigh = Number.NEGATIVE_INFINITY,
        lngLow = Number.POSITIVE_INFINITY,
        lngHigh = Number.NEGATIVE_INFINITY;

    var tmpLng, tmpLat;

    for (var i = locArr.length - 1; i >= 0; i--) {
        tmpLng = locArr[i].lng;
        tmpLat = locArr[i].lat;

        if (tmpLng < lngLow) lngLow = tmpLng;
        if (tmpLng > lngHigh) lngHigh = tmpLng;
        if (tmpLat < latLow) latLow = tmpLat;
        if (tmpLat > latHigh) latHigh = tmpLat;
    }

    return {
        latLow,
        latHigh,
        lngLow,
        lngHigh
    }
}

var lowHighVals = getLowAndHighValues(locs); // returns {latLow: -96.8551, latHigh: -96.726, lngLow: 44.2525, lngHigh: 44.3334}

理想情况下,我会传递lowHighValsgetPairValuesBetweenLowAndHigh我想要增加值的方式:

function getPairValuesBetweenLowAndHigh(lowHighVals, inc) {
    var { latLow, latHigh, lngLow, lngHigh } = lowHighVals;
    var pairs = [];
    var tempLoc = { lat: latLow, lng: lngLow }

    // where I am stuck

    return pairs; 
}

getPairValuesBetweenLowAndHigh(lowHighVals, 0.01);

getPairValuesBetweenLowAndHigh(lowHighVals, 0.01)将返回以下内容:

// where I'm trying to get
[
    { lat: -96.8551, lng: 44.2525 },
    { lat: -96.8451, lng: 44.2625 },
    { lat: -96.8351, lng: 44.2725 },
    ... up to ...
    { lat: -96.7351, lng: 44.3225 },
    { lat: -96.7260, lng: 44.3334 }
]

标签: javascriptarrays

解决方案


var locs = [{
        lat: -96.7260,
        lng: 44.2599
    },
    {
        lat: -96.7315,
        lng: 44.3334
    },
    {
        lat: -96.8434,
        lng: 44.3321
    },
    {
        lat: -96.8551,
        lng: 44.2525
    }
];

var smallestLat = locs[0], smallestLng = locs[0], biggestLat = locs[0], biggestLng = locs[0];

locs.forEach(function(coord){
  if(coord.lat < smallestLat.lat) smallestLat = coord;
  if(coord.lng < smallestLng.lng) smallestLng = coord;
  if(coord.lat > biggestLat.lat) biggestLat = coord;
  if(coord.lng > biggestLng.lng) biggestLng = coord;
});

console.log("smallestLat",smallestLat)
console.log("smallestLng",smallestLng)
console.log("biggestLat",biggestLat)
console.log("biggestLng",biggestLng)

result = {
  highest : {
    lat: biggestLat.lat > biggestLng.lat?biggestLat.lat:biggestLng.lat,
    lng: biggestLat.lng > biggestLng.lng?biggestLat.lng:biggestLng.lng,
  },
  lowest: {
   lat: smallestLat.lat > smallestLng.lat?smallestLat.lat:smallestLng.lat,
    lng: smallestLat.lng > smallestLng.lng?smallestLat.lng:smallestLng.lng,
  }
}

console.log("result", result);


推荐阅读