2016-04-13 10 views
0

Kullanıcının formda girdiği konumu almak için şu anda Mapbox API'sini kullanıyorum. Ayrıca, haritamı '$ kapsamına' eklenmiş olan özelliklerle oluşturmamı sağlayan yaprakçık-açısal yönerge'u kullanıyorum.Mapbox API'sini Angular JS ile kullanırken otomatik olarak yer aramalarını nasıl tamamlıyorsunuz?

Kullanıcı gönderdikten sonra bir konum alabilir ve haritama pin gönderebilirken, bu örneğe benzer arama sonuçlarını otomatik olarak nasıl tamamlayacağımı anlayamıyorum.

Denetleyicimden bir snippet. API son noktadaki &autocomplete=true çalışmıyor. İşte

function CreateController ($http, $scope) { 
    var vm = this; 

    vm.new_location = {}; 
    vm.locations = []; 

    vm.submitLocationForm = function(){ 
    vm.geocode(vm.addPin); 
    } 

    //GET LOCATION FROM QUERY 
    vm.geocode = function(addMapData) { 
    //api from mapbox with access token 
    var apiEndpoint = 'https://api.mapbox.com/geocoding/v5/mapbox.places/'+vm.new_location.locationName+'.json?access_token=' + MY_API_KEY + '&autocomplete=true' 

    //ajax call to get location data from the zipcode 
    $http.get(apiEndpoint) 
    .then(function(mapData) { 
     var coordinates = mapData.data.features[0].center; //array [long, lat] 
     addMapData(coordinates);// callback function that is called only after http call is receives data 
    }) 
    } 

    angular.extend($scope, { 
     center: { 
      autoDiscover: true 
     }, 
     markers: { 
     }, //markers is empty b/c users will add markers 
     defaults: { 
     // minZoom: 2, 
     // doubleClickZoom: true, 
     markerZoomAnimation: true 
     } 
    ); 



    //adding pin 
    vm.addPin = function(coordinates){ 
    vm.pinCounter += 1; 
    vm.new_location.pinOrder = vm.pinCounter; 
    vm.new_location.longitude = coordinates[0]; 
    vm.new_location.latitude = coordinates[1]; 


    $scope.markers[vm.pinCounter] = { 
     lat: vm.new_location.latitude, 
     lng: vm.new_location.longitude, 
     message: vm.new_location.textContent, 
     draggable: false, 
     focus: true, 
     riseOnHover: true, 
     zoom: 10 
    } 

    } 

formu için HTML var:

<form ng-submit="CreateController.submitLocationForm()"> 
       <div class="form-group"> 
        <input type="text" ng-model="CreateController.new_location.locationName" class="form-control" placeholder="Location name" autofocus> 
       </div> 
       <input type="submit" value="Submit" class="btn btn-block btn-info"> 
</form> 

Bu the code that's available on the Mapbox documentation, ama Eğik ile kullanmak için bunu nasıl değiştirileceğini emin değilim:

<html> 
    <head> 
     <meta charset=utf-8 /> 
     <title>Geocoding with autocomplete</title> 
     <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' /> 
     <script src='https://api.mapbox.com/mapbox.js/v2.4.0/mapbox.js'></script> 
     <link href='https://api.mapbox.com/mapbox.js/v2.4.0/mapbox.css' rel='stylesheet' /> 
     <style> 
      body { margin:0; padding:0; } 
      #map { position:absolute; top:0; bottom:0; width:100%; } 
     </style> 
     </head> 
     <body> 
     <div id='map'></div> 
     <script> 
      L.mapbox.accessToken = '<your access token here>'; 
      L.mapbox.map('map', 'mapbox.streets') 
      .addControl(L.mapbox.geocoderControl('mapbox.places', { 
       autocomplete: true 
      })); 
     </script> 
     </body> 
    </html> 
+0

Bu soruna geçici bir çözüm buldum. Bunu tamamlamak için http://angular-js.in/vsgoogleautocomplete/ adresini kullandım, ancak Mapbox kullanılarak yapılabilecek gibi görünüyor. – socialpiranha

cevap

0

You eski Mapbox JS kütüphanemize bakıyor gibi görünüyor. Haritaları daha akıcı hale getiren daha yeni bir sürüm çıktı. Belgelerin otomatik tamamlama ile bir geocoder example vardır, ben üzerinden bakmak tavsiye ederim. Başka sorunuz varsa, onlara cevap vermekten memnuniyet duyarız.

+0

Merhaba cammace, yeni örnek için teşekkürler. Ancak, aynı sorunla karşılaşıyorum. Bu mantığın ön uç çerçevesi olarak Açısal kullanarak nasıl kullanılacağını anlayamıyorum - bunun için herhangi bir ipucu var mı? – socialpiranha

+1

hmm belki de [broşür-açısal-yönerge] (https://github.com/tombatossals/angular-leaflet-directive) projesini kontrol etmelisiniz. [Mapbox kutularını] (https://www.mapbox.com/api-documentation/#maps) ile [düz Kitapçık API'sı] 'nı (https://www.mapbox.com/mapbox.js) kullanabilirsiniz. /example/v1.0.0/plain-leaflet/) – cammace