0

我正在尝试使用带有特定投影 EPSG:2169(Luref 或卢森堡)的 Leaflet。我看到如果我不使用像 WGS84 这样的“标准”投影,我必须使用 Proj4Leaflet 并将其引用到地图上。

这就是我现在所做的:

this.crs = new L.Proj.CRS('EPSG:2169',
'+proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-189.681,18.3463,-42.7695,-0.33746,-3.09264,2.53861,0.4598 +units=m +no_defs');

this.map = L.map('map', {
  center: [ 74000, 96000 ],
  zoom: 3,
  crs: this.crs,
});

当我用地图加载页面时,控制台给了我这些错误:

Cannot read property '3' of undefined
Cannot read property 'x' of undefined

经过一番谷歌搜索,我发现我必须定义“分辨率”选项。我不确切知道它是如何使用的,但我从一个样本中获取,现在是 CRS 的外观:

this.crs = new L.Proj.CRS('EPSG:2169',
'+proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-189.681,18.3463,-42.7695,-0.33746,-3.09264,2.53861,0.4598 +units=m +no_defs',
{
  resolutions: [8192, 4096, 2048, 1024, 512, 256, 128]
});

现在加载地图时,控制台中出现此错误:

TypeError: coordinates must be finite numbers

而现在我不知道下一步该做什么。这里有人已经遇到过这种问题吗?

我看一下这个推荐的帖子:尝试在 Leaflet 中使用 EPSG:3857 但我没有找到我想要的。我的目标是在 EPSG:2169 中准备一张地图,这样我就可以从这个投影中的 GeoServer WMS 检索 GeoJson 数据。

提前谢谢了。

4

1 回答 1

3

Proj4Leaflet 改变的是 Leaflet map 的显示CRS,而不是L.LatLngs 的 CRS。这与 Leaflet 使用 EPSG:3857 进行显示的方式相同,但用户永远不会看到 EPSG:3857 坐标,并且指定的地图中心 ( et al ) 以 EPSG:4326 坐标给出。

在您的情况下,使用相应的 EPSG:4326 坐标初始化您的地图:

var crs = new L.Proj.CRS('EPSG:2169',
'+proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-189.681,18.3463,-42.7695,-0.33746,-3.09264,2.53861,0.4598 +units=m +no_defs',
{
  resolutions: [8192, 4096, 2048, 1024, 512, 256, 128]
});

var map = L.map('leaflet', {
  center: [ 49.60, 6.39 ],
  zoom: 3,
  crs: crs,
});
于 2020-01-23T10:20:05.090 回答