Может ли OpenLayers изменять размер изображения только кратными, а не промежуточными (используя параметр "size" ol.source.Zoomify)? - PullRequest
0 голосов
/ 16 мая 2019

Я использую Openlayers для изображения, ранее переданного Zoomify, потому что оно огромно (2 ГБ +). В дополнение к карте я использую набор полигонов, к которым я прикрепил функции javascript. Я использую их через функцию «sourceFeatures.addFeature (featurePolyXY)»; Изображение немного меньше, чем используемое для создания полигонов. Поскольку полигоны создаются из большого XML-файла с многочисленными значениями, идея состоит в том, чтобы увеличить карту, чтобы она соответствовала полигонам, а не изменяла координаты полигонов.

Я думал, что смогу изменить размер карты с помощью параметра "size" в ol.source.Zoomify. хотя размерность, умноженная на 2, работает отлично, все остальные промежуточные величины не всегда рассчитываются, предлагая стандартный размер Видя, что я впервые использую openlayers, я убежден, что решение у меня под носом и что я его не замечаю ... вот код, который я использую:

//these values are taken from the ImageProperties.xml file created by
//zoomify 
var imgWidth = 33165;
var imgHeight = 33165;
var url = 'imageFolder/';
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,
  //i think here is the parameter i would like to change 
  size: [imgWidth, imgHeight],
  crossOrigin: crossOrigin
});

//MAP
var map = new ol.Map({
  layers: [
    new ol.layer.   Tile({
      source: source
    }),
    layerFeatures
    ],       
  target: 'map',
  view: new ol.View({
    projection: proj,
    center: imgCenter,
  zoom: 2,
  extent: [0, -imgHeight, imgWidth, 0]
  })
});

О параметре: размер: [imgWidth, imgHeight]

Я пытался ввести следующие значения size: [33165, 33165] => изображение отображается в соответствии с оригинальным размером size: [66330, 66330] => правильно изображение удваивает размер size: [imgWidth * 2, imgHeight * 2] => правильно изображение удваивает размер размер: [imgWidth * 5, imgHeight * 5] => правильно размер изображения * 5 size: [49000, 49000] => изображение отображается в соответствии с исходным размером

В консоли отсутствуют ошибки.

Есть ли возможность увеличить размер изображения не двойным или кратным, а средним, например * 1,3?

1 Ответ

0 голосов
/ 22 мая 2019

Я решил проблему с альтернативным решением, реальным предупреждением. Вместо того, чтобы изменять размер карты, который представляется возможным только удвоить / удвоить ее и т. Д., Я последовательно изменил координаты полигонов: для каждого значения координаты я добавил множитель (для управления размером многоугольника) и два параметра для добавления к вертикальным и горизонтальным координатам для управления смещением. Так например от:

var featurePoly0162 = new ol.Feature({
geometry: new ol.geom.Polygon([
[
[5636,-12903],
[5741,-12918],
[5753,-12988],
[5683,-12996],
[5633,-12949]
]

до:

var multi = 1.3;
var minX = 1000;
var minY = 500;
var featurePoly0162 = new ol.Feature({
        geometry: new ol.geom.Polygon([
[
[5636*multi - minX,-12903*multi - minY],
[5741*multi - minX,-12918*multi - minY],
[5753*multi - minX,-12988*multi - minY],
[5683*multi - minX,-12996*multi - minY],
[5633*multi - minX,-12949*multi - minY]
]

таким образом я не только могу изменять размер полигонов, но и правильно размещать их на карте, изменяя только 3 значения

...