获取谷歌地图搜索结果的大小/面积

时间:2013-10-01 10:42:04

标签: javascript google-maps google-maps-api-3 geography

我正在开发一个商业目录网站,其搜索将由Google地图驱动。用户将能够根据各种标准搜索他们所在地区的商家,但主要的想法是,如果您搜索例如“新泽西州的水管工”,你会得到新泽西州所有管道工的结果。但是,如果您搜索“泽西海岸的管道工”,您应该只获得在泽西海岸运营的管道工,在这个例子中,这是一个郊区或其他类型的新泽西州的分部。顺便说一句,我正在剥离“管道工”,只通过实际的地理搜索术语,所以我的实际谷歌地图搜索只是“新泽西”或“泽西海岸”。所以不要专注于实际的搜索文本本身。

这是我的搜索代码段:

var latlng = results[0].geometry.location;//results is google maps search result for address
console.log(results[0]);
map.setCenter(latlng.lat(), latlng.lng());
map.addMarker({
    lat: latlng.lat(),
    lng: latlng.lng(),
    icon: 'https://maps.google.com/mapfiles/kml/shapes/schools_maps.png'
});

var closestmarkers = [];
var MAXDISTANCE = 5;//radius of our search area in km
closestmarkers = find_n_closest_markers(latlng, n, MAXDISTANCE);//see below snippet for function definition

这是指出哪些标记最接近搜索的javascript:

function find_n_closest_markers(latlng, n, MAXDISTANCE){
    var lat = latlng.lat();
    var lng = latlng.lng();
    var R = 6371; // radius of earth in km
    var distances = [];
    var closest = -1;
    for (i = 0; i < map.markers.length; i++) {
        var mlat = map.markers[i].position.lat();
        var mlng = map.markers[i].position.lng();
        var dLat = rad(mlat - lat);
        var dLong = rad(mlng - lng);
        var a = Math.sin(dLat / 2)
              * Math.sin(dLat / 2)
              + Math.cos(rad(lat))
              * Math.cos(rad(lat))
              * Math.sin(dLong / 2)
              * Math.sin(dLong / 2);
        var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        var d = R * c;

        distances[i] = { distance: d, index: i };
    }
    distances.sort(comparedistances);

    //remove all distances greater than MAXDISTANCE
    toofarindex = -1;
    for (j = 0; j < distances.length; j++)
    {
        if(distances[j].distance >= MAXDISTANCE)
        {
            toofarindex = j;
            break;
        }
    }

    if (toofarindex != -1)
    {
        distances = distances.splice(0, toofarindex - 1);
    }

    //return first n + 1 items(the closest marker is the one indicating the user's current/preferred location. which doesn't count)
    if (distances.length > n + 1)
    {
        distances = distances.splice(0, n + 1);
    }
    return distances;
}

我并不关心实际的功能。这是100%的工作。我正在寻找的是如何根据搜索词找出MAXDISTANCE的价值。 5现在只是一个很好的妥协常数,但我需要知道新泽西州是直径20英里,而泽西海岸只有5英里(这些数字直接来自我的耳朵,而不是实际的地图)。

1 个答案:

答案 0 :(得分:2)

geocoder还返回视口和结果的边界。如果需要一个直径,你可以将其中一个转换为一个距离(边界的宽度或高度将给你一个直径,如果没有使用那个边界来绑定你的搜索。