2012-04-12 42 views
5

Tôi sử dụng Places library để nhập địa chỉ tự động hoàn tất. Tìm kiếm giới hạn chỉ có một thành phố, và tôi nhận được kết quả như thế này:Google maps Autocomplete: chỉ xuất địa chỉ mà không có quốc gia và thành phố

"Rossiya, Moskva, Leninskiy Prospekt 28"

Làm thế nào để che giấu "Rossiya, Moskva"? ...

truy vấn của tôi:

function() { 
     // Search bounds 
     var p1 = new google.maps.LatLng(54.686534, 35.463867); 
     var p2 = new google.maps.LatLng(56.926993, 39.506836); 
     self.options = { 
      bounds : new google.maps.LatLngBounds(p1, p2), 
      componentRestrictions: {country: 'ru'}, 
     }; 

     var elements = document.querySelectorAll('.address'); 

     for (var i = 0; i < elements.length; i++) { 
      var autocomplete = new google.maps.places.Autocomplete(elements[i], 
        self.options); 
     } 
+0

Các tài liệu tại đây https://developers.google.com/maps/documentation/javascript/places nói như sau, hãy thử nó ở bên cạnh: Một địa chỉ đơn giản cho Địa điểm, bao gồm tên phố, số phố và địa phương, nhưng không phải tỉnh/bang, mã bưu điện hoặc quốc gia. Ví dụ, văn phòng Sydney, Úc của Google có giá trị lân cận là 5/48 Pirrama Road, Pyrmont.' –

+0

Cảm ơn, tôi đã thử, nhưng vùng lân cận là thuộc tính Place và trong trường hợp của tôi là autocomplete.getPlace() trả về undefined. Chưa tìm được giải pháp. –

Trả lời

2

EDIT

Bạn không thể. Tôi đã có nó theo cách khác xung quanh, rằng bạn đang tìm kiếm một thành phố. Không có cách nào để chỉ in ra tên đường phố (tôi giả sử đó là tên đường phố) từ thành phần địa chỉ.


ngược với những gì được yêu cầu

From the docs:

sự (thành phố) gõ bộ sưu tập chỉ thị các dịch vụ Nơi trả lại kết quả phù hợp với một trong hai locality hoặc administrative_area3.

var input = document.getElementById('searchTextField'); 
var options = { 
    bounds: defaultBounds, 
    types: ['(cities)'] 
}; 

autocomplete = new google.maps.places.Autocomplete(input, options); 
0

trong kết quả u có băm và từ đó u có thể nhận được một phần những gì u muốn:

google.maps.event.addListener(autocomplete, 'place_changed', function() { 
      var place = autocomplete.getPlace(); 

bây giờ từ "nơi" u có thể lấy nó

place.geometry.location.lat() 

và cho địa chỉ

place.address_components[0] or place.address_components[1] ... 

tùy thuộc vào những gì bạn muốn nhận được

3

Bạn có thể nhưng bạn phải thay thế giá trị của trường nhập ở hai vị trí. Ví dụ:

var autocomplete = new google.maps.places.Autocomplete(input, placesOptions); 
var input = document.getElementById('searchTextField'); 

bên trong sự kiện 'place_changed' bạn làm như sau:

placeResult = autocomplete.getPlace(); 
//This will get only the address 
input.value = placeResult.name; 

này sẽ thay đổi giá trị trong searchtextfield ra đường.

Các vị trí thứ hai là một chút khó khăn:

input.addEventListener('blur', function(){ 
// timeoutfunction allows to force the autocomplete field to only display the street name. 
if(placeResult){ setTimeout(function(){ input.value = placeResult.name; }, 1); } 

Lý do tại sao chúng ta phải làm điều này là bởi vì nếu bạn chỉ làm tăng thêm sự lắng nghe sự kiện cho mờ, google nơi sẽ cư đầu vào nộp cho địa chỉ đầy đủ , vì vậy bạn phải 'chờ' để cập nhật và sau đó buộc thay đổi của bạn bằng cách đợi một vài phút.

Hãy dùng thử mà không có hàm setTimeout và bạn sẽ thấy ý tôi là gì.

0

Bên place_changed thiết lập một chức năng thời gian chờ:

var streetString = place.address_components[0] or place.address_components[1]; 

window.setTimeout(function() { 
    $('input').val(streetString); 
}, 200); 

Giải pháp này làm việc cho tôi.

0

Tôi có một vấn đề rất giống với thực sự có khả năng giải quyết được. Điều này trong một dự án Angular 2 nhưng nó cũng nên được áp dụng ở nơi khác. Tôi lọc kết quả của mình cho các cơ sở và chỉ muốn hiển thị tên và ẩn phần địa chỉ của kết quả. Điều này đã làm các trick cho tôi, một chức năng thực hiện một khi bạn chọn một gợi ý:

getAddress(place: Object) { 
    this.zone.run(() => { 
     this.establishment = place['name']; 
    }); 

nơi zone là một thành phần NgZone tiêm trong các nhà xây dựng và this.establishment là biến gắn với [(NgModel)] trong lĩnh vực đầu vào.

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