OpenLayers3+OpenStreetMap初探

首先到http://www.openlayers.org/下载OpenLayers,我下的版本是v3.4

网上很多中文教程基本都是2的,3的比较少,只能慢慢摸索,而且我是个web、js小白。

最开始接触肯定要从它的quikstart开始,打开doc下的quickstart.html,下面是它给的事例,直接复制到html里就可以运行,.js是直接连到网站的

<!doctype html>
<html lang="en">
  <head>
    <link rel="stylesheet" href="http://openlayers.org/en/v3.4.0/css/ol.css" type="text/css">
    <style>
      .map {
        height: 400px;
        width: 100%;
      }
    </style>
    <script src="http://openlayers.org/en/v3.4.0/build/ol.js" type="text/javascript"></script>
    <title>OpenLayers 3 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.MapQuest({layer: 'sat'})
          })
        ],
        view: new ol.View({
          center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
          zoom: 4
        })
      });
    </script>
  </body>
</html>
因为要用的是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生成瓦片数据,所以是直接从网络获取的资源。

    <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.transform([121.50, 31.22], 'EPSG:4326', 'EPSG:3857'),
                zoom: 10
            })
        })
    </script>
重点在这里,ol.View负责地图的中心点,放大,投影之类的设置。
view: new ol.View({
                center: ol.proj.transform([121.50, 31.22], 'EPSG:4326', 'EPSG:3857'),
                zoom: 10
            })
地理空间数据可能来自各种坐标参照系,一个数据集可能是以度为单位的地理(经纬)坐标系,另一个可能是以米为单位的投影坐标系,对坐标系的全面讨论超出了本实践的范围,但了解其基本概念是很重要的。
OpenLayers3需要知道所使用数据的坐标系,在内部,由ol.proj.Projection对象展现,ol.proj命名空间中的transform方法使用字符串表示坐标参考系(上述示例中的"EPSG:4326"以及"EPSG:3857")。 
OpenStreetMap瓦片数据是墨卡托投影,因此,我们需要使用墨卡托坐标了设置初始化时的中心点。由于一个地方的地理坐标相对来说更容易知道,使用ol.proj.transform方法将地理坐标系("EPSG:4326")转化为墨卡托坐标系("EPSG:3857")。

OpenLayers3包含地理坐标系与墨卡托坐标系间相互转换的方法,因此我们可以使用ol.proj.transform方法而不需要任何额外的工作。如果想要使用其他投影的数据,再使用ol.proj.transform方法之前需要添加一些额外的信息。

那么,我们需要修改的只是坐标值和zoom的大小,以我要显示上海市地图为例,在OpenStreetMap官网中获取上海市的位置,如图

10就是zoom的值;我最开始是ol.proj.transform([31.22, 121.50]这样写的,但是发现显示不出来地图了,于是突然想到把x和y的位置交换一下,发现就成功了,也是奇怪。


因为只需要显示上海市地图,所以找了半天怎么才能设定地图范围边界

    <script type="text/javascript">
        var map = new ol.Map({
            target: 'map',
            layers: [
          new ol.layer.Tile({
              source: new ol.source.OSM(),
              extent: ol.proj.transformExtent([120.50, 30.79, 122.50, 31.64], 'EPSG:4326', 'EPSG:3857')
          })
        ],
            view: new ol.View({
                center: ol.proj.transform([121.50, 31.22], 'EPSG:4326', 'EPSG:3857'),
                zoom: 10,
                minZoom: 10
            })
        })
    </script>
extent: ol.proj.transformExtent([120.50, 30.79, 122.50, 31.64], 'EPSG:4326', 'EPSG:3857') 将图层渲染范围限定在这个指定的经纬度内
minZoom: 10 设定最小的zoom值

最后显示结果如下,有一个问题是如果拖动地图的话,超过了渲染的范围,会有白边显示(如下图左边),这个还不知道怎么解决,如果有知道的人麻烦告知一下,谢谢!



-----------------------------------------------------------------------------------------------------------

2016.04.05

版本ol3.15.0

关于上面的问题,把extent设在view中即可

当您发现OpenStreetMap的网址打不开时,可以尝试以下解决方法。首先,您可以使用XYZ方式来加载瓦片数据,具体步骤如下: 1. 使用XYZ方式调用URL来加载瓦片数据。URL的地址一级域名不再采用openstreetmap.org而是更换为openstreetmap.de,因为openstreetmap.de并没有被污染,调用速度上差不太多。 2. 在Vue OpenLayers中解决OpenStreetMap地图***加修改一点点,就能加载出来OpenStreetMap地图。 此外,还可以尝试使用ArcGIS Editor for OpenStreetMap插件10.2版本来访问OpenStreetMap。该插件可以通过ArcGIS的toolbox来使用,可以从官网上找到并进行安装。 综上所述,当OpenStreetMap的网址打不开时,您可以尝试使用XYZ方式加载瓦片数据,修改URL的路径来加载地图,或者使用ArcGIS Editor for OpenStreetMap插件来访问OpenStreetMap。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [173:vue+openlayers:解决国内openstreetmap地图加载不出来的问题(代码示例)](https://blog.csdn.net/cuclife/article/details/127787652)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Arcgis editor for openstreetmap插件10.2版本](https://download.csdn.net/download/weixin_41997593/12148236)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值