【问题标题】:How to use OpenLayers 3 with Proj4js如何在 Proj4js 中使用 OpenLayers 3
【发布时间】:2015-05-15 15:26:52
【问题描述】:

我正在开发一个地图查看器项目,并在此之前使用过 openlayers 2。现在我必须使用 OpenLayers 3,并且地图查看器应用程序应该支持许多不同的投影,因为我有来自不同来源和投影的 wms 和 wfs 图层。我找到了使用 openlayers2 和 proj4js 的示例。但我找不到使用 ol3 和 proj4js 的明确示例。你有什么建议?

【问题讨论】:

    标签: openlayers gis projection openlayers-3 proj4js


    【解决方案1】:

    似乎有时,例如在使用 webpack 在 Angular 2 中使用 OpenLayers 3 和 proj4 时,需要明确告诉 OL3 在哪里可以找到它:

    import * as proj4 from "proj4";
    import * as ol from "openlayers";
    ...
    ol.proj.setProj4(proj4);
    

    一切正常后,定义投影后,ol.proj.get 应该返回它:

    proj4.defs("EPSG:28992", "...");
    if (!ol.proj.get('EPSG:28992')) {
        console.error("Failed to register projection in OpenLayers");
        ...
    }
    

    【讨论】:

    • 花了 2 天时间试图弄清楚为什么 proj4.defs 没有设置我的自定义投影。即将放弃,随机的最后一次搜索把我带到了这里,你知道什么.... setProj4(...) 是血腥的解决方案。没有一个 OL 文档提到这个:-(
    • PPS:这是与撰写此评论之日在 NPM 中的 OL4 的当前版本,所以即使从 OL3 开始它仍然是相同的
    • 看到/使用这个 if 语句帮助我解决了问题,即使这与我的问题没有直接关系。
    • 啊,哎呀,我在 OL5 测试版上,看起来他们要么摆脱了 setProj4,要么还没有实现它,但你可以手动调用 register 并且它再次工作:@987654321 @
    • @chrismarx 我在尝试从 OL4 迁移到使用模块(npm install ol 而不是 npm install openlayers)和 OL5 beta 的分支中发现了以下内容:import setProj4 from 'ol.proj.projection'。但是,我停止了迁移,因为我无法让打字工作,所以我可能没有测试那个特定的部分。另外,也许您的方法实际上是首选。
    【解决方案2】:

    此示例演示如何将 proj4js 与 ol3 一起使用:http://openlayers.org/en/v3.3.0/examples/wms-image-custom-proj.html

    基本上在 OpenLayers 3 中使用 proj4js 可以透明地工作。需要先把 srs 定义扔到 proj4js 上,然后就可以马上使用投影了:

    proj4.defs("EPSG:21781","+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=660.077,13.551,369.344,2.484,1.783,2.939,5.66 +units=m +no_defs");
    var zurich = ol.proj.transform([8.55, 47.366667], 'EPSG:4326', 'EPSG:21781');
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多