官网给的解释:处理HTML元素的网格的泛型类。这是所有tile层的基类,并替换TileLayer.Canvas。GridLayer可以扩展为创建一个HTML元素的网格,比如。GridLayer将为您处理创建和动画这些DOM元素。

放张图

一、createtile方法

1、同步使用

要创建自定义层,请扩展GridLayer并实现createTile()方法,该方法将通过一个带有x、y和z(缩放级别)坐标的点对象来绘制瓦片。

代码示例:

var CanvasLayer = L.GridLayer.extend({createTile: function(coords){// create a <canvas> element for drawingvar tile = L.DomUtil.create('canvas', 'leaflet-tile');// setup tile width and height according to the optionsvar size = this.getTileSize();tile.width = size.x;tile.height = size.y;// get a canvas context and draw something on it using coords.x, coords.y and coords.zvar ctx = tile.getContext('2d');// return the tile so it can be rendered on screenreturn tile;}
});

2、异步使用

Tile创建也可以是异步的,这在使用第三方绘图库时很有用。绘制完成后,可以将其传递给done()回调。

代码示例:

var CanvasLayer = L.GridLayer.extend({createTile: function(coords, done){var error;// create a <canvas> element for drawingvar tile = L.DomUtil.create('canvas', 'leaflet-tile');// setup tile width and height according to the optionsvar size = this.getTileSize();tile.width = size.x;tile.height = size.y;// draw something asynchronously and pass the tile to the done() callbacksetTimeout(function() {done(error, tile);}, 1000);return tile;}
});

二、Demo

主要实现经纬度的展示

<!DOCTYPE html>
<html>
<head><title>GridLayer</title><meta charset="utf-8" /><link rel="stylesheet" href="https://unpkg.com/leaflet@1.0.1/dist/leaflet.css" /><style>body {padding: 0;margin: 0;}html, body, #map {height: 100%;width: 100%;}</style>
</head>
<body><div id="map"></div><script src="https://unpkg.com/leaflet@1.0.1/dist/leaflet.js"></script><script>var map = new L.Map('map', { center: [39.92,116.46], zoom: 10 ,CRS:L.CRS.EPSG4326});var tiles = new L.GridLayer();tiles.createTile = function (coords) {var tile = L.DomUtil.create('canvas', 'leaflet-tile');var ctx = tile.getContext('2d');var size = this.getTileSize()tile.width = size.xtile.height = size.y// 将切片号乘以切片分辨率,默认为256pixel,得到切片左上角的绝对像素坐标var nwPoint = coords.scaleBy(size)// 根据绝对像素坐标,以及缩放层级,反投影得到其经纬度var nw = map.unproject(nwPoint, coords.z)//从该切片左上角开始画,画一个切片大小的无填充矩形ctx.strokeRect(nwPoint.x, nwPoint.y,size.x,size.y)ctx.fillStyle = 'black';//x,y,z显示ctx.fillText('x: ' + coords.x + ', y: ' + coords.y + ', zoom: ' + coords.z, 50, 60);//经纬度坐标ctx.fillText('lat: ' + nw.lat + ', lon: ' + nw.lng, 50, 80);//线的颜色ctx.strokeStyle = 'black';//这是canvans的方法ctx.beginPath();ctx.moveTo(0, 0);ctx.lineTo(size.x - 1, 0);ctx.lineTo(size.x - 1, size.y - 1);ctx.lineTo(0, size.y - 1);ctx.closePath();ctx.stroke();return tile;}L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {attribution: 'Map data &copy; <a href="http://www.osm.org">OpenStreetMap</a>'}).addTo(map)tiles.addTo(map)</script>
</body>
</html>

三、总结

主要是运用createTile方法的同步方式,加载网格,通过canvas进行绘画,代码很简单。

转载于:https://www.cnblogs.com/tuboshu/p/10752337.html

LeaFlet学习之GridLayer扩展相关推荐

  1. 学习 PHP SOAP 扩展的一些笔记

    对 SOAP 的相关学习就先告此一段落,这是最后一篇文章用来记录下学习过程中的一些笔记和心得. 前面三篇文章分别是: <SOAP 介绍> <SOAP Web 服务介绍> < ...

  2. 学习Kotlin(六)扩展与委托

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  3. Leaflet学习教程+笔记(Mars2D)

    Leaflet学习(Mars2D) 一 快速开始 中文教程–小白必备 中文API文档–学会查阅文档 准备工作-引入文件 <link rel="stylesheet" href ...

  4. 【博客507】学习阿里巴巴如何扩展Kubernetes 调度器支持 AI 和大数据作业

    学习阿里巴巴如何扩展Kubernetes 调度器支持 AI 和大数据作业

  5. 控制算法学习 四、扩展卡尔曼滤波EKF

    控制算法学习 四.扩展卡尔曼滤波EKF 前言 非线性系统 状态/观测方程线性化 扩展卡尔曼滤波EKF 后记 前言 经典卡尔曼滤波的使用场景是线性系统,但现实应用时,大多数系统都是非线性的.扩展卡尔曼滤 ...

  6. 对路径的访问被拒绝怎么办_学习了解ACL—扩展访问控制列表,就在网工知识角...

    学网络,就在IE-LAB 国内高端网络工程师培养基地 基于ACL过滤telnet和特定的网段信息 什么是访问控制列表(ACL)? 应用于路由器接口的指令列表,用于指定哪些数据包可以接收转发,哪些数据包 ...

  7. spring security3.x学习(15)_扩展JdbcDaoImpl。

    2019独角兽企业重金招聘Python工程师标准>>> 本文为转载学习 原文链接:http://blog.csdn.net/dsundsun/article/details/1184 ...

  8. 【我的第一个目标检测课题】3、Retinanet网络的学习与实现+扩展

    2021.1.7下午记 大家新年好~ 距离上次写这个课题的博客已经是去年12.30的时候了,是想趁热打铁赶快写的,无奈1.5/1.6有两门考试,便只好赶去复习暂时搁置了.现在终于考完试,而且也马上到了 ...

  9. 【编译器学习】EBNF扩展巴科斯范式学习总结

    EBNF扩展巴科斯范式学习总结 是一种描述计算机编程语言且与上下文无关(没有前置条件)的语法的一种语法表达式.简而言之,就是描述语言语法的规范. EBNF的基本语法形式如下: 左手边(LeftHand ...

最新文章

  1. 参加过java培训机构的学员如何找出路
  2. Gradle 设置本地maven
  3. 华为鸿蒙系统和苹果系统哪个更好,华为鸿蒙OS和安卓、IOS相比有哪些特色 关于鸿蒙OS不得不知的十个问题...
  4. 【转贴】ASP.NET 3.5中的ListView控件和DataPager控件
  5. Anaconda安装apscheduler库的步骤
  6. Sublime Text自定义插入当前时间的插件
  7. 手动修改VirtrualBox虚拟机的操作系统时间——WinXP为例
  8. 网页效果图设计之色彩配色索引
  9. 工厂模式,java描述
  10. Splunk健康检查orphaned searches
  11. 利用QQ群推广网站的经验分享
  12. 万洲金业平台上炒黄金亏损了怎么办?
  13. 怎样用电池给铁锅作防锈
  14. ubuntu20.10安装电子书软件calibre错误处理
  15. 一枚小江湖视角下的 2020
  16. 华为计算机单机pc游戏软件,华为应用市场pc端
  17. 这10个奇妙的Python库,你必须要试试!
  18. HTTP Error 503. The service is unavailable
  19. StreamReader和StreamWriter 的使用
  20. Scrapy框架之Crawlspider的使用

热门文章

  1. 将solr安装到tomcat里
  2. 深究AngularJS——ng-checked(回写:带真实案例代码)
  3. js日历代码_JS无形装逼,最为致命
  4. 群晖linux怎么进入u盘,黑群辉直接更改启动u盘的sn、mac等信息
  5. java解析lrc_java中用正则表达式解析LRC文件
  6. 电脑教程从入门到精通_HALCON机器视觉软件零基础入门学习到精通实用教学视频教程...
  7. 社死,客户现场网络一直ping不通咋办?
  8. KubeVela 正式开源:一个高可扩展的云原生应用平台与核心引擎
  9. ftp服务器压缩文件,ftp压缩服务器文件
  10. html5判断text文本是数字,JavaScript常用判断写法大全