【问题标题】:exchangeable implementations of (google/openlayers)maps(google/openlayers)地图的可交换实现
【发布时间】:2013-02-05 21:10:38
【问题描述】:

我正在尝试编写一个 JavaScript 来从表格中读取信息并在地图上放置标记,具体取决于数据(坐标隐藏在该表格中)。 对于每一行,地图上都会有一个标记。

我已经用 google-maps-apiv3 编写了脚本,但我想独立于 google 并希望能够切换到 OpenLayers。我没有在 OpenLayers 上投入太多时间,但我在一些示例中看到的标记非常难看:S。另一方面,google-maps 有免费使用的限制和界限。

您将如何编写 JavaScript 来替换实现?我想将我的业务逻辑(表到地图+标记)分离出来,将其与地图实现分离。 在什么文件上以及如何绑定/导入实现?如何保持 JavaScript 可测试(我使用 Jasmine+Testacular)?如果可能,我会使用模拟。

仅供参考:我是一名 Java 人,也许我的 OO 头脑还看不到解决方案。

【问题讨论】:

    标签: javascript google-maps-api-3 openlayers jasmine karma-runner


    【解决方案1】:

    您说的是abstraction layer。您需要做的是确定地图所需的功能:

    • 标记
    • 信息窗口
    • 地图

    您知道自己需要的任何附加功能都应添加到列表中。然后,对于每个项目,您将按照Bridge Pattern 创建一个抽象表示。例如,您将拥有一个抽象的 map 类,该类将封装 google.maps.Map 和/或 OpenLayers.Map

    function MartinL.Map()
    {
        var map;
        if(google && google.maps) //google maps api has been loaded
            map = new google.maps.Map();
        else
            map = new OpenLayers.Map('map');
    }
    
    var myMap = new MartinL.Map();
    

    这显然是一个过于简单的示例,但您要做的是将 google 地图和 OpenLayer 地图实现包装在抽象层中。重构您现有的代码以仅使用您的抽象层,然后您可以随时切换库。

    【讨论】:

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