我使用的是Leaflet 0.7.7,最新稳定版,我使用的是继承自L.CRS.Simple
的自定义CRS。
CRS:
它与简单CRS非常相似,但c
设置为1
(在简单中,c
设置为-1
)。
L.CRS.XY = L.Util.extend({}, L.CRS.Simple, {
code: 'XY',
projection: L.Projection.LonLat,
transformation: new L.Transformation(1, 0, 1, 0)
});
此CRS的目标是拥有一个真正的{x, y}
地图系统,当y
到达地图底部时会变得更高(如位图)。
要测试的代码:
var southWest = L.latLng(133, 0);
var northEast = L.latLng(0, 170);
var bounds = L.latLngBounds(southWest, northEast);
document._map.setMaxBounds(bounds);
document._map.fitBounds(bounds);
document._markers[68].setLatLng(bounds.getNorthEast());
console.info('southWest', southWest);
// L.LatLng {lat: 133, lng: 0}
console.info('northEast', northEast);
// L.LatLng {lat: 0, lng: 170}
console.info('bounds', bounds);
// L.LatLngBounds (
_northEast: L.LatLng {lat: 133, lng: 170 }
_southWest: L.LatLng {lat: 0, lng: 0 }
)
实际上,由于我有自定义CRS,我认为these lines是问题的根源,因为在{x, y}
平面系统中最大值和最小值不正确(即使我更愿意使用) "指向"但我只能使用" LatLng"对象:confused :)。
实际上,似乎很明显这个问题来自我的代码,但实际上我想找到一个解决方案,我不需要切换到L.CRS.Simple
in哪个y
坐标在地图上方变高。
那么在这个简单的自定义投影中使用边界的解决方案是什么?
答案 0 :(得分:0)
修改强>
听起来Leaflet内部假设y点在下降时增加(如在图像中),并且它应该与纬度相反(即在下降时减小),如min,max,< =和> =比较是硬编码的。
所以可能没有可能组成一个CRS,它会给你一个与Y点相同方向的纬度。除非您准备好修改每个在Leaflet库中比较纬度的函数...
你仍然可以操纵"你想要的数字,如果你每次必须提供坐标时都使用中间转换函数,而当你必须读取坐标时则相反。
这也让你有机会将纬度(y)和经度(x)顺序恢复为[x,y]。
例如:
function revertLat(x, y) {
return [-y, x];
}
演示:http://jsfiddle.net/ve2huzxw/101/
原始答案:
没有直接自定义L.LatLngBounds
的任何理由,以便它符合您的需求?
首先,如果您不完全需要southWest和northEast,而只需要角落作为边界,则可以按原样使用L.LatLngBounds
。例如,即使角落不完全是西南,所有Leaflet方法都会继续工作,而且东北方:map.fitBounds
,L.imageOverlay
等应该可以正常工作。
否则,你必须在L.LatLngBounds
(extend,pad,contains,intersects)中自定义许多方法以恢复最小/最大和< = /> =比较。