(google/openlayers)地图的可交换实现

exchangeable implementations of (google/openlayers)maps

本文关键字:可交换 实现 地图 google openlayers      更新时间:2023-09-26

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

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

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

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

您谈论的是抽象层。您需要做的是确定地图所需的功能:

  • 标记
  • 信息窗口
  • 地图

您知道需要的任何其他功能都应该添加到列表中。然后,对于每个项目,您将按照桥接模式创建一个抽象表示。例如,您将有一个抽象的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();

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