基于CanvasLabel的Leaflet矢量数据免切片属性标注实践

这篇具有很好参考价值的文章主要介绍了基于CanvasLabel的Leaflet矢量数据免切片属性标注实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、Leaflet.CanvasLabel 

1、开源地址

2、设置参数说明 

二、组件集成

1、新建html文件

2、声明样式

3、定义矢量文本渲染器

4、定义地图

5、添加矢量数据

6、最终效果

 总结


前言

        在一般的业务场景中,针对小量的矢量数据,比如POI兴趣点、线数据、面数据等,可以直接以空间图形的方式之间展示,以Leaflet为例,采用Point,PolyLine等,但是一般的地图组件是不带中文标注的。除了采用原生渲染组件外,可以采用矢量瓦片、png瓦片等方式。关于矢量瓦片和png瓦片的技术生成方案,可以采用具体的技术。具体的生成技术,以后可以专门写一些相应博客进行阐述。

        本文使用的组件的使用场景是,在矢量数据免切片的情况下,将点数据进行点地图展示,同时将矢量数据的属性作为标注在地图上展示出来。这都可以是动态配置的,相对于静态预切技术,使用这种方式可以实现最大的用户灵活度,根据业务场景需要灵活定制。

        本文将重点介绍Leaflet.CanvasLabel插件,然后介绍插件的属性,其次讲解和Leaflet进行结合使用生成一个可展示的例子,通过实例结合代码的方式进行讲解,让您更好的掌握这款插件。

一、Leaflet.CanvasLabel 

        Leaflet-CanvasLabel 用于在矢量数据上显示标签,样式设置基于Canvas标准,还提供了偏移,缩放,旋转,指定显示位置等设置参数。同时为了避免标签重叠,插件隐藏了一些标签,通过参数`collisionFlg`为`false`禁用碰撞检测。显示顺序为 collisionFlg=false优先collisionFlg=true,zIndex大的优先zIndex小的。

1、开源地址

        Leaflet.CanvasLabel的开源地址为leaflet-canvas-label。

基于CanvasLabel的Leaflet矢量数据免切片属性标注实践,leaflet,CavasLabel,Leaflet中文标注实践

2、设置参数说明 

名称 类型 描述
canvas参数 https://www.runoob.com/tags/ref-canvas.html
font="10px sans-serif" 标注文字属性
fillStyle="rgba(0,0,0,1)"
strokeStyle="rgba(0,0,0,1)"
textAlign="center" 文本对其方式,默认居中
textBaseline="middle"
lineWidth=1 Number 线宽,默认1
其他参数
offsetX=0 Number 横坐标偏移(像素)
offsetY=0 Number 纵坐标偏移(像素)
scale=1 Number 放大比例
rotation=0 Number 旋转角度(弧度),可能会导致碰撞检测不准确
text=null String 标注文本内容
minZoom=null Number 最小显示级别
maxZoom=null Number 最大显示级别
collisionFlg=true Boolean 碰撞检测
center=null [lat,lng]|L.LatLng 标注位置,默认为null,会自动计算几何中心
zIndex=0 Number 排序
defaultHeight=20 Number 文本高度,无法自动计算,所以直接传参手动调整

二、组件集成

        这里将详细说明Leaflet.CanvasLabel控件如何在Leaflet中进行使用,这里主要演示线数据和模拟点数据。

1、新建html文件

        新建index2.htm资源文件,在代码中需要引入Leaflet及Leaflet.CanvasLabel控件的js组件。关键源代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Leaflet.CanvasLabel插件,用于显示矢量文本标注</title>
  <link rel="stylesheet" href="/2d/leaflet/leaflet.css" />
  <script src="/2d/leaflet/leaflet.js?v=1.0.0"></script>
</head>

<body>
  <div class="container">
    <div class="map" id="map"></div>
  </div>
  <script src="../dist/leaflet.canvaslabel.js"></script>
</body>

</html>

2、声明样式

<style>
    body {
      font-family: Arial, Helvetica, sans-serif;
    }

    .container {
      margin: 0 auto;
      max-width: 100%;
    }

    .map {
      width: 100%;
      height: 608px;
    }

    .header {
      padding-top: 5px;
    }
  </style>

3、定义矢量文本渲染器

 //矢量文本标签渲染器
    var canvasLabel = new L.CanvasLabel({
      defaultLabelStyle: {
        collisionFlg: true,
        scale: 1,
        strokeStyle: "#000",
        fillStyle: "#fff",
        lineWidth:3
      }
    });

4、定义地图

        定义地图时尤其要注意,与之前的定义地图方式不一样,这里在创建地图对象时需要设置渲染对象,如果不定义将看不到效果, renderer: canvasLabel就是关键之处。

//定义地图
    var map = L.map('map', {
      renderer: canvasLabel
    }).setView([29.40, 117.40], 6);

5、添加矢量数据

        首先添加一些线数据,

//添加矢量数据
    var p = L.polyline(
      [[[34.252676, 108.962402],[33.83392, 109.929199],
      [32.657876, 109.050293],[31.877558, 106.787109],[31.428663, 104.655762],
	  [30.600094, 104.040527],[29.97397, 103.842773],[28.690588, 104.589844],
	  [28.825425, 105.424805],[29.53523, 106.589355],[27.605671, 106.984863],
	  [26.568877, 106.611328],[26.39187, 108.786621],[27.44979, 110.039063]]], {
      labelStyle: {
        text: '西部环线',
        zIndex: 0,
        collisionFlg: false,
        textAlign:'right'
      },
      color: '#fe57a1',
    }).addTo(map);

        再来添加点数据,这里仅演示功能,点坐标采取随机生成1000个点的方式。

for (let i = 0; i < 3000; i++) {
      let latlng = L.latLng(23.95 + Math.random() * 10, 112.40034 + Math.random() * 15);
	  var title = "重要城市" + Math.random();
      let c = L.circleMarker(latlng, {
        radius: 5,
        labelStyle: {
          text: title,
          rotation: 0,
          zIndex: i,
		  //minZoom : 6,
		  //strokeStyle: "#000",
		  strokeStyle: "red",
        }
      }).addTo(map);
	  
	  var content = "【名称】:"+title;
	  c.bindPopup(content);
    }

6、最终效果

基于CanvasLabel的Leaflet矢量数据免切片属性标注实践,leaflet,CavasLabel,Leaflet中文标注实践

基于CanvasLabel的Leaflet矢量数据免切片属性标注实践,leaflet,CavasLabel,Leaflet中文标注实践

基于CanvasLabel的Leaflet矢量数据免切片属性标注实践,leaflet,CavasLabel,Leaflet中文标注实践

 总结

        以上就是本文的主要内容,  本文将重点介绍Leaflet.CanvasLabel插件,然后介绍插件的属性,其次讲解和Leaflet进行结合使用生成一个可展示的例子,通过实例结合代码的方式进行讲解,让您更好的掌握这款插件。行文仓促,如有不当之处,还请各位专家朋友批评指正。文章来源地址https://www.toymoban.com/news/detail-814327.html

到了这里,关于基于CanvasLabel的Leaflet矢量数据免切片属性标注实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在SpringBoot中基于CanvasLabel的地震基础信息展示实践

    目录 前言 一、数据库设计 1、数据库设计 2、sql脚本  3、数据记录 二、SpringBoot后台设计与实现 1、Mapper访问层及实体定义 2、Service层实现 3、控制层实现 三、地震信息展示 1、展示数据接入   2、最终效果 总结         在上一篇博客中,对于在Leaflet中进行矢量数据进行

    2024年01月25日
    浏览(42)
  • mapbox-gl中mvt、pbf 矢量切片 feature id bug

    1.版本:mapbox-gl.js 2.13.0,pbf采用 postgis生成 2.调用矢量切片时,采用如下方法查询矢量切片要素,报错 map.on(\\\'mousemove\\\', function(e) {                     var bbox = [                         [e.point.x - 5, e.point.y - 5],                         [e.point.x + 5, e.point.y +

    2024年02月12日
    浏览(52)
  • 基于C++、GDAL、OpenCV的矢量数据骨架线提取算法

    基于C++、GDAL、OpenCV的矢量数据骨架线提取算法 CGAL已经实现了该功能,但由于CGAL依赖于Boost库,编译后过大,因此本文所采用的这套方式实现骨架线提取功能。 效果: 思路: 1、将导入shp按照要素逐一拆分成新的shp 2、将所有拆分后的shp分别转栅格,利用OpenCV提取骨架线 3、

    2024年02月12日
    浏览(80)
  • 【YOLO】基于YOLOv8实现自定义数据的自动标注(针对VOC格式的数据集)

    利用yolov8的检测模型实现数据集的自标注,针对VOC数据集,.xml文件,labelimg标注工具 yolov8模型的训练可以参考笔者的博客 【YOLO】YOLOv8实操:环境配置/自定义数据集准备/模型训练/预测 训练好自定义的模型,就可以执行下面的代码实现模型自标注数据集 修改下面三个参数即

    2024年02月11日
    浏览(48)
  • 基于Leaflet的Webgis经纬网格生成实践

    目录 前言 一、Leaflet.Graticule 1、参数说明 二、集成使用 1、新建网页模板 2、初始化地图对象 3、运行效果 三、源码调用分析 1、参数注入  2、经纬网构建 总结          众所周知,在地球仪上或地图上,经线和纬线相互交织,就构成经纬网。利用它上面标注的经度和纬度,

    2024年02月04日
    浏览(39)
  • 基于SpringBoot和Leaflet的地震台网信息预警可视化

    目录 前言 一、后台管理设计与实现 1、Model层 2、业务层 3、控制层 二、前端预警可视化设计与实现 1、网页结构 2、数据绑定 三、效果展示 总结         在之前的几篇博客中,我们讲解了如何在Leaflet中进行预警信息提示效果,以及基于XxlCrawler进行中国地震台网信息的采

    2024年04月27日
    浏览(32)
  • 基于Leaflet.js的Marker闪烁特效的实现-模拟预警

    目录 前言 一、闪烁组件 1、关于leaflet-icon-pulse 2、 使用leaflet-icon-pulse 3、方法及参数简介 二、闪烁实例开发 1、创建网页 2、Marker闪烁设置 3、实际效果  三、总结         在一些地质灾害或者应急情况当中,或者热门预测当中。我们需要基于时空位置来进行标记,不仅要

    2024年04月10日
    浏览(40)
  • 零样本文本分类应用:基于UTC的医疗意图多分类,打通数据标注-模型训练-模型调优-预测部署全流程。

    本项目提供基于通用文本分类 UTC(Universal Text Classification) 模型微调的文本分类端到端应用方案,打通 数据标注-模型训练-模型调优-预测部署全流程 ,可快速实现文本分类产品落地。 文本分类是一种重要的自然语言处理任务,它可以帮助我们将大量的文本数据进行有效的分

    2023年04月21日
    浏览(44)
  • 基于Leaflet.js和Turf.js的等值线区间自定义及颜色自适应实践

    目录 前言 一、Turf.js等值线相关制作 1、生成方法 2、主要参数 二、实际案例开发 1、新建展示页面 2、等值线生成  3、基于Leaflet的再优化 总结         在气象方面的GIS应用当中,会根据实际的工作需要建立不同的监测站点。气象监测站的主要功能包括:(1)天气预报和

    2024年04月11日
    浏览(50)
  • 面向人群属性关系挖掘的数据可视化———基于美国人口adult数据集

    目录 面向人群属性关系挖掘的数据可视化 一、课程设计内容及目的 二、总体设计 (一)题目需求分析 (二)系统整体流程图或组成框图 三、详细设计 (一)读取数据并导入需要的第三方库 (二)通过判断每个属性的取值范围来估计属性及其类型 (三)除去数据值前的空

    2024年02月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包