<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. 推荐一款 在线+离线数据 同步框架 Dotmim.Sync

    移动智能应用可以分为在线模式.纯离线模式与"在线+离线"混合模式.在线模式下系统数据一般存储在服务器端的大中型数据库(如 SQL Server.Oracle.MySQL 等),移动 ...

  2. js迭代循环

    一.for loop for (let i = 0; i < products.length; i++) { console.log(products[i]); } 支持循环中断,可以用brea ...

  3. STL list容器API

    list容器:链表容器,不支持随机遍历.不能用通用的sort算法(要有随机访问迭代器),容器自己有排序算法 #define _CRT_SECURE_NO_WARNINGS #include<io ...

  4. Spark详解(04) - Spark项目开发环境搭建

    类别    [随笔分类]Spark Spark详解(04) - Spark项目开发环境搭建 Spark Shell仅在测试和验证程序时使用的较多,在生产环境中,通常会在IDEA中编制程序,然后打成Ja ...

  5. 用Java写一个PDF,Word文件转换工具

    前言 前段时间一直使用到word文档转pdf或者pdf转word,寻思着用Java应该是可以实现的,于是花了点时间写了个文件转换工具 源码weloe/FileConversion (github.co ...

  6. 第三方模块的下载与使用 requests模块 openpyxl模块

    今日内容 第三方模块下载操作 第三方模块: 别人写的魔魁啊 一般情况下都很强大 python中模块很多 如果想使用第三方模块 第一次必须先下载 后面就可以反复使用 =内置模块 下载第三方模块的方式: ...

  7. 低版本客户端连接高版本数据库报错ORA-28040、ORA-01017

    测试环境: 客户端:Oracle 11.2.0.1 服务端:Oracle 19.16 测试过程: 1.低版本客户端连接高版本数据库报错ORA-28040 2.低版本客户端连接高版本数据库报错ORA-0 ...

  8. 刷题笔记——3002.买图书 & 2763.计算(a+b)/c的值

    题目1 3002.买图书 代码 while True: try: n,m=map(float,input().strip().split()) if(n==10 and m==1): print('{ ...

  9. [阿里云]I+的一些探索

    I+是阿里云的关系网络分析,万物皆可联 使用中遇到的一些问题,特记录如下: 1.添加数据源 这个数据源是用于数据落地的存储,所以一定要选择<是> 2.配置对象信息 这一步就像是创建一个表来 ...

  10. djiango框架推导过程,jinja2模板语法,jiango简介,基本操作命令

    djiango框架推导过程,jinja2模板语法,jiango简介,基本操作命令 一.web框架前戏 web 框架可以理解为是基于会联网的web服务端>>>socket服务端 1.w ...