矢量地图

矢量图使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。由于矢量图形可通过公式计算获得,所以矢量图形文件体积一般较小。矢量图形最大的优点是无论放大、缩小或旋转等不会失真。在地图中存在着大量的应用,是地图数据中非常重要的组成部分。

为了便于存储,传递,使用,矢量地图会按照一定的格式来表达,比如常见的GeoJSONTopoJSONGMLKMLShapeFile等等。 除了最后一个ShapeFile,其他几个格式的矢量地图OpenLayers 3都支持,使用起来也是非常的简单,下面这个地图就加载了GeoJSON格式的矢量地图。

代码非常简单:

<div id="map" style="width: 100%"></div>
<script type="text/javascript">

    //创建地图
    var map = new ol.Map({
        layers: [
            // 底图用Open Street Map 地图
            new ol.layer.Tile({
                source: new ol.source.OSM()
            }),
            // 再加载一个geojson的矢量地图
            new ol.layer.Vector({
                source: new ol.source.Vector({
                    url: '../data/geojson/line-samples.geojson',     // 地图来源
                    format: new ol.format.GeoJSON()    // 解析矢量地图的格式化类
                })
            })
        ],
        view: new ol.View({ 
            center: [-72.980624870461128, 48.161307640513321],
            zoom: 8,
            projection: 'EPSG:4326'
        }),
        target: 'map'
    });
</script>

注释对代码进行了很好的说明,但有两点需要进一步说明:

  • 加载矢量图使用的sourceol.source.Vector, layer是ol.layer.Vector,不要错误的使用。
  • 加载代码之所以这么简单,是因为OpenLayers 3内置了对应矢量地图格式的解析类,比如ol.format.GeoJSON。 它们都位于包ol.format下面,可以在API官方文档中查询得到。 如果是shapefile这种不支持的,则需要自己解析。 解析后,矢量地图都会转换为对应于OpenLayer s 3中的feature。 所以,当加载完成后,可以通过sourcegetFeatures方法来获取所有的矢量图形。
  • 需要注意坐标系,因为.geojson文档里用的是和当前地图用的不一样的坐标系。

对于不同格式的矢量地图,会有相应的一些不同用法,下面就针对一些大家经常会遇到的问题,给出相应的实例,用以说明。