Arcgis Javascript Динамическое отображение окна информации для полилиний

Я работаю над веб-картой с помощью ArcGIS Javascript API, и у меня возникают проблемы с отображением infoWindow для ломаных линий. Я пытаюсь динамически отображать infoWindow после выполнения selectFeatures. В основном я настроил его там, где выбирается функция, и карта приближается к этому месту, и у меня появляется всплывающее окно infoWindow для этой функции. У меня он отлично работает для точек и многоугольников, но я не могу заставить его работать для полилиний. Мне удалось успешно отобразить информационное окно, но не в желаемом месте. Я могу заставить его отображаться в верхнем левом углу (используя map.infoWindow.show ();) или в центре экстента ломаной линии (используя map.infoWindow.show (features [0] .geometry.getExtent ( ) .getCenter ();). Но последний из этих двух обычно на самом деле не указывает на линию и находится в середине нигде, поскольку он использует экстент. Я также использовал точки пути для функций и получил среднюю точку, которая Это был самый близкий к моему успеху способ, но infoWindow никогда не появлялся в области просмотра и отображался наполовину или на четверть, что требовало от пользователя панорамирования, чтобы увидеть его. Кто-нибудь знает, как я могу исправить это, чтобы работать лучше так, как я хочу? См. фрагмент кода ниже, где я выполняю это в своем сценарии (оператор else предназначен для ломаных линий).

Фрагмент кода:

if (features[0].geometry.type == "point"){
    map.centerAndZoom(features[0].geometry, map.getMaxZoom()+2);
    var center = features[0].geometry;
    map.infoWindow.setFeatures(features);
    map.infoWindow.show(center); 
}else if (features[0].geometry.type == "polygon"){
    var lyrExtent = features[0].geometry.getExtent().expand(2.0);
    var center = features[0].geometry.getCentroid();
    map.setExtent(lyrExtent);
    map.infoWindow.setFeatures(features); 
    map.infoWindow.show(center); 
}else{
    var lyrExtent = features[0].geometry.getExtent().expand(2.0);
    var center = features[0].geometry.getExtent().getCenter();
    var centerCoords = features[0].geometry.paths[0][features[0].geometry.paths[0].length/2];
    var centerPt = new Point(centerCoords, map.spatialReference);
    map.setExtent(lyrExtent);
    map.infoWindow.setFeatures(features); 
    map.infoWindow.show(center); 
}   

person EvanL    schedule 19.08.2015    source источник


Ответы (1)


Насколько мне известно, вам придется написать собственный код, чтобы изменить экстент, чтобы всплывающее окно было видно. Вы можете увидеть пример в Исходный код Bootstrap Map. Вероятно, вы можете включить эту библиотеку и использовать ее для создания экземпляра вашей карты и получить такое поведение бесплатно, даже если вы не используете Bootstrap.

В качестве альтернативы вы можете использовать метод expand() экстента, чтобы заставить его чтобы уменьшить масштаб в какой-то момент.

person Tom Wayson    schedule 20.08.2015