2

我有一个关于创建 WMTS 服务器请求以及计算图块编号的问题。

这个德国政府网站,我可以获得他们 WMTS 服务器的地址:https ://www.wmts.nrw.de/geobasis/wmts_nw_dop 。我可以成功地将它作为图像层集成到 josm 中(wmts:https ://www.wmts.nrw.de/geobasis/wmts_nw_dop )并且它可以正确显示。

我可以在终端中查看 josm 发出的服务器请求,类似于:2019-09-26 18:54:31.651 INFO: GET https://www.wmts.nrw.de/geobasis/wmts_nw_dop/tiles/nw_dop/EPSG_25832_16/16/17680/35107 -> HTTP_1 200 (13.3 kB) 您可以查看此图块图像:https ://www.wmts.nrw.de/geobasis/wmts_nw_dop/tiles/nw_dop/EPSG_25832_16/16/17680 /35107

在这个rviz-plugin中,我输入了请求的字符串:https://www.wmts.nrw.de/geobasis/wmts_nw_dop/tiles/nw_dop/EPSG_25832_16/{z}/{y}/{x}

如果我让 rviz_satellite 找出 y 和 x,我会在 rviz 中得到垃圾: 图像

我认为这是因为图像/图块采用 EPSG25832-projection 方法,但 rviz-satellite 采用 Mercator-projection 方法。而且我需要将图像放在 EPSG25832 中,因为会显示其他数据。

如果您查看地图服务器的 WMTSCapabilities.xml,您可以看到最高缩放级别为 16 的图像和其他信息:https ://www.wmts.nrw.de/geobasis/wmts_nw_dop/tiles/nw_dop/EPSG_25832_16 /1.0.0/WMTSCapabilities.xml

我查看了 rviz-satellite 似乎用来计算 x 和 y 的方法,如下所示:

// in Coordinates.h:
int const n = 1 << zoom;
double x = n * ((coord.lon + 180) / 360.0);
double y = n * (1 - (std::log(std::tan(lat_rad) + 1 / std::cos(lat_rad)) / M_PI)) / 2;

但我认为我需要做这样的事情,因为 EPSG25832/UTM 投影: https ://en.wikipedia.org/wiki/Transverse_Mercator_projection

我已经查看了https://josm.openstreetmap.de/doc/org/openstreetmap/gui/jmapviewer/Tile.htm以了解 openstreetmap 是如何做到的,但我什么也没找到。

总而言之:如果在 EPSG25832 投影方法中给定图像(josm/osm 成功),如何从 lat,long 计算 x,y-tile-coordinates?

4

1 回答 1

0

对于您的 URL 模式:https://www.wmts.nrw.de/geobasis/wmts_nw_dop/tiles/nw_dop/EPSG_25832_16/{z}/{y}/{x}您已经交换了xy参数。您也可以只使用EPSG_3857_16而不用担心重新投影图块(根据链接的 XML)。

您可能想要的是(未经测试):https://www.wmts.nrw.de/geobasis/wmts_nw_dop/tiles/nw_dop/EPSG_3857_16/{z}/{x}/{y}

于 2021-08-31T20:51:06.240 回答