2013-09-16 5 views
0

Я использую nokia.places.widget.SearchBox вместе с nokia.maps.map.Display.ZoomTo BoundingBox в SearchBox.onSelect с ЗДЕСЬ карты и поместить

Вы можете использовать функцию onSelect для SearchBox для выполнения операций, когда пользователь выбирает элементы из списка результатов.

Что мне нужно сделать, это центрировать и приблизить карту к выбранному месту. Моя проблема связана с масштабированием, потому что я не знаю, какой уровень использовать.

Я заметил, что некоторые места имеют boundingBox (для использования функции zoomTo компонента Display), а другой нет. Я бы воспользовался ('административно-краевая зона', 'street-square' и т. Д.), Но это не точный и более того, я не могу найти список возможных кодов категорий.

Любое предложение?

ответ

1

Чтобы получить карту, чтобы переместить/масштабирование к месту, когда выбрано предложение, вам необходимо будет реализовать onResults обработчика:

var fromSearchBox = new nokia.places.widgets.SearchBox({ 
    targetNode: "fromSearchBox", 
    template: "fromSearchBox", 
    map: map, 
    onResults: function (data) { 
     // Your code goes here // 

    } 
}); 

Как вы заметили data поля может или не может содержать ограничивающий коробка. Это связано с тем, что только несколько мест охватывают определенную область , большинство из них: .

Для подмножества, которые имеют BoundingBox вы можете сделать следующее:

if (data.results.items[0].boundingBox){ 
    map.zoomTo(data.results.items[0].getBoundingBox()); 
} 

Для остатка ответ будет зависеть от того, что вы пытаетесь достичь, но вы можете попробовать любой из следующих действий:

  • Перемещение к местоположению на карте без изменения масштаба. (Т.е. позволить пользователю решить)

    map.set("center", data.results.items[0].position); 
    
  • Переход к указанной ограничивающей рамке для точечного объекта в указанном месте.

    var obj = new nokia.maps.map.StandardMarker(startPoint); 
    map.zoomTo(obj.getBoundingBox()); 
    

Или же: map.zoomTo(nokia.maps.geo.BoundingBox.coverAll([startPoint]));

  • Определить рамку, окружающую местоположение точки и приблизить к этому вместо

    startPoint =data.results.items[0].position; 
    bottomLeft = new nokia.maps.geo.Coordinate(startPoint.latitude - 0.1, 
         startPoint.longitude + 0.1); 
    topRight = new nokia.maps.geo.Coordinate(startPoint.latitude + 0.1, 
         startPoint.longitude - 0.1); 
    map.zoomTo(nokia.maps.geo.BoundingBox.coverAll([topRight, bottomLeft])); 
    

Дополнительно Display.zoomTo() может также принимать адди , поэтому, если вы используете map.zoomTo(BoundingBox, true), вы также сохраните текущий центр карты на экране, и это может создать больше контекста для пользователя.

+0

Я думаю, что буду использовать обложку. Статический метод, спасибо @JasonFox! – Flea777