2015-07-15 6 views
1

Я пытаюсь увеличить масштаб для всех стран, которые находятся на моей карте автоматически. Он работает, если я группирую страны с опцией «groupId», но у меня также есть нежелательная групповая зависания. Мне нужен один наведение/выбор, но хотелось бы увеличить масштаб до стран, которые они вписываются в границы.AMChart SVG Map - Увеличить, чтобы соответствовать всем странам

Вот пример: http://jsfiddle.net/wiesson/efbnsmpd/

Пример данных карты:

dataProvider: { 
    map: "worldHigh", 
    areas: [{ 
     "id": "AT", 
     "customData": "Austria", 
     "link": "austria", 
    }, { 
     "id": "HR", 
     "customData": "Croatia", 
     "link": "croatia", 
    }, { 
     "id": "FR", 
     "customData": "France", 
     "link": "france", 
    }, { 
     "id": "DE", 
     "customData": "Germany", 
     "link": "germany", 
    }, { 
     "id": "GR", 
     "customData": "Greece", 
     "link": "greece", 
    }, { 
     "id": "IT", 
     "customData": "Italy", 
     "link": "italy", 
    }, { 
     "id": "MA", 
     "customData": "Malta", 
     "link": "malta", 
    }, { 
     "id": "PT", 
     "customData": "Portugal", 
     "link": "portugal", 
    }, { 
     "id": "ES", 
     "customData": "Spain", 
     "link": "spain", 
    }, { 
     "id": "CH", 
     "customData": "Switzerland", 
     "link": "switzerland", 
    }, { 
     "id": "TR", 
     "customData": "Turkey", 
     "link": "turkey", 
    }, { 
     "id": "GB", 
     "customData": "United Kingdom", 
     "link": "united-kingdom" 
    }] 
} 

Мне нужно вычислить LAT/LNG (как-то), основываясь на моих странах, а затем увеличить ли? (Например, http://docs.amcharts.com/3/javascriptmaps/AmMap#zoomTo(zoomLevel, ZoomX, Zoomy, мгновенно))

ответ

2

Там, наверное, лучше. Функция zoomToGroup может принимать массив объектов области (не ids, а реальных объектов). Таким образом, вы могли бы сделать это следующим образом:

map.addListener("init", function (event) { 
    var zoomToAreasIds = ['AT', 'HR', 'FR', 'DE', 'GR', 'ID', 'MA', 'PT', 'ES', 'CH', 'TR', 'GB']; 
    var zoomToAreas = []; 
    var area; 
    for(var i = 0; i < zoomToAreasIds.length; i++) { 
     if (area = map.getObjectById(zoomToAreasIds[i])) 
      zoomToAreas.push(area); 
    } 
    map.zoomToGroup(zoomToAreas); 
}); 

Вот ваша обновленной скрипка:

http://jsfiddle.net/amcharts/efbnsmpd/6/

+0

Спасибо! Я не видел последней части описания. – wiesson

0

Я понял, рабочее решение по себе, как описано здесь: http://jsfiddle.net/f1Ljtawm/embedded/result,js,html,css/

map.addListener('init', function() { 
    map.zoomToGroup("zoomed-group"); 

    function toggleMapObjectAlpha(e) { 
     var alpha = e.type == "rollOverMapObject" ? .3 : .8; 
     e.event.target.setAttribute("fill-opacity", alpha); 
    } 

    map.addListener('rollOverMapObject', toggleMapObjectAlpha); 
    map.addListener('rollOutMapObject', toggleMapObjectAlpha); 
});