OpenLayers可以仅更改倍数而不更改中间图像的大小(使用ol.source.Zoomify的参数“大小”)吗?

时间:2019-05-16 09:27:58

标签: openlayers zoomify

我在以前由Zoomify传递的图像上使用Openlayers,因为它很大(2gb +)。 除了地图之外,我还使用一组附加了javascript函数的多边形。我通过“ sourceFeatures.addFeature(featurePolyXY)”函数使用它们; 该图像比用于创建多边形的图像略小。 鉴于多边形是从具有大量值的大型xml文件中生成的,因此,其想法是放大地图以使其遵守多边形,而不修改多边形的坐标。

我认为我可以通过ol.source.Zoomify的“ size”参数更改地图的大小。 尽管将尺寸乘以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] =>根据原始尺寸显示图像     尺寸:[66330、66330] =>图像尺寸正确地翻了一番     size:[imgWidth * 2,imgHeight * 2] =>图像正确地加倍了大小     尺寸:[imgWidth * 5,imgHeight * 5] =>图像尺寸正确为* 5     尺寸:[49000,49000] =>图片会根据原始尺寸破旧显示

控制台中没有错误。

是否有可能不是以两倍或倍数而是以中间方式(例如* 1.3)来放大图像大小?

1 个答案:

答案 0 :(得分:0)

我用另一种解决方案(真正的解决方案)解决了这个问题。 我没有更改地图的大小(似乎只能将其翻倍/四倍,依此类推),而是依次修改了多边形的坐标: 对于每个坐标值,我添加了一个乘数(用于管理多边形的大小)和两个参数,分别添加到垂直和水平坐标以管理位移。 因此,例如:

Working gulp task:
gulp.task('transpile-calendar', () =>
gulp.src('javascript/util/dateUtil.js')
.pipe(babel({
    presets: ['@babel/env']
}))
.pipe(gulp.dest('static/js/prod'))
);

Gulp task that does not produce output:
gulp.task('transpile-calendar', () =>
    gulp.src('javascript/util/*.js')
    .pipe(babel({
        presets: ['@babel/env']
     }))
.pipe(gulp.dest('static/js/prod'))
);

Contents of my package.json:
"@babel/core": "^7.4.5",
"@babel/preset-env": "^7.4.5",
"babel-polyfill": "6.26.0",
"browser-sync": "2.26.3",
"gulp": "3.9.1",
"gulp-add-src": "1.0.0",
"gulp-babel": "^8.0.0",
"gulp-clean-css": "3.10.0",
"gulp-compass": "2.1.0",
"gulp-concat": "2.6.1",
"gulp-if": "2.0.2",
"gulp-ng-annotate": "2.1.0",
"gulp-strip-css-comments": "2.0.0",
"gulp-uglify": "3.0.2",
"vue": "2.6.10"

收件人:

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

通过这种方式,我不仅可以修改多边形的大小,还可以通过仅修改3个值将其正确放置在地图上