Google Maps API v3 - Geocoder结果问题

时间:2012-02-28 22:57:05

标签: javascript google-maps google-maps-api-3 google-geocoder fitbounds

目标:我想要一个自定义搜索(地理编码)功能,并能够列出并点击 每个结果并将其显示在地图上。

通缉:相应地调整地图边界/缩放级别,即搜索“MA,USA”应缩放地图以让我看到整个马萨诸塞州,同时搜索“波士顿,马萨诸塞州,美国“应放大波士顿地区。列出多个结果时,单击结果时应该同样适用。

问题:我可以使用带有fitBounds的geometry.bounds对象 - 但是 - 使用地理编码器得到的一些结果没有那个geometry.bounds对象。

一个简单的例子:搜索“波士顿”返回

美国马萨诸塞州波士顿 波士顿,IN,美国
波士顿,肯塔基州,美国
波士顿,GA 31626,USA
波士顿,塞勒姆,VA 22713,美国
波士顿,纽约14025,美国

“Boston,KY”和“Boston NY 14025”都没有界限。

问题:是否有可靠的方法在适当的缩放比例下在地图上显示任何地理编码器结果 水平?

现在我正在使用类似的东西,但我觉得这很难看,并没有解决缩放问题

if (results[0].geometry.bounds) {

    map.fitBounds(results[0].geometry.bounds);

} else {

    map.setCenter(results[0].geometry.location);
    // eventually set zoom here to some middle-range value (ugly)
}

2 个答案:

答案 0 :(得分:16)

右。在尝试了两种方法和测试之后,它出现了:

  1. 正如文档所述
  2. geometry.bounds对象是“optionnaly返回”
  3. 我们并不完全知道geometry.bounds对象基于什么
  4. geometry.bounds“可能与推荐的视口不匹配”并且通常不会
  5. geometry.bounds返回任意大小和形状的正方形或矩形,而视口函数始终返回一个具有相同宽高比(大约1.43)的矩形,无论您的地图容器尺寸如何,据我测试。< / LI>

    以下是文档中提到的加利福尼亚州旧金山的例子 红色使用geometry.bounds,蓝色使用视口功能。

    San Francisco, CA

    解决方案非常简单且可靠。

    var resultBounds = new google.maps.LatLngBounds(
    
        results[0].geometry.viewport.getSouthWest(), 
        results[0].geometry.viewport.getNorthEast()
    );
    
    map.fitBounds(resultBounds);
    

答案 1 :(得分:1)

视口对象具有制作边界对象所需的信息。像这样:

var bounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(results[0].geometry.viewport.southwest.lat, results[0].geometry.viewport.southwest.lng),
    new google.maps.LatLng(results[0].geometry.viewport.northeast.lat, results[0].geometry.viewport.northeast.lng)
);

然后你可以在新的bounds对象上使用fitBounds,就像你正在为返回的bounds对象做的那样。像这样:

map.fitBounds(bounds);