11

Goal: Tôi muốn có một chức năng tìm kiếm tùy chỉnh (mã địa lý) và có thể liệt kê và nhấp mỗi kết quả và hiển thị nó trên bản đồ.Google Maps API v3 - Geocoder quả vấn đề với giới hạn

Wanted: Điều chỉnh giới hạn bản đồ/mức zoom cho phù hợp, tức là tìm kiếm "MA, USA" nên phóng to bản đồ để cho tôi nhìn thấy trạng thái toàn tiểu bang Massachusetts, trong khi tìm kiếm "Boston, MA, USA" nên phóng to trên khu vực Boston. Khi liệt kê nhiều kết quả, điều tương tự cũng nên áp dụng khi nhấp vào kết quả.

Issue: Tôi có thể sử dụng đối tượng geometry.bounds với fitBounds - nhưng - một số kết quả bạn nhận được bằng cách sử dụng geocoder không có mà geometry.bounds phản đối.

Một ví dụ nhanh: tìm kiếm "Boston" trả

Boston, MA, USA
Boston, IN, USA
Boston, KY, USA
Boston, GA 31.626, Mỹ
Boston, Salem , VA 22713, USA
Boston, NY 14025, USA

Cả hai "Boston, KY" và "Boston NY 14025" không có giới hạn.

Câu hỏi: Có một cách đáng tin cậy để hiển thị bất kỳ kết quả geocoder trên bản đồ tại phù hợp mức độ phóng ?

Ngay bây giờ tôi đang sử dụng một cái gì đó như thế nhưng tôi thấy xấu xí này và nó không giải quyết được vấn đề zoom

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) 
} 
+0

Bạn đã thử sử dụng đối tượng 'viewport'. – andresf

+1

Tôi nên tìm giá trị nào trong đối tượng khung nhìn? Nó dường như không có bất kỳ giới hạn trở lại trong đó. Cảm ơn. – MrUpsidown

Trả lời

15

Phải. Sau khi thử cả hai phương pháp và thử nghiệm, nói ra rằng:

  1. đối tượng geometry.bounds là "optionnaly trở" như doc nói
  2. chúng ta không biết chính xác những gì mà đối tượng geometry.bounds được dựa trên
  3. geometry.bounds "có thể không khớp với chế độ xem được đề xuất" và thường không khớp với chế độ xem được đề xuất "" và thường không phải là
  4. geometry.bounds trả về một hình vuông hoặc hình chữ nhật có kích thước và hình dạng bất kỳ trong khi chức năng khung nhìn luôn trả lại hình chữ nhật có cùng tỷ lệ khung hình (khoảng 1,43). , theo như tôi đã thử nghiệm.

Dưới đây là ví dụ về San Francisco, CA, được đề cập trong tài liệu.
Màu đỏ sử dụng geometry.bounds và màu xanh lam bằng cách sử dụng chức năng chế độ xem.

San Francisco, CA

Giải pháp này đủ đơn giản và đáng tin cậy.

var resultBounds = new google.maps.LatLngBounds(

    results[0].geometry.viewport.getSouthWest(), 
    results[0].geometry.viewport.getNorthEast() 
); 

map.fitBounds(resultBounds); 
+0

Bạn có biết các thuộc tính này vẫn giữ nguyên không? Cụ thể là tỷ lệ cỡ ảnh trên tỷ lệ co trên khung nhìn? Ngoài ra nguồn thông tin? –

+0

Bạn không thể kiểm tra nó? Tôi không nghĩ rằng tôi đã có một fiddle cho điều đó. – MrUpsidown

1

Đối tượng viewport có thông tin mà bạn cần phải thực hiện một đối tượng giới hạn. Một cái gì đó như thế này:

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) 
); 

Sau đó, bạn có thể sử dụng fitBounds trên mà đối tượng giới hạn mới, giống như bạn đang làm cho đối tượng vọt trở lại. Như thế này:

map.fitBounds(bounds); 
+0

Tôi sẽ kiểm tra điều này trong một phút, nhưng, nếu tôi hiểu rõ, tất cả các kết quả sẽ có 4 giá trị khung nhìn này. Vì vậy, nếu họ có, tại sao một số kết quả sẽ đến với đối tượng geometry.bounds và một số không? Lạ, tôi nghĩ ... – MrUpsidown

+0

Tôi không hoàn toàn chắc chắn, nhưng đây là giải thích của Google được lấy từ http://code.google.com/apis/maps/documentation/geocoding/#Results: "giới hạn (tùy chọn trả lại) lưu trữ Lưu ý rằng các giới hạn này có thể không phù hợp với chế độ xem được đề xuất. (Ví dụ: San Francisco bao gồm các đảo Farallon, một phần kỹ thuật của thành phố, nhưng có thể không được trả lại trong chế độ xem.) " –

+0

Mmhh ... thật thú vị! Tôi sẽ thử cả hai cách, vẽ một vài hình chữ nhật trên bản đồ của tôi, kiểm tra sự khác biệt nếu có và báo cáo lại ở đây. – MrUpsidown

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