2012-05-27 2 views
4

У меня есть несколько аннотаций на карте - хотя пользователю может потребоваться прокрутить, чтобы увидеть их. Я хочу, чтобы пользователь мог выбрать кнопку, чтобы соответствовать всем этим на карте, - устраняя необходимость прокрутки/ручного изменения размера.Центрирование карты вокруг нескольких точек (аннотации) на карте - Titanium mobile

Я определил мин. и макс. широты и долготы (например, minLat, maxLat, minLong, maxLong) для точек, которые я хочу показать на карте.

Я борюсь, однако, с конкретной формулой, используемой для получения свойств долготы и широты для перехода к mapview.setLocation. Любые указатели на какую формулу я могу использовать?

ответ

7

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

function setMarkersWithCenter(map,latiarray,longiarray) 
{ 
    if(latiarray.length != longiarray.length) 
     return; 
    var total_locations = latiarray.length; 
    var minLongi = null, minLati = null, maxLongi = null, maxLati = null; 
    var totalLongi = 0.0, totalLati = 0.0; 

    for(var i = 0; i < total_locations; i++) 
    { 
     if(minLati == null || minLati > latiarray[i]) { 
      minLati = latiarray[i]; 
     } 
     if(minLongi == null || minLongi > longiarray[i]) { 
      minLongi = longiarray[i]; 
     } 
     if(maxLati == null || maxLati < latiarray[i]) { 
      maxLati = latiarray[i]; 
     } 
     if(maxLongi == null || maxLongi < longiarray[i]) { 
      maxLongi = longiarray[i]; 
     } 
    } 

    var ltDiff = maxLati-minLati; 
    var lgDiff = maxLongi-minLongi; 
    var delta = ltDiff>lgDiff ? ltDiff : lgDiff; 
    if(total_locations>0 && delta>0) 
    { 
     map.setLocation({ 
      animate : true, 
      latitude:((maxLati+minLati)/2), 
      longitude:((maxLongi+minLongi)/2), 
      latitudeDelta:delta, 
      longitudeDelta:delta, 
     }); 
    } 

} 

Надеюсь, что это поможет.

+0

@DhairyaVora ваш код работает очень хорошо. Я должен был использовать его в своем приложении. Однако, когда аннотации разделены с большим расстоянием (например, на разных континентах это порождает ошибку. Что-то вроде: «Недопустимый регион kernelpanic

+0

@kernelpanic, это хорошая идея. Мы можем поместить этот код в try catch, и если возникнет некоторая ошибка, catch может показать первую аннотацию. И, кстати, можете ли вы показать мне примеры мест, для которых эта ошибка возникает? –

+0

@DhairyaVora Я рад, что вы открыты для некоторых улучшений. В моем примере ошибка возникает, когда у меня есть две аннотации: одна в Атланте, США и другая в Швейцарии – kernelpanic