#javascript #openlayers
Вопрос:
Я создал свои собственные векторные данные tile .pbf, состоящие из полигонов, линий и точек.
Источником данных .pbf является групповой проигрыватель шейп-файлов на Геосервере, где каждый шейп-файл упорядочен таким образом, что точки находятся вверху:
Используя открытые слои, я оформил векторные плитки и последовал примеру «Информация о векторных плитках«. Разница в том, что мой переключается одним щелчком мыши.
Проблема в том, что я не могу щелкнуть по какой-либо точке, даже в виде спрайтового изображения, если она полностью находится внутри многоугольника. Можно щелкнуть по линиям, которые полностью находятся внутри многоугольника. Нижележащие полигоны выбираются как объект[0] при попытке выбрать точку.
В чем может быть причина такого порядка отображения? Что точка-это всего лишь один пиксель? Каким может быть лекарство? Я очень новичок в JavaScript и OpenLayers, поэтому надеюсь, что это что-то наивное. Мне нужно уметь расставлять приоритеты по точкам, когда они окружены многоугольником.
Ответ №1:
Порядок возвращаемых объектов, по map.getFeaturesAtPixel()
-видимому, случайный и не связан с порядком рендеринга. Либо проверьте все возвращаемые объекты, а не только ввод [0]
, либо отсортируйте массив таким образом, чтобы точки/мультиточечные точки были ниже в порядке сортировки, чем строки/многолинейные строки с последними полигонами
function rank(feature) {
var type = feature.getType();
if (type.indexOf('Point') > -1) {
return 1;
} else if (type.indexOf('LineString') > -1) {
return 2;
} else {
return 3;
}
}
map.getFeaturesAtPixel(event.pixel).sort(function(a, b) {
return rank(a) - rank(b);
});
Комментарии:
1. Привет, Майк, я нацарапал Javascript и сумел заставить это работать, спасибо, что дал мне чему-то научиться. Что касается, казалось бы, случайного возврата функции, я подозреваю, что порядок возвращаемых функций основан на близости к выбранному пикселю (в пределах допустимого). Я не пробовал это без разрешения, но в целом это очень затрудняет нажатие на точку без него.