openlayers是一个开源免费的js库,用于在网页中实现地图的动态显示和交互。一起看看官方对openlayers的介绍。

OpenLayers makes it easy to put a dynamic map in any web page. It can display map tiles, vector
data and markers loaded from any source. OpenLayers has been developed to further the use of
geographic information of all kinds. It is completely free, Open Source JavaScript.

需要注意的是openlayers2(以下简称ol)和ol3以上的版本有很大的差异,以最新版5.2.0为例,展开对ol的学习。
为了方便,下载ol 5.2.0,将ol.js和ol.css解压出来。

首先,引用ol.css和ol.js,因为我们已经下载了ol库,所以使用ol的本地路径就行了,如果网络方便,可以直接在从ol网站获取。

<script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.2.0/build/ol.js"></script>
<link rel="stylesheet" href="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.2.0/css/ol.css" type="text/css">

1.Map的创建

首先从一个例子入手:

<!doctype html>
<html lang="en"><head><link rel="stylesheet" href="js/ol/ol.css" type="text/css"><style>.map {height: 400px;width: 100%;}</style><script src="js/ol/ol.js"></script><title>OpenLayers example</title></head><body><h2>My Map</h2><div id="map" class="map"></div><script type="text/javascript">var map = new ol.Map({target: 'map',layers: [new ol.layer.Tile({source: new ol.source.OSM()})],view: new ol.View({center: ol.proj.fromLonLat([103.73,36.03]),zoom: 8,minZoom:5,maxZoom:12})});</script></body>
</html>

关于这段代码:

  1. 这段代码的作用是在网页是显示一个地图;
  2. 和leaflet一样,地图必须显示在一个div中,因此首先创建一个div;
  3. target:'map' 指定了地图要显示在id为map的div中;
  4. new ol.layer.Tile({ source: new ol.source.OSM() }) 定义了一个图层,数据来源是OpenStreetMap提供的切片数据;
  5. new ol.View({ center: ol.proj.fromLonLat([37.41, 8.82]), zoom: 4 }) 定义了地图的中心位置,范围和层级。
  6. ol.proj.fromLonLat([37.41, 8.82]) 是将一个经纬度坐标转换成当前地图投影的坐标;
 fromLonLat(coordinate, opt_projection)coordinate:经纬度坐标projection:目标投影,默认Web Mercator, 即 'EPSG:3857'
  1. 一个Map,必须有target,layers和view。

上面涉及的地图组成部分有:

  • 地图(Map),对应的类是ol.Map , 它就是第一个入口。
  • 图层(Layer),对应的类是ol.layer,ol5有多种多样用于不同业务的图层,每一种图层在实现上都对应于一个类,放在包ol.layer下面,的ol.layer.Tile就是其中的一种。多个layer可以重叠在一起,相互之间互不干扰。layer相当于一个放置数据的容器,一个Map中可以有0-n个layer,Map类中有一个layers的成员变量并且它适用于此容器,为渲染的地图提供数据。
  • 视图(View),对应的类是ol.View, 控制地图显示的中心位置,范围,层级等。一个Map只能有0或1个View。
  • 数据源(Source),它是和图层一一对应的,ol 5存在多种不同的数据源,每一种在实现上也对应于一个具体的类,它们都放在包ol.source下面,ol.source.OSM就是其中的一种。ol5支持多种多样在线或离线的数据源;可以是静态图或者瓦片图;也可以是栅格化的或者矢量的。如果你想在地图上加载某种格式的数据,或者某种服务提供的数据,都可以优先查看一下ol 5是否已经支持了。详情可以在官网查看Source和Layer。

对比leaflet显示一个地图的过程,两者的代码确实有比较大的差异,但是其思路是一样的:
1.创建放置地图的div;
2.从某个数据源获得数据创建layer;
3.确定地图的中心位置,层级;
4.创建map,将数据渲染到网页中。

2.Map的属性和方法

2.1 Map的常见属性
  • controls 地图控件;
  • target 地图容器;
  • layers 图层;
  • view 视图
  • overlays 叠加图层
2.2 Map的常见方法
  • add/sControl()添加控件
  • addLayer()添加图层
  • addOverlay()添加叠加图层
  • getEventCoordinate()触发事件的坐标
  • getEventPixel()触发事的像素位置
  • getTarget()得到Map所有的容器
  • getLayers()、getOverlys()、getControls()、getView()
  • setView()、setTarget()
  • removeLayer()、removeOverlay()、removeControl()

3 Map的事件

  • click 点击事件,双击将两个触发该事件
  • dblclick 双击事件
  • moveend 地图被移动后触发
  • movestart 地图开始移动时触发
  • postrender 地图被渲染后触发
  • singleclick 单击事件

监听地图事件:on(type,listener)

只监听一次:once(type,listener)

注销监听:un(type,listener)

如果要在上面地图中实现单击显示经纬度功能:

map.on('click',function (e) {var coor=e.coordinatevar lonlat=ol.proj.transform(coor,'EPSG:3857',"EPSG:4326")alert("lon:"+lonlat[0].toFixed(2)+",lat:"+lonlat[1].toFixed(2));
})

转载于:https://www.cnblogs.com/xtfge/p/9949059.html

openlayers基础(一)——Map相关推荐

  1. OpenLayers基础

    OpenLayers基础 基本概念:Map((Layer(Source),View())) **Map:**是OpenLayers的核心部分,被放到target容器中. 例如: var map = n ...

  2. openlayers基础系列教程(一)

    openlayers基础系列教程(一) http://www.openlayers.cn/portal.php?mod=view&aid=19

  3. OpenLayers基础:多方底图

    时下的OpenLayers版本为v2.10,不仅可以支持OGC的标准服务如WMS.WFS等,还支持其它地图服务商如GoogleMaps,VirtualEarth,YahooMaps等,如下为OpenL ...

  4. OpenLayers基础教程——地图交互之绘制图形

    1.前言 前面的博客其实已经介绍过了如何在openlayers中绘制图形,不过那是基于已有的坐标进行绘制.很多时候,用户往往需要使用鼠标自行在地图上进行图形绘制,这就涉及到了openlayers中的地 ...

  5. Java基础——常用Map的实现细节

    2019独角兽企业重金招聘Python工程师标准>>> Java基础--Map HashMap 数据结构: 数组 + 单链表 transient Entry[] table; // ...

  6. go where 不等于_go基础之map迭代(四)

    写在之前 在文章<go基础之map-写在前面(一)>的示例代码 for k, v := range m3 { fmt.Println(k, v)} 就是go的map的迭代方法,查看该代码的 ...

  7. 【CXY】JAVA基础 之 Map

    概述: 1.键值对,key-value,具有映射关系的数据 2.Map的key不允许重复,value可以重复 3.Map里的key类似一个Set,甚至可以通过map.keySet()拿到key的Set ...

  8. 【ES6基础】Map与WeakMap

    开篇 ES6里除了增加了Set(集合)类型外(笔者在这篇文章<Set与WeakSet>有过介绍),今天的这篇文章笔者将继续介绍ES6引入的新类型--Map(映射类型)和其对应的弱类型Wea ...

  9. Java基础之map总结

    map的基础理解 话不多说,先上图,可以这样简单的对容器中的map进行分类: 我们在Java开发中,除了最常用的基本数据类型和String对象之外,也会经常用到集合类.集合类中存放的都是对象的引用,而 ...

最新文章

  1. sql语句没错 mysql.data.dll类型的异常_未处理的“System.Data.SqlClient.SqlException”类型的异常出现在 system.data.dll 中。...
  2. 人力资源学python有意义吗-python爬虫抖音 个人资料 仅供学习参考 切勿用于商业...
  3. oracle nodemanage,Linux 下Weblogic集群搭建-04通过nodemanage进行节点的启动与关闭
  4. 未对销售组织 XXX 分销渠道 00 语言 ZH 定义
  5. boost::rotate相关的测试程序
  6. 03SpringMVC,Spring,Hibernate整合(Date时间转换)
  7. SAP Spartacus的登录页面的用户名显示逻辑
  8. 职教云自动签到PHP接口版
  9. arc073F Many Moves
  10. I.MX6 make menuconfig OTG to slave only mode
  11. 为什么说车联网安全将成为热门产业
  12. 未经许可,请勿擅自引用本博客内的原创作品
  13. 使用Markdown编写手册
  14. bug引发的惨案,拼多多100元话费只需4毛钱,损失上千亿……
  15. Ubuntu各个版本下载和安装
  16. 全民一起VBA实战篇 专题2 第二回 选择法轻松上手,双循环巧妙排序
  17. Linux---Apache网页优化---网页压缩
  18. 祛湿不能迷信红豆薏米水!
  19. win10安装c语言不兼容,手把手还原win10系统visual c++不兼容的技巧
  20. 【detectron】绘制loss曲线和pr曲线

热门文章

  1. 杭电1254java实现(双bfs 优先队列)
  2. 深究AngularJS——ng-drag、ng-drop
  3. linux 查看sql进程id,根据进程的ID取得该进程的SQL脚本
  4. oracle缩减临时表空间,oracle的临时表空间写满磁盘空间解决改问题的步骤
  5. java rmi 还有用吗_java rmi使用后的感想
  6. 3 v4 中心节点固定_死磕以太坊源码分析之p2p节点发现
  7. Linux入门基础思维导图
  8. Dubbo-go 源码笔记(一)Server 端开启服务过程
  9. 鸿蒙2.0升级计划名单,鸿蒙OS 2.0适配 计划-升级名单
  10. navicat 怎么调试存储过程_Navicat 执行存储过程