【问题标题】:Openlayers.Bounds().transform() not doing transformOpenlayers.Bounds().transform() 不做变换
【发布时间】:2026-01-13 12:55:01
【问题描述】:

已解决。见http://osgeo-org.1560.n6.nabble.com/Openlayers-Bounds-transform-not-doing-transform-td3912787.html

我正在尝试在 Openlayers 中进行边界坐标变换,并尝试了以下方法,对于两个 console.log() 语句,这两种情况下都给了我相同的范围(但我希望第二个语句给出我在 EPGS:4326 中的界限):

http://pastebin.com/ADRwjLAy

在两个 console.log() 语句中,我得到以下对象(来自 Chrome javascript 调试器的 c&p):

Class
bottom: 4816289.746171
centerLonLat: null
left: 189775.37995
right: 761662.354535
top: 5472414.143295
__proto__: Object

我在 trac.osgeo.org/openlayers/wiki/Documentation/Dev/proj4js 阅读了 proj4js with openlayers 的文档,它告诉我:

如果库可用,OpenLayers 会与 Proj4js 集成。这将使使用它更容易一些。将它放在与 OpenLayers.js 相同的文件夹中将使其可用。

我通过符号链接所做的:

matt@xxxxxxxx:/var/www/xxxxx$ ll /var/www/OpenLayers-2.10/
total 1008
drwxr-xr-x 13 matt matt   4096 Nov  1 01:49 .
drwxrwxrwx 30 root root   4096 Nov  1 01:43 ..
-rw-r--r--  1 matt matt 945828 Sep  9  2010 OpenLayers.js
...
lrwxrwxrwx  1 matt matt     31 Nov  1 01:49 proj4js.js -> /var/www/proj4js/lib/proj4js.js
...

有人可以帮我诊断我在这里做错了什么吗?

谢谢, 马特

【问题讨论】:

    标签: openlayers proj4js


    【解决方案1】:

    主要问题是您的页面根本没有加载proj4js.js。您大概假设 OpenLayers 会自动加载它,但事实并非如此,因此您需要自己加载它。

    由于 OpenLayers 没有内置 EPSG:26915 支持,因此需要 proj4js 才能进行您想要的转换。

    第二个问题是您希望通过在您的 javascript 中添加如下所示的行来明确定义 EPSG:26915

    Proj4js.defs["EPSG:26915"] = "+proj=utm +zone=15 +ellps=GRS80 +datum=NAD83 +units=m +no_defs";
    

    如果没有,我认为 proj4js 应该尝试从 spatialreference.org 加载定义,但是当我尝试时这似乎对我不起作用。

    【讨论】:

    • 感谢您的帮助 TomH,您是对的,我从文档中假设将它放在 Openlayers 目录中意味着 Openlayers 会自动加载它。我现在已将其更改为指向它自己的解压缩目录中的 proj4js.js(因为它需要整个脚本目录,我认为它是独立的)。我进行了您建议的更改,但在转换后获得相同(未转换)对象的结果相同。这是代码:pastebin.com/9PaBwLDx
    • 好吧,我只能说它对我有用 - 请参阅我的测试页面 maps.compton.nu/project.html 以了解我的意思。那是使用 OpenLayers 2.11,但我认为这不会有任何区别。