[Webgis][地图加载] OpenLayer 的 Hello World

心路历程

成为C++程序员的第五年,从开始的视频结构化,到后来的UI界面加后台,到现在专注做qt,终于写了第一篇博客,这篇博客用来记录学习加载地图显示的历程。

因为项目需求,需要加载并显示地图,一开始在网上搜索,大多数都是百度地图的接口调用,然后就实现了第一版 百度在线地图,但是 百度在线地图 需要申请key,然后软件部署环境也无法联网,于是开始研究如何实现离线地图,离线地图牵扯出了 离线瓦片地图 的概念。而后到处找 百度接口的离线代码,但是一般的百度离线代码都是直接爬取的,基本只改了 离线地图加载的地址,很多图片文件都还是在线,导致使用的时候还得不停的看源码,下载文件替换。其次百度离线地图下载也比较麻烦,大多数能下载到最新地图的软件或者网站都是需要收费的,不收费的下载的地图比较老旧,与现在的地形有明显差别。

然后就引来了另一项需求,软件要支持多种地图显示。于是又开始研究 高德地图 实现,一样从在线接口到找离线接口,下载离线地图,进行高德离线显示,将百度地图的那一套用高德API重新实现了一遍。

然后就有了第三项任务,电子海图实现,在研究电子海图的过程中,了解到了 OpenLayer,才知道有好多第三方库,可以实现 webgis (在这里也了解到了 webgis 的概念),同时高德百度地图的API其实是不开源的,很难更新,且两种地图接口不一致。OpenLayer 是我了解到的第一个开源 webgis,也是比较适合我需求的一个,相对轻量级的leaflet来说。然后电子海图的研究就暂时终止了,开始研究 OpenLayer 去实现高德百度地图的加载显示。

开始实现

上面啰嗦这么多,主要是聊一下我选择 OpenLayer 的历程,给大家做个参考,下面让我们来一个 OpenLayer 版本的 Hello World。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.jsdelivr.net/npm/ol@v8.2.0/dist/ol.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol@v8.2.0/ol.css">
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

    <style>
        html { height: 100% }
        body { height: 100%;margin: 0px;padding: 0px }
        #container{
            width: 100%;
            height: 100%;
            overflow: hidden;
            position: absolute;
        }
    </style>

    <title>Hello World</title>

</head>
<body>

    <div id="container"></div>
    <script>
        // 核心图层layer
        AMapLayer = new ol.layer.Tile({
            // 每个图层有对应的数据源(Source)
            source: new ol.source.XYZ({
                // 该url为高德瓦片地图地址
                url:'https://wprd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'
            })
        });
        // 把整个地图看作一个容器(Map)
        var map = new ol.Map({
            target: 'container',
            // 核心为地图图层(Layer)
            layers: [AMapLayer], 
            // 并由地图视图(View)进行地图表现
            view: new ol.View({
                //设定默认坐标系
                projection: 'EPSG:3857', 
                //设定中心点,因为默认坐标系为 3587,所以要将我们常用的经纬度坐标系4326 转换为 3587坐标系
                center: ol.proj.transform([120.266053,31.550228], 'EPSG:4326', 'EPSG:3857'), 
                // 默认显示级别,相当于瓦片地图的 Z 级别
                zoom: 5,
                // 最小显示级别
                minZoom:3, 
                // 最大显示级别
                maxZoom:19
            })
        });

    </script>
</body>
</html>

在这里插入图片描述

上面实现的是高德地图的在线显示,因为百度地图有自己专用的坐标系 BD09,使用 Openlayer 实现比较麻烦,而本文主要还是记录 Openlayer 使用,暂时就不做多地图显示了,但是下一节会记录下 多种地图形式的 加载显示,包括 普通地图,卫星地图,卫星路网混合地图。

  • 29
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值