Я работаю над веб-картой с помощью 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);
}