我正在使用此处的澳大利亚政府地图数据:Victoria, Australia locality data,它在EPSG4326投影中提供。
当我尝试将数据用于传单时,当然,由于地球的曲率,我的数据有点失真 - 所以我的数据在屏幕上没有正确显示,因为地图使用不同的投影我的数据。
我试图通过在Map选项和TileLayer中设置它来强制地图使用EPSG4326,如下所示:
var gisLayer = L.tileLayer(
'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
//subdomains: ['0', '1', '2', '3'],
attribution: 'openstreetmap',
reuseTiles: true,
updateWhenIdle: false,
crs: L.CRS.EPSG4326
});
var map = L.map('map', {
center: [-28.5, 135.575],
zoom: 4
,crs: L.CRS.EPSG4326
});
map.addLayer(gisLayer);
但是当我这样做时,地图不会显示。我不相信已经为此投影生成了地图图块。也就是说,docos here中有一条建议说它可能是可能的,但我无法做到这一点。 (我的配置是否错误?)
当我检索数据并将其放在地图上时,它似乎正在工作,但是当我得到地图边界以选择可见区域的数据时,它也显示出扭曲。所以我尝试手动将地图边界转换为EPSG4326,将其传递给数据库,如下所示:
var bounds = map.getBounds();
var coords4326_NE = L.Projection.SphericalMercator.unproject(bounds._northEast);
console.log(coords4326_NE);
但这破坏了代码。我传递了错误的结构,我也无法做到这一点。
当然,我也接受将从数据库返回的每个点转换为默认投影,我认为是EPSG3857。但我也是这样做的。
我提供了jsFiddle here,我一直在努力做到这一点。
有谁知道我怎么做到这一点?