获取谷歌地图搜索结果的大小/面积
Get size/area of google maps search result
我正在开发一个商业目录网站,其搜索将由谷歌地图驱动。用户将能够根据各种标准搜索他们所在地区的企业,但主要的想法是,如果您搜索例如"新泽西州的水管工",您将获得新泽西州所有水管工的结果。但是,如果您搜索"泽西海岸的水管工",您应该只获得在泽西海岸经营的水管工,在本例中,泽西海岸将是大新泽西州的郊区或其他类型的细分。顺便说一句,我去掉了"水管工",只传递了实际的地理搜索词,所以我的实际谷歌地图搜索只是"新泽西"或"泽西海岸"。因此,不要关注实际的搜索文本本身。
这是我的搜索片段:
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 英里(这些数字直接来自我的耳朵,而不是实际的地图(。
地理编码器还会返回结果的视口和边界。 如果您需要直径,您可以将其中一个转换为距离(边界的宽度或高度将为您提供直径,如果没有,则使用该边界来绑定您的搜索。
相关文章:
- 谷歌地图固定位置覆盖
- 不显示带有本地json文件数据的谷歌地图脚本
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 谷歌地图标记不会显示
- 无法在JS中显示谷歌地图
- 科尔多瓦页面类应用程序中的多个谷歌地图
- 需要帮助谷歌地图方向面板在FancyBox中显示
- 在谷歌地图上获取事件的x,y坐标
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 模拟谷歌地图中的点击
- 如何知道哪个标记被谷歌地图点击了
- 谷歌地图JS API+JSON-多个标记没有显示
- 缓存谷歌地图数据
- 谷歌地图劫持了iphone's滚动(触摸事件)-如何恢复
- 在谷歌地图上绘制位置数据库
- 标记的实时更新,无需加载页面谷歌地图API V3
- 可以't计算自定义谷歌地图的js
- 谷歌地图可以't添加正确的标记ID
- 在谷歌地图 API v3 中获取更新的半径/面积
- 获取谷歌地图搜索结果的大小/面积