【发布时间】:2017-12-02 20:58:00
【问题描述】:
我正在尝试为游戏激战 2 构建地图,但无法让 openlayers 正确处理坐标系并完全渲染地图。
这是我所拥有的小提琴:https://jsfiddle.net/ndqb8rqx/
激战世界是正方形的,两个轴上的像素都是 49152 像素。坐标的原点 ([0, 0]) 应该是西北。东南应该是[49152, 49152]。游戏开发者将地图图块作为服务提供:https://wiki.guildwars2.com/wiki/API:Tile_service
我基于 Zoomify 创建了一个Projection 来尝试处理这个问题:
var gw2Projection = new ol.proj.Projection({
code: 'ZOOMIFY',
units: 'pixels',
extent: [0, -49152, 49152, 0]
})
我还从 XYZ 源将游戏图块添加为 Tilelayer,如下所示:
new ol.layer.Tile({
source: new ol.source.XYZ({
url: 'https://tiles.guildwars2.com/1/1/{z}/{x}/{y}.jpg',
projection: gw2Projection
}),
}),
第一个问题是 openlayers 没有渲染完整的地图。地图实际上比小提琴显示的更南和更东。小提琴中实际显示的右下边缘实际上是[32768, 32768],但地图延伸到[49152, 49152]。当完全缩小时,openlayers 似乎只是将坐标系缩小到单个图块的区域。相反,我希望坐标与像素 1:1 匹配。
另外一个问题是目前y坐标向北增加。我想反转 y 轴,使 y 坐标向南增加。
【问题讨论】:
标签: javascript openlayers