IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> OpenLayers 的 helloworld 以及加载天地图图层示例 -> 正文阅读

[JavaScript知识库]OpenLayers 的 helloworld 以及加载天地图图层示例

OpenLayers 教程

今天开始不定期发布 openlayers 教程,主要是平时项目中用的较多的功能方法的总结,广大GISer可以根据这些文章对 openlayers 进行二次封装提供给自己项目使用。

初识 OpenLayers

来自 官方 的翻译:一个高性能的、功能丰富、可以满足你对地图所有需求的框架。

OpenLayers 很容易在任何网页加载动态地图。它可以展示任何资源的地图瓦片、矢量数据和marker点。

OpenLayers 的开发是为了进一步加载各种类型的地理信息数据。它是完全免费的开源 JavaScript,基于 2-clause BSD 许可(也就是 FreeBSD)发布的。

这里奉上:尚在更新中的 Openlayers 翻译

OpenLayers 的 helloworld

OpenLayers 官方的教程简单明了,一般都可以直接运行,我这里就直接粘过来,加点注释。

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <!--注意:openlayers 原版的比较慢,这里引起自己服务器版-->
    <link rel="stylesheet" href="http://openlayers.vip/examples/css/ol.css" type="text/css">
    <style>
       /* 注意:这里必须给高度,否则地图初始化之后不显示;一般是计算得到高度,然后才初始化地图 */
      .map {
        height: 400px;
        width: 100%;
      }
    </style>
    <!--注意:openlayers 原版的比较慢,这里引起自己服务器版-->
    <script src="http://openlayers.vip/examples/resources/ol.js"></script>
    <title>OpenLayers example</title>
  </head>
  <body>
    <h2>My Map</h2>
    <!--地图容器,需要指定 id -->
    <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([37.41, 8.82]),
          // 缩放
          zoom: 4
        })
      });
    </script>
  </body>
</html>

openlayers 加载天地图底图

地图初始化方法跟上边一样,只是使用天地图底图,这里提供一个工具类:

先麻烦可以直接下载:Openlayers加载天地图

使用天地图资源需要先 申请天地图tk

// 请使用自己的tk,笔者这里设置白名单,只有白名单域名才可以访问,否则报403
let TK = '2b7cbf61123cbe4e9ec6267a87e7442f';

// 获取天地图地址
let getUrl = function (type) {
    let url = 'http://t{randomNumber}.tianditu.gov.cn/DataServer?T={type}&x={x}&y={y}&l={z}';
	// 这里用随机数获取地址
    url = url.replace('{randomNumber}', Math.round(Math.random() * 7).toString());
    url = url.replace('{type}', type);
    url = url + "&tk=" + TK;
    return url;
}

// 获取分辨率数组
let getResolutionsExpert = function (size) {

    let resolutions = new Array(18);
    let matrixIds = new Array(18);
    for (let z = 0; z < 19; ++z) {
        //分辨率
        resolutions[z] = size / Math.pow(2, z);
        //等级
        matrixIds[z] = z;
    }
    return resolutions;
}

let getOptional = function (url) {

	// 投影坐标系
    let projection = ol.proj.get('EPSG:4326');
    let projectionExtent = projection.getExtent();
    let size = ol.extent.getWidth(projectionExtent) / 256;

    return new ol.source.XYZ({
        crossOrigin: 'anonymous',
        wrapX: true,
        //切片xyz获取方法
        tileUrlFunction: function (tileCoord) {
            const z = tileCoord[0];
            const x = tileCoord[1];
            let y = tileCoord[2];
            let completeUrl = url.replace('{z}', z.toString())
                .replace('{y}', y.toString())
                .replace('{x}', x.toString());
            return completeUrl;
        },
        //坐标系
        projection: projection,
        tileGrid: new ol.tilegrid.TileGrid({
            origin: ol.extent.getTopLeft(projectionExtent),
            tileSize: [256, 256],
            //分辨率数组
            resolutions: getResolutionsExpert(size)
        }),
    })
}

// const type = 'w'; // 墨卡托
let TYPE = 'c';  // WGS84
//影像图参数
let IMG_C = 'img_c' + TYPE;
let CIA_C = 'cia_c' + TYPE;
let IBO_C = 'ibo_c' + TYPE;

//矢量图
let VEC_C = 'vec_' + TYPE;
let CVA_C = 'cva_' + TYPE;
//地形图
let TER_C = 'ter_' + TYPE;

// 影像图
function getIMG_CLayer() {
    let layer = new ol.layer.Tile({
        name: "天地图影像图层",
        source: getOptional(getUrl(IMG_C))
    });
    return layer;
}
// 注记
function getCIA_CLayer() {
    let layer = new ol.layer.Tile({
        name: "天地图影像注记图层",
        source: getOptional(getUrl(CIA_C)),
        zIndex: 1,
    });
    return layer;
}
// 境界
function getIBO_CLayer() {
    let layer = new ol.layer.Tile({
        name: "天地图影像境界图层",
        source: getOptional(getUrl(IBO_C)),
        zIndex: 1,
    });
    return layer;
}

天地图图层在线地址:墨卡托

在线示例

地图初始化:Openlayers helloworld (有的网不能访问谷歌地图资源)

加载天地图底图:Openlayers tianditu

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:22:00  更:2022-02-26 11:26:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:58:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码