2

有很多免费工具可以将 UTM 转换为纬度/经度。很好,但我需要走另一条路;从 WGS-84 到 lat/long 格式。

但这比这更复杂。'因为我需要结果在 UTM-33(北欧)区域。这听起来可能是个坏主意。当地理点可能位于另一个区域时,为什么我想将该区域“强制”为 33N...

出色地; 问题是我已经有一个数据库,其中包含挪威每个地址的 UTM33 坐标。

熟悉UTM@Northern Europe的人都知道挪威横跨多个区域;从 31 到 36。(好吧,也许我们只从 32 跨越到 36,原因是 32V 区域的奇怪宽度,但那是另一个讨论)。

所以,回到我的问题:我的所有地址都已经以 UTM-33 格式给出(超出范围时为负值)。我怎样才能让我的纬度/经度进入 UTM-33?

我需要一个 PHP 解决方案,在使用“gPoint”进行大量调试后,我发现它根本行不通......

(gPoint 非常适合从/到 UTM 转换,但它总是会在“正确”区域块中返回 UTM x/y 对。我不希望这样!我需要始终在区域 33 中获得结果,无论什么是实际正确的..)

4

1 回答 1

3

我终于通过 Proj4 (thanx SlightlyCuban ) 找到了解决方案!

// Conversion from WGS84 to UTM33
$proj4 = new Proj4php();
$projWGS84 = new Proj4phpProj('EPSG:4326');
$projUTM33N = new Proj4phpProj('EPSG:2078');

$result = $proj4->transform($projWGS84, $projUTM33N, new proj4phpPoint($long, $lat));

无法猜测转换的正确格式,我苦苦挣扎了一会儿……然后我发现了一个非常方便的网页:http ://spatialreference.org 。在这里我找到了我需要的定义 ( EPSG:2078 = "+proj=utm +zone=33 +ellps=intl +units=m +no_defs")

Proj4 的 PHP 实现需要硬编码定义;您不能通过临时定义传递。Proj4php 最初缺少 EPSG:2078。耶; 幸运的我!

因此,我建议通过Node.jsand测试 Proj4(请参阅我在http://pastebin.com/1BP8cWpjproj4js上的小演示)。

为了成功,我不得不分叉 Proj4PHP-library,并为 EPSG:2078 添加一个定义文件......

于 2014-05-31T21:39:48.020 回答