Как изменить векторные полигоны OpenLayers EPSG - PullRequest
0 голосов
/ 22 мая 2019

Ситуация:

  1. У меня очень большое изображение (+ 2Gb .tiff), которое благодаря зуммированию стало легче управлять и использовать в OpenLayers.
  2. У меня естьсерия полигонов, которые были созданы на предыдущем изображении.каждый полигон имеет в среднем 8 баллов.Есть около 3000 полигонов.
  3. Идея состоит в том, чтобы повторно использовать полигоны и карту через OpenLayers.
  4. Благодаря 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 Я хотел бы найти способ привести полигоны в соответствие с изображением.Будут оценены любые решения, как метод векторного преобразования, так и математическая формула, применяемая непосредственно к координатам, или более.

...