Ситуация:
- У меня очень большое изображение (+ 2Gb .tiff), которое благодаря зуммированию стало легче управлять и использовать в OpenLayers.
- У меня естьсерия полигонов, которые были созданы на предыдущем изображении.каждый полигон имеет в среднем 8 баллов.Есть около 3000 полигонов.
- Идея состоит в том, чтобы повторно использовать полигоны и карту через OpenLayers.
- Благодаря OpenLayers и различным путеводителям и вопросам, также найденным здесь в Stackoverflow, я достиг хорошеготочка.Я вижу и карту, и полигоны.
Проблема:
Полигоны расположены не в соответствии с картой, я полагаю, потому что существует проблема с кодами EPSG.На самом деле, по сравнению с центром, многоугольники справа кажутся «скользящими вправо», а слева - «левыми»
Что я пробовал:
Я пытался как изменить проекцию, так и geometry.transform () ... но мое очень небольшое знакомство с OpenLayers не помогло.Я также нашел и попробовал много решений непосредственно из StackOverflow, но даже если я нашел много людей, у которых есть похожие проблемы, предлагаемые решения, кажется, не подходят.
Полигоны были добавлены с параметрами, чтобы переместить их все вправоили влево или для изменения их размера.
Код:
var imgWidth = 33165;
var imgHeight = 33165;
var url = 'picUrl/';
var crossOrigin = 'anonymous';
var imgCenter = [imgWidth / 2, - imgHeight / 2];
var proj = new ol.proj.Projection({
code: 'ZOOMIFY',
units: 'pixels',
extent: [0, 0, imgWidth, imgHeight]
});
var source = new ol.source.Zoomify({
url: url,
size: [imgWidth, imgHeight],
crossOrigin: crossOrigin
});
Карта:
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: source
}),
layerFeatures
],
target: 'map',
view: new ol.View({
projection: proj,
center: imgCenter,
zoom: 1,
extent: [0, -imgHeight, imgWidth, 0]
})
});
Полигон
var multi = 0.867; //to modify the size
var minx = 100; //to adjust the left boundary
var miny = -230; //to adjust the right boundary
var featurePoly0001 = new ol.Feature({
geometry: new ol.geom.Polygon([
[
[17470*multi - minx, -5240*multi - miny ],
[17668*multi - minx, -5224*multi - miny ],
[17676*multi - minx, -5302*multi - miny ],
[17474*multi - minx, -5306*multi - miny ]
]
])
})
sourceFeatures = new ol.source.Vector(),
layerFeatures = new ol.layer.Vector({
source: sourceFeatures
});
инаконец, добавьте полигон на карту:
sourceFeatures.addFeature(featurePoly0001);
Ожидаемые результаты
Видя, что в OpenLayers по умолчанию используется EPSG 3857, и многоугольники были нарисованы непосредственно на изображении, которое я затем представляюсовместим с EPSG: 4326 Я хотел бы найти способ привести полигоны в соответствие с изображением.Будут оценены любые решения, как метод векторного преобразования, так и математическая формула, применяемая непосредственно к координатам, или более.