WebGIS开发系列教程(5):Openlayers高级功能

本系列教程为webgis二维开发入门openlayers零基础小白学习教程,本篇为第五篇。

完整版可以查看文末链接下载。

1.地图标注功能

地图标注是将空间位置信息点与地图关联,通过图标、窗口等形式把相关的信息展现到地图上。地图标注也是WebGIS中比较重要的功能之一,在大众应用中较为常见。

地图标注的基本原理

获取标注点的空间位置(X、Y逻辑坐标),在该位置上叠加显示图标(或包含信息的小图片),必要时以窗口的形式显示详细信息。其中,在获取标注点X,Y的逻辑坐标时要注意,通过鼠标在地图上单击可以得到窗口坐标,一般需要转换为逻辑坐标。

基本API:Openlayers5提供了实现地图标注功能的各类控件与方法,主要是基于叠加层ol.Overlay并结合HTML的网页控件实现的。由于Openlayers5使用独立的样式设置矢量要素信息,提供的ol.style.Icon可以为矢量点图片标识,ol.style.Text类则可以直接设置矢量要素的文本信息。

地图标注的表现形式可以分为3种:

简单的图文标注,冒泡信息窗口标注,聚合标注

1.1图文标注

图片标注是使用图标展现标注点的信息,它是最简单的地图标注形式,也是其他自定义标注的基础。图文标注是通过文本和图标来展现标注点的信息,是一种基本的地图标注形式。

实现思路:

(1)图片标注功能一般是使用Openlayers5的ol.Overlay结合HTML的一个div或img标签元素来实现的。

(2)文本标注的实现方式与图片标注类似,首先创建一个ol.Overlay对象,然后关联添加的HTML的text或a标签元素来实现

(3)可以使用加载矢量点的方式实现图文标注。设置点要素的图形样式ol.style.Icon,文字样式为ol.style.Text

★通过矢量点的方式添加北京市(直接创建一个矢量点要素,通过map.addLayer()加载即可,不需要承载的html元素):

①通过经纬度创建需要的点

var beijing = ol.proj.fromLonLat([116.28, 39.54]);   //北京点
var wuhan = ol.proj.fromLonLat([114.21, 30.37]);    //武汉点

②加载天地图

 //实例化Map对象加载地图,默认底图加载MapQuest地图
    var map = new ol.Map({
        layers: [
            new ol.layer.Tile({
                title: "天地图矢量图层",
                source: new ol.source.XYZ({
                    url: "http://t0.tianditu.com/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=b74ca9a5dbd96fab6338ab9d239180fb",
                    wrapX: false
                })
            }),
            new ol.layer.Tile({
                title: "天地图矢量图层注记",
                source: new ol.source.XYZ({
                    url: "http://t0.tianditu.com/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=b74ca9a5dbd96fab6338ab9d239180fb",
                    wrapX: false
                })
            })
        ],
        //地图容器div的ID
        target: 'mapCon',
        view: new ol.View({
            //地图初始中心点
            center: [130, 39],
            maxZoom: 19,
            minZoom: 1,
            zoom: 1
        })
    });

③实例化矢量Vector要素,通过矢量图层的方式加载到地图容器中

 //实例化Vector要素,通过矢量图层添加到地图容器中
    var iconFeature = new ol.Feature({   //创建一个矢量要素
        geometry: new ol.geom.Point(beijing),    //为点要素
        //名称属性
        name: '北京市',
        //大概人口数(万)
        population: 2115
    });
    iconFeature.setStyle(createLabelStyle(iconFeature));   //设置样式
    //矢量标注的数据源
    var vectorSource = new ol.source.Vector({
        features: [iconFeature]
    });
    //矢量标注图层
    var vectorLayer = new ol.layer.Vector({
        source: vectorSource
    });
    map.addLayer(vectorLayer);    //通过map.addLayer()动态添加图层

其中创建样式的函数为:

/**
     * 创建矢量标注样式函数,设置image为图标ol.style.Icon
     * @param {ol.Feature} feature 要素
     */
    var createLabelStyle = function (feature) {
        return new ol.style.Style({
            image: new ol.style.Icon(
                /** @type {olx.style.IconOptions} */
                ({
                    anchor: [0.5, 60],
                    anchorOrigin: 'top-right',
                    anchorXUnits: 'fraction',
                    anchorYUnits: 'pixels',
                    offsetOrigin: 'top-right',
                    // offset:[0,10],
                    //图标缩放比例
                    // scale:0.5,
                    //透明度
        
  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值