2012-01-09 25 views
7

Tôi đang sử dụng Google Maps và dịch vụ mã hóa địa lý của Google cho ứng dụng dịch vụ vị trí của mình. Tôi sử dụng dịch vụ Mã hóa địa lý của Google để dịch địa chỉ sang vị trí lat/lng. Vấn đề của tôi là cách tự động tìm mức thu phóng thích hợp cho một địa chỉ nhất định như maps.google.com.Tự động tìm Zoom thích hợp cho mã hóa địa lý Kết quả

Ví dụ: khi tôi tìm kiếm một đường phố trong maps.google.com (ví dụ: Cisitu Baru, Bandung), nó sẽ hiển thị đường phố ở chế độ thu phóng nhỏ hơn. Khi tôi tìm kiếm một khu vực (ví dụ: Bandung), nó sẽ hiển thị mức thu phóng lớn hơn. Và thu phóng lớn hơn cho tỉnh (ví dụ: Jawa Barat/West Java), v.v.

Tôi đã thử cả hai

var geocoder = new google.maps.Geocoder(); 
geocoder.geocode({ 
    'address': someAddress 
}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
     console.dir(results); 
     //cut 
     map.panToBounds(results[0].geometry.bounds); //setting bound 
     //cut 
    } 
}); 

//cut 
map.panToBounds(results[0].geometry.viewports); //setting bound 
//cut 

(Thành thực mà nói, tôi vẫn không biết sự khác biệt giữa boundsviewport và những gì đang sử dụng của họ là những gì từ code.google.com /apis/maps/documentation/javascript/geocoding.html)

nhưng cả hai vẫn không hiển thị bản đồ ở chế độ thu phóng thích hợp.

Ngay bây giờ, tôi sử dụng một hack nhỏ như thế này

var tabZoom = { 
    street_address: 15, 
    route: 15, 
    sublocality: 14, 
    locality: 13, 
    country: 10 
}; 
//cut 
map.setCenter(results[0].geometry.location); 
if (tabZoom[results[0].types[0]] != undefined){ 
    map.setZoom(tabZoom[results[0].types[0]]); 
} else { 
    map.zetZoom(10); 
} 
//cut 

Có giải pháp khác? (Hoặc bất kỳ thứ gì từ API Google Map mà tôi chưa biết?)

Cảm ơn!

Trả lời

4

GLatLngBounds sử dụng lớp

một ví dụ:

// map: an instance of GMap2 

// latlng: an array of instances of GLatLng 

var latlngbounds = new GLatLngBounds(); 

for (var i = 0; i < latlng.length; i++) 
{ 
    latlngbounds.extend(latlng[ i ]); 
} 

map.setCenter(latlngbounds.getCenter(), map.getBoundsZoomLevel(latlngbounds)); 

^

Bí quyết là để thêm danh sách của tất cả các điểm mà cần phải được hiển thị trên bản đồ cùng một lúc vào một đối tượng GLatLngBounds. API Google Maps có thể thực hiện phần còn lại của toán học.

hoặc trong v3 bạn có thể sử dụng lớp LatLngBounds (tương tự như GLatLngBounds trong v2), liên kết: http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLngBounds

cho một ví dụ kiểm tra tốt hơn này ra: http://unicornless.com/code/google-maps-v3-auto-zoom-and-auto-center

+0

Tôi không quen với API v2. Bạn có thể mô tả nó bằng API v3 không? Cảm ơn. –

+0

trong v3 bạn có thể sử dụng lớp LatLngBounds http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLngBounds –

+2

Tốt, tôi vừa phát hiện ra phương thức 'fitBounds' từ URL mẫu của bạn. Tôi chỉ làm cho 'map.fitBounds (kết quả [0] .geometry.bounds);' và nó hoạt động như một sự quyến rũ. Cảm ơn! –

3

sử dụng khung nhìn của hình học kết quả. nếu kết quả tìm kiếm của bạn không có giới hạn cụ thể, bạn sẽ gặp lỗi với geometry.bounds

chế độ xem cung cấp cho bạn chế độ xem tốt nhất cho kết quả.

map.fitBounds (kết quả [0] .geometry.viewport);

Các vấn đề liên quan