如何将Leaflet坐标切换到0,0位于西南的位置?

时间:2016-05-29 14:44:14

标签: javascript jquery leaflet

我正在制作一个传单项目,我需要坐标0到4096,我需要的传单坐标如下:

0,0 bottom left (southWest)
0,4096' top left (northWest)
4096',4096' top right (northEast)
4096',0 bottom right (southEast)

我已经尝试了许多方法来根据需要绘制坐标但没有运气。这是我的jsfiddle和我的例子,当你点击显示坐标的地图时,它有一个console.log。如果你点击左上角你会看到它的0,0如果你点击右下角你会看到4096,4096这是从需要的什么向后。这是我的代码

url = 'http://{s}.tile.osm.org/{z}/{x}/{y}.png';
weight = 4096;
height = 4096;
mapMinZoom = 1;
mapMaxZoom = 7;
map = L.map('map', {
  maxZoom: mapMaxZoom,
  minZoom: mapMinZoom,
  noWrap: true,
  detectRetina: true
});
unproject = function(coord) {
  return map.unproject(coord, 4);
};

southWest = unproject([0, 0]);
northEast = unproject([height, weight]);
map.setMaxBounds(new L.LatLngBounds(southWest, northEast));
tileLayer = L.tileLayer(url, {
  minZoom: mapMinZoom,
  maxZoom: mapMaxZoom,
  noWrap: true,
  tileSize: 256,
  detectRetina: false
}).addTo(map);

map.setView(unproject([0, 0]), 2);

map.on('click', function(e) {
  var coords, latLong;
  latLong = new L.LatLng(e.latlng.lat, e.latlng.lng);
  coords = map.project(latLong, 4);
  console.log("x="+coords.x+", y="+coords.y);
});

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你会想要这样的地图坐标:

[0, 4096] .. [4096, 4096]
.........................
.........................
[0, 0] ........ [4096, 0]

当上升时垂直坐标增加(如Leaflet上的纬度)并且向右上方(如Leaflet上的经度)增加水平坐标是好的。所以你似乎不需要反转垂直轴。

至于坐标的顺序,不幸的是,Leaflet首先使用纬度,第二次使用经度,并且几乎不可能原生地切换它们。但是,您可以轻松构建仅交换坐标的包装器方法。 (类似于Leaflet LatLngBounds with simpler CRS & projection,但不需要使用负垂直坐标-y,因为在您的情况下,您希望它与纬度方向相同)

然后另一个问题是你希望坐标介于那四个角落。默认CRS(Web墨卡托)沿垂直轴不是线性的。如果您需要坐标是线性的,则应使用L.CRS.Simple。请参阅传单tutorial for non-Earth-based maps