<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>

<link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css"
integrity="sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A=="
crossorigin="" />
<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"
integrity="sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA=="
crossorigin=""></script>

<div id="map" style="width: 600px; height: 400px;"></div>
@*<input type="button" id="circle" value="绘制圆" onclick="drawCircle()" />
<input type="button" value="绘制多边形" onclick="drawPolygon()">
<input type="button" id="clear" value="清除圆形" onclick="removeCircle()" />
<input type="button" id="clear" value="清除多边形" onclick="removePolygon()" />
<input type="button" id="clearAll" value="全部清除" onclick="removeAll()" />*@
<input type="button" id="clear" value="加" onclick="add()" />
<input type="button" id="clearAll" value="减" onclick="reduce()" />

<script>
var map = L.map('map').setView([30.3367385888597, 120.135198302847], 13);
var wpUrl = 'http://rt0.map.gtimg.com/realtimerender?z={z}&x={x}&y={-y}&type=vector&style=0';

L.tileLayer(wpUrl, {
attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);

var LeafIcon = L.Icon.extend({
options: {
shadowUrl: '/Img/leaf-shadow.png',
iconSize: [38, 95],
shadowSize: [50, 64],
iconAnchor: [22, 94],
shadowAnchor: [4, 62],
popupAnchor: [-3, -76]
}
});

var greenIcon = new LeafIcon({ iconUrl: '/Img/leaf-green.png' }),
redIcon = new LeafIcon({ iconUrl: '/Img/leaf-red.png' });

L.marker([30.3367385888597, 120.135198302847], { icon: greenIcon }).bindPopup("I am a green leaf.").addTo(map);
L.marker([30.3381806108297, 120.140808207925], { icon: redIcon }).bindPopup("I am a red leaf.").addTo(map);
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

//初始化数据
var defaultVal = 1;
var defaultSite = [30.3367385888597, 120.135198302847];

var point = []; //多边形集合
point.push([30.2993660256245, 120.154368710801]);
point.push([30.3500857043154, 120.157951567494]);
point.push([30.3126058061275, 120.12189508822]);
point.push([30.3028305920692, 120.12263712889]);
point.push([30.2993660256245, 120.154368710801]);

var tempCircle = new L.circle();
DrawCircle(defaultVal, defaultSite);

function add() {
defaultVal = defaultVal + 1;
DrawCircle(defaultVal, defaultSite);
}
function reduce() {
defaultVal = defaultVal - 1;
DrawCircle(defaultVal, defaultSite);
}

//圆形
function DrawCircle(r, globalSite) {
map.removeLayer(tempCircle);
tempCircle.setLatLng(globalSite)
tempCircle.setRadius(r * 1000)
tempCircle.setStyle({ color: '#ff0000', fillColor: '#28FF28', fillOpacity: 0.3 })
map.addLayer(tempCircle)
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

var lines = new L.polyline([]);
var geometry = [];
var node;
var tempLines = new L.polyline([], { dashArray: 5 });

DrawPolygon();
//多边形
function DrawPolygon() {
$.each(point, function (index, item) {
node = L.circle(item, { color: '#ff0000', fillColor: 'ff0000', fillOpacity: 1 })
lines.addLatLng(item);
map.addLayer(tempLines);
map.addLayer(lines);
map.addLayer(node);
geometry.push(node);
});

geometry.push(L.polygon(point).addTo(map));

}
</script>
<script>
////读取点击位置坐标并返回其经纬度
//// function onMapClick(e) { alert("You clicked the map at " + e.latlng); }
////r用来存储半径,i用来存储圆心经纬度
////tempCircle是用来存放圆的图层,pop用来返回圆半径的弹窗
//var r;
//var i;
//var tempCircle;
//var pop;
////移除圆图层
//function removeCircle() {
// map.removeLayer(tempCircle);
//}
////绘制圆
//function drawCircle() {
// //在绘制圆之前需要先判断是否已经绘制过了,如果有,则清空再绘制
// //如果需要绘制多个圆,则不必此句
// if (tempCircle) {
// removeAll();
// }
// r = 0;
// i = null;
// tempCircle = new L.circle();
// map.dragging.disable();//将mousemove事件移动地图禁用
// //监听鼠标落下事件
// map.on('mousedown', onmouseDown);

// function onmouseDown(e) {
// //确定圆心
// i = e.latlng
// pop = L.popup().setLatLng(e.latlng);
// map.addLayer(pop);
// //监听鼠标移动事件
// map.on('mousemove', onMove);
// //监听鼠标弹起事件
// map.on('mouseup', onmouseUp);
// }
// function onMove(e) {
// r = L.latLng(e.latlng).distanceTo(i);//计算半径
// if (r < 5000) {
// if (i) {
// //绘制圆心位置与半径
// tempCircle.setLatLng(i)
// tempCircle.setRadius(r)
// tempCircle.setStyle({ color: '#ff0000', fillOpacity: 0 })
// map.addLayer(tempCircle)
// }
// //toFixed()方法用来保留两位小数(四舍五入)
// pop.setContent("绘制圆半径为:" + r.toFixed(2) + "米");;
// } else {
// r = 5000;
// if (i) {
// tempCircle.setLatLng(i)
// tempCircle.setRadius(r)
// tempCircle.setStyle({ color: '#ff0000', fillOpacity: 0 })
// map.addLayer(tempCircle)
// }
// pop.setContent("绘制圆半径为:" + r + "米");;
// }
// }
// function onmouseUp(e) {
// /* r = L.latLng(e.latlng).distanceTo(i); */
// map.removeLayer(pop);
// L.circle(i, { radius: r, color: '#ff0000', fillOpacity: 0 });
// map.addLayer(tempCircle);
// map.dragging.enable();

// map.setView(i, 13);

// i = null;
// r = 0;
// //取消监听事件
// map.off('mousedown');
// map.off('mouseup');
// map.off('mousemove');

// }
//}
////移除所有图层(包括圆和多边形)
//function removeAll() {
// removePolygon()
// removeCircle()
//}
</script>
<script>
////动态绘制多边形
//var points, geometry, lines, tempLines, node;
//function drawPolygon() {
// if (tempLines) {
// removePolygon();
// }
// map.doubleClickZoom.disable();
// lines = new L.polyline([]);
// tempLines = new L.polyline([], { dashArray: 5 });
// points = [];
// geometry = [];
// map.on('click', onClick); //点击地图
// map.on('dblclick', onDoubleClick);
// map.on('mousemove', onMove)//双击地图

// function onClick(e) {
// points.push([e.latlng.lat, e.latlng.lng])
// lines.addLatLng(e.latlng)
// map.addLayer(tempLines)
// map.addLayer(lines)
// node = L.circle(e.latlng, { color: '#ff0000', fillColor: 'ff0000', fillOpacity: 1 })
// map.addLayer(node)
// geometry.push(node)
// }
// function onMove(e) {
// if (points.length > 0) {
// ls = [points[points.length - 1], [e.latlng.lat, e.latlng.lng], points[0]]
// tempLines.setLatLngs(ls)
// // map.addLayer(tempLines)
// }
// }
// function onDoubleClick(e) {
// geometry.push(L.polygon(points).addTo(map))
// points = [];
// node = null;
// map.off('click', onClick); //点击地图
// map.off('dblclick', onDoubleClick);
// map.off('mousemove', onMove)//双击地图
// map.doubleClickZoom.enable();
// //isInPolygon(marker);
// }
//}
//function removeCircle() {
// map.removeLayer(tempCircle);
//}
//function removePolygon() {
// for (let ooo of geometry) {
// ooo.remove();
// }
// map.removeLayer(lines);
// map.removeLayer(tempLines);
//}
</script>

leaflet动态加载/手动绘制(圆、多边形)demo的更多相关文章

  1. CS.动态加载DLL.动态生成.运行代码.BS.AutoFac管理实现类

    以英雄联盟为例.界面上经常有Load....xxxx.dll.一般都是加载子系统.比如装备系统.英雄系统等.在实际开发中很多项目非常庞大.都会分割成独立子解决方案开发.后期就需要加载回来.一般都是利用 ...

  2. [转载] Android动态加载Dex机制解析

    本文转载自: http://blog.csdn.net/wy353208214/article/details/50859422 1.什么是类加载器? 类加载器(class loader)是 Java ...

  3. 会员管理系统的设计和开发(2)-- RDLC报表的设计及动态加载

    在上篇<会员管理系统的设计和开发(1)>介绍了关于会员系统的一些总体设计思路和要点,经过一段时间开发,软件终于完成并发布.在这期间,碰到了不少技术难点,并积累了不少开发心得和经验,本篇继续 ...

  4. js的动态加载、缓存、更新以及复用(一)

    使用范围: OA.MIS.ERP等信息管理类的项目,暂时不考虑网站. 遇到的问题: 完成一个项目,往往需要引用很多js文件,比如jQuery.js.easyUI等.还有自己写的一些列js文件,那么这些 ...

  5. OC 动态类型,动态绑定,动态加载

    OC 动态类型,动态绑定,动态加载 Objective-C具有相当多的动态特性,基本的,也是经常被提到和用到的有 动态类型(Dynamic typing) 动态绑定(Dynamic binding) ...

  6. Java_动态加载

    Java类动态加载(一)——java源文件动态编译为class文件最近在做java动态加载这方面的工作,起初也遇到了很多困难.网上关于这方便的东西很零散,为了便于日后回过头来再看,于是我将这几天的心得 ...

  7. Android中插件开发篇之----动态加载Activity(免安装运行程序)

    一.前言 又到周末了,时间过的很快,今天我们来看一下Android中插件开发篇的最后一篇文章的内容:动态加载Activity(免安装运行程序),在上一篇文章中说道了,如何动态加载资源(应用换肤原理解析 ...

  8. Android中的动态加载机制

    在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优势.本 ...

  9. 【转】Android类动态加载技术

    http://www.blogjava.net/zh-weir/archive/2011/10/29/362294.html Android应用开发在一般情况下,常规的开发方式和代码架构就能满足我们的 ...

  10. Android 动态加载 (一) 态加载机制 案例一

    在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优势.本 ...

随机推荐

  1. 【JVM调优】Day01:Garbage的概念、垃圾回收的算法(标记清除、拷贝、标记压缩)、各种垃圾回收器(Serial、Parallel、CMS并发)及存在的问题

    〇.前言 简历写上:熟悉GC常用算法,熟悉常见垃圾回收器.具有实际JVM调优实战经验 瞬间涨3k 一.什么是garbage Java中垃圾回收器自动进行垃圾回收,不用自己回收 new 对象在内存中,c ...

  2. 开发一个最简单的iOS App

    开发一个最简单的iOS App 大家好,我是孜孜不倦学习的Zhangbeihai. 上月底我组织了[组队学习]TensorFlow 入门课程(中文) ,截至目前有300多同学加入.主要就是 Tenso ...

  3. 如何使用 IdGen 生成 UID

    在分布式系统中,雪花 ID 是一种常用的唯一 ID 生成算法.它通过结合时间戳.机器码和自增序列来生成 64 位整数 ID,可以保证 ID 的唯一性和顺序性. 在.Net 项目中,我们可以使用 IdG ...

  4. python -m pip install --upgrade pip报No module named pip解决方法

    解决方法: 1. python -m ensurepip 2. python -m pip install --upgrade pip 注意:添加pip环境变量 在python安装目录下搜索pip3或 ...

  5. (数据科学学习手札147)Python GIS利器shapely全新2.0版本一览

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,我写过很多篇介绍geopand ...

  6. [深度学习] tf.keras入门2-分类

    目录 Fashion MNIST数据库 分类模型的建立 模型预测 总体代码 主要介绍基于tf.keras的Fashion MNIST数据库分类, 官方文档地址为:https://tensorflow. ...

  7. [机器学习] Yellowbrick使用笔记1-快速入门

    Yellowbrick是一个机器学习可视化库,主要依赖于sklearn机器学习库,能够提供多种机器学习算法的可视化,主要包括特征可视化,分类可视化,回归可视化,回归可视化,聚类可视化,模型选择可视化, ...

  8. 官网下载CentOS系统镜像过程

    想学习CentOS系统,但是不知道镜像去哪里搞,随便去个第三方发现要么要注册,要么各种广告病毒,或者好不容易找到官网,不仅全英文,有些专业术语也不懂,本文说明官网下载自己想要的CentOS镜像整个流程 ...

  9. ubunut安装qtcreater

    安装gcc 1 kxb@kxb:~$ gcc -v 2 3 Command 'gcc' not found, but can be installed with: 4 5 sudo apt insta ...

  10. Python自动化操作sqlite数据库

    你好,我是悦创. 原文首发:https://bornforthis.cn/column/pyauto/ 1. 什么是数据库 数据库是"按照数据结构来组织.存储和管理数据的仓库",是 ...