Упрощение HandleDateline
, поэтому все координаты находятся либо в западной части нормального мира, либо в восточной части левого мира, кажется, это исправлено (поэтому, если геометрия пересекает линию даты, экстент начинается в левом мире)
function HandleDateline(array) {
for (var i = 0; i < array.length ; i++) {
if (array[i][0] > 0) {
array[i][0] -= 360;
}
}
}
Однако в мирах справа точки к западу от линии даты, как представляется, отображаются под линией строк, а к востоку от линии даты - над ней.Перемещение на HandleDateline(datelinecrossing);
выше datelinecrossing.forEach
исправляет это.
Вы также можете рассмотреть возможность использования многоточечной геометрии для точек (если только вам не нужно, чтобы они выбирались индивидуально).
HandleDateline(datelinecrossing);
var pdlcrossing = new ol.Feature({
geometry: new ol.geom.MultiPoint(datelinecrossing).transform('EPSG:4326', 'EPSG:3857')
});
drawingSource.addFeature(pdlcrossing);
var dlcrossing = new ol.Feature({
geometry: new ol.geom.LineString(datelinecrossing).transform('EPSG:4326', 'EPSG:3857')
});
drawingSource.addFeature(dlcrossing);
По-прежнему существует проблема увеличения масштаба на западе от линии даты в мирах справа, поэтому я думаю, что для каждой геометрии потребуется два набора: один смещение влево и другой на 360 градусов вправо:
function PlotGeometries(datelinecrossing){
var pgeom = new ol.geom.MultiPoint(datelinecrossing);
var pdlcrossing = new ol.Feature({
geometry: pgeom.clone().transform('EPSG:4326', 'EPSG:3857')
});
drawingSource.addFeature(pdlcrossing);
pgeom.translate(360,0);
var pdlcrossing2 = new ol.Feature({
geometry: pgeom.transform('EPSG:4326', 'EPSG:3857')
});
drawingSource.addFeature(pdlcrossing2);
var geom = new ol.geom.LineString(datelinecrossing);
var dlcrossing = new ol.Feature({
geometry: geom.clone().transform('EPSG:4326', 'EPSG:3857')
});
drawingSource.addFeature(dlcrossing);
geom.translate(360,0);
var dlcrossing2 = new ol.Feature({
geometry: geom.transform('EPSG:4326', 'EPSG:3857')
});
drawingSource.addFeature(dlcrossing2);
}