我有一个关于创建 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?