2

我已经成功设置了一个 Leaflet JS 地图,它使用谷歌地图地理编码器来平移到一个地理编码的地址。但我也尝试使用“map.fitBounds”从视口获取适当的缩放级别,但它似乎不起作用。我正在使用的代码是:

map.panTo([results[0].geometry.location.lat(),results[0].geometry.location.lng()]);
   map.fitBounds([[results[0].geometry.viewport.southwest.lat(), results[0].geometry.viewport.southwest.lng()],[results[0].geometry.viewport.northeast.lat(), results[0].geometry.viewport.northeast.lng()]]);

请参阅此处的示例:http: //chrismccreath.hostzi.com/geocode_test.html

如何修复它以使其缩放到谷歌地图地理编码器结果返回的适当视口?

4

3 回答 3

5

没有类似的属性results[0].geometry.viewport.southwest/northeast(我猜你在控制台内观看网络流量,但你看到的不会直接传递给回调函数)。要获得西南/东北,请使用getSouthWest()getNorthEast()的方法google.maps.LatLngBounds

results[0].geometry.viewport是 google.maps.LatLngBounds-object,但不能直接在 Leaflet 中使用。

您必须将其“转换”为数组或 Leaflet.LatLngBounds 对象。

这应该有效:

map.fitBounds([
               [results[0].geometry.viewport.getSouthWest().lat(),
                results[0].geometry.viewport.getSouthWest().lng()],
               [results[0].geometry.viewport.getNorthEast().lat(),
                results[0].geometry.viewport.getNorthEast().lng()]
              ]);
于 2013-01-03T20:20:06.620 回答
1

DrMolle 指出传单地图对象不是 Google Maps API v3 对象(在您引用的另一个问题中)。这有效:

   map.panTo([results[0].geometry.location.lat(),results[0].geometry.location.lng()]);
   map.fitBounds([[results[0].geometry.viewport.getNorthEast()],
                  [results[0].geometry.viewport.getSouthWest()]]);

工作示例

文档中所述:

于 2013-01-03T17:27:30.370 回答
1

感谢您发布工作示例。它有很大帮助。但是,它并没有立即对我起作用,必须进行一些调整才能使其起作用。

function codeAddress() {
   var address = document.getElementById('address').value;
   geocoder.geocode( {'address': address}, function(results, status) {
   if (status == google.maps.GeocoderStatus.OK) {
        if (results[0].geometry.viewport) {
            map.fitBounds([[results[0].geometry.viewport.getSouthWest().lat(),
                          results[0].geometry.viewport.getSouthWest().lng()],
                        [results[0].geometry.viewport.getNorthEast().lat(),
                         results[0].geometry.viewport.getNorthEast().lng()]]);
            map.setZoom(18);
        } else if (results[0].geometry.bounds) {
            map.fitBounds([[results[0].geometry.bounds.getSouthWest().lat(),
                     results[0].geometry.bounds.getSouthWest().lng()],
                    [results[0].geometry.bounds.getNorthEast().lat(),
                     results[0].geometry.bounds.getNorthEast().lng()]]);
        } else { // give up, pick an arbitrary zoom level
            map.panTo(results[0].geometry.location);
            map.setZoom(15);
      }
    } else {
      $('#result').html('Geocode was not successful for the following reason: ' + status);
    }
  });
}

只是想如果其他人无法弄清楚如何让它工作,我会发布它。

再次感谢!

于 2013-02-22T23:27:56.947 回答