首先到http://www.openlayers.org/下载OpenLayers,我下的版本是v3.4
网上很多中文教程基本都是2的,3的比较少,只能慢慢摸索,而且我是个web、js小白。
最开始接触肯定要从它的quikstart开始,打开doc下的quickstart.html,下面是它给的事例,直接复制到html里就可以运行,.js是直接连到网站的
OpenLayers 3 example
My Map
因为要用的是OpenStreetMap的数据,就对例子进行了下修改,其中获取资源的方式很多,有ol.source.TileWMS、ol.source.XYZ、ol.source.OSM这三种,具体可以参加 http://wenku.baidu.com/link?url=z4xsLjTaOtl4Qg9YkwvBJVkxisyvF1jYKtd4XijnitnKBp_i-ouiYdoj1uARKI6WF5QQ9AzN1pNQCJ0mHeZ3VBU3ZClv1brArYBf8sxd95O的13页,为了快速熟悉ol,我直接用的是ol.source.OSM。
下面是对示例的修改,锁定上海市为中心,虽然之前下载过了上海市的osm,但是还没有用Maperitive生成瓦片数据,所以是直接从网络获取的资源。
重点在这里,ol.View负责地图的中心点,放大,投影之类的设置。
view: new ol.View({
center: ol.proj.transform([121.50, 31.22], 'EPSG:4326', 'EPSG:3857'),
zoom: 10
})
地理空间数据可能来自各种坐标参照系,一个数据集可能是以度为单位的地理(经纬)坐标系,另一个可能是以米为单位的投影坐标系,对坐标系的全面讨论超出了本实践的范围,但了解其基本概念是很重要的。
OpenLayers3包含地理坐标系与墨卡托坐标系间相互转换的方法,因此我们可以使用ol.proj.transform方法而不需要任何额外的工作。如果想要使用其他投影的数据,再使用ol.proj.transform方法之前需要添加一些额外的信息。
那么,我们需要修改的只是坐标值和zoom的大小,以我要显示上海市地图为例,在OpenStreetMap官网中获取上海市的位置,如图
10就是zoom的值;我最开始是ol.proj.transform([31.22, 121.50]这样写的,但是发现显示不出来地图了,于是突然想到把x和y的位置交换一下,发现就成功了,也是奇怪。
因为只需要显示上海市地图,所以找了半天怎么才能设定地图范围边界
extent: ol.proj.transformExtent([120.50, 30.79, 122.50, 31.64], 'EPSG:4326', 'EPSG:3857') 将图层渲染范围限定在这个指定的经纬度内
最后显示结果如下,有一个问题是如果拖动地图的话,超过了渲染的范围,会有白边显示(如下图左边),这个还不知道怎么解决,如果有知道的人麻烦告知一下,谢谢!
-----------------------------------------------------------------------------------------------------------
2016.04.05
版本ol3.15.0
关于上面的问题,把extent设在view中即可