1

我正在我公司的软件中实现对WMS 地图的支持。服务器返回其地图可用的投影列表,但我们的软件仅以 WGS84(纬度/经度或 UTM)显示数据,并非所有服务器都返回“CRS:84”或“EPSG:4326”CRS。因此,我需要转换/重新投影数据。一些服务器返回非常不寻常的服务器,我遇到以下问题之一: EPSG:3112 (GDA94 / Geoscience Australia Lambert) used by Geoscience Australia's WMS server

为了在屏幕上显示地图,我需要将所需屏幕或瓦片边界框的 WGS84 纬度/经度坐标转换为服务器的 CRS,请求地图图像,然后绘制转换地图的边界框(在服务器的 CRS ) 返回 WGS-84 纬度/经度。这似乎不太正确:

来自两台服务器的叠加地图

这张图片是澳大利亚塔斯马尼亚岛的一部分。灰色海岸线来自Demis,WGS:84 投影。蓝色轮廓和灰色标线来自Geoscience Australia,在 EPSG:3112 中,但(理论上)通过 Proj4 重新投影以匹配灰色海岸线。如您所见,它非常不准确,大约为 50-100 公里。如果此显示正在绘制 WGS-84 经纬网,它们将是完全垂直和水平的。另请注意,该岛是拉伸的,即它不仅仅是一个旋转。这在我看来好像重投影根本不起作用。

我正在使用的两个 Proj4 初始化字符串是:

  • WGS-84(WMS 的 CRS:84):+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs
  • 每股收益:3112:+proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=134 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs

从 WGS-84 到 EPSG:3112 和返回的单个点往返产生原始点:

  • WGS:84:(145.0,-42.0)
  • 至 EPSG:3112:(931684.430679232,-4764432.89032608)
  • 回到WGS-84:(145,-41.9999999999999)

所有转换均使用pj_transform.

尽管过去几天我学到了很多东西,但我对地图投影或 Proj4 的了解还不够,不知道下一步该去哪里,我非常感谢对这个库有更多了解的人的建议。

我的一些想法是:

  • 蓝岛似乎仍在兰伯特投影中。这可能吗?它可以解释视觉失真。
  • 我们使用的是多年前构建的 Proj4 DLL 版本,虽然看起来您可以将有关基准等的各种数据构建到 DLL 中,但我不知道这是否已完成。不过,Proj4 不会标记进行坐标转换的错误,所以目前我正在假设如果图书馆很高兴,这是一个外部错误(即我的部分。)我也不知道原因无论如何都拥有我们自己的多年前构建的 DLL,而不是使用 Proj4 网站上的预构建二进制文件。然而,即使是 Proj4 二进制文件也是一个旧版本,并且似乎没有构建为将所有内容都包含为二进制数据。
  • Proj4 的某些版本似乎从外部加载数据和其他信息。我尝试替换我们的 DLL 并将其配置为使用环境变量使用其中一些文件PROJ_LIB,但没有明显变化。
  • +towgs84=0,0,0,0,0,0,0EPSG:3112 字符串的一部分似乎很奇怪。这是来自最新 Proj4 下载中的“epsg”文件,但它可能是错误的吗?

也许这个问题的更好表述是:

  • 在这两个 CRS 之间进行转换需要什么或做什么?

谢谢你的帮助 :)

4

0 回答 0