高德地图经纬度坐标批量拾取(高德怎么经纬度)
zhezhongyun 2025-06-13 18:05 4 浏览
使用方法
在桌面上新建一个index.txt文件,把下面的代码复制进去保存,再把文件名改成index.html保存,双击运行打开即可
功能:
1、点击鼠标拾取坐标。
2、地图缩放。
3、拾取坐标拖动。
4、坐标点标注编辑。
5、坐标点删除。
6、定位到拾取的坐标点。
7、Excel导出坐标点。
8、街景、卫星、混合地图切换
代码如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<title>鼠标拾取地图坐标</title>
<script type="text/javascript" src="https://cache.amap.com/lbs/static/addToolbar.js"></script>
<script type="text/javascript" src='https://cdn.sheetjs.com/xlsx-0.19.2/package/dist/xlsx.full.min.js'></script>
</head>
<style type="text/css">
html,body{
font-size: 12px;
width: 100%;
height: 100%;
margin: 0px;
}
.map{
height: 100%;
width: 100%;
float: left;
}
/*数据卡片*/
.input-card{
padding: 5px;
max-height: 360px;
width: 250px;
overflow-y: scroll;
min-width: 0;
word-wrap: break-word;
background-color: #fff;
background-clip: border-box;
border-radius: .25rem;
border-width: 0;
border-radius: 0.4rem;
box-shadow: 0 2px 6px 0 rgba(114, 124, 245, .5);
position: fixed;
bottom: 1rem;
right: 1rem;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
padding: 0.75rem 1.25rem;
}
/*图标*/
.pot-out {
background-color:#F0FFF0;
width:18px;height:18px;
border:solid 1px #00BFFF;
border-radius:16px 16px 16px 0;
-webkit-transform:rotate(-45deg);
-moz-transform: ratate(-45deg);
transform:rotate(-45deg);
}
.pot-in {
line-height: 18px;
text-align: center;
width:18px;height:18px;
-webkit-transform:rotate(45deg);
-moz-transform: ratate(45deg);
transform:rotate(45deg);
}
/*表格*/
table {
text-align: center;
width:240px;
table-layout:fixed;/* 只有定义了表格的布局算法为fixed,下面td的定义才能起作用。 */
border-color: white;
border-collapse: collapse;
}
table thead tr {
background-color: #C0EEF2;
}
table tr {
background-color: #E9F8F9;
}
table td{
width:20px;
word-break:keep-all;/* 不换行 */
white-space:nowrap;/* 不换行 */
overflow:hidden;/* 内容超出宽度时隐藏超出部分的内容 */
text-overflow:ellipsis;/* 当对象内文本溢出时显示省略标记(...) ;需与overflow:hidden;一起使用*/
}
.btn2{
border: none;
background-color: #E3F6FF;
}
.btns-box{
display: flex;
display: -webkit-flex;
justify-content: space-between;
width: 240px;
}
.btns{
border: none;
flex-basis: auto;
flex-grow: 1;
border: solid 1px white;
background-color: #E3E6FA;
}
</style>
<body>
<div id="container" class="map"></div>
<div class="input-card">
<div class="btns-box">
<button id="hide-obj3d-btn" onclick="setRoadNetLayer()" class="btns">街景</button>
<button id="show-obj3d-btn" onclick="setSatelliteLayer()" class="btns">卫星</button>
<button id="show-obj3d-btn" onclick="setMixLayer()" class="btns">混合</button>
<button class="btns" onclick="noDomExportExcel()">导出Excel</button>
</div>
<table border="1">
<thead>
<th>编号</th>
<th>经度</th>
<th>纬度</th>
<th>描述</th>
<th>操作</th>
<th>定位</th>
</thead>
<tbody>
</tbody>
</table>
</div>
<script src="https://webapi.amap.com/maps?v=1.4.15&key=您申请的key值&plugin=AMap.Autocomplete"></script>
<script type="text/javascript">
var save=false;
var num=0;
// 数组
let data = [];
//标记
var markers = [];
//高德地图
var map = new AMap.Map("container", {
resizeEnable: true,
expandZoomRange:true,
zoom:20, //设置初始化级别
zooms:[3,20] //设置缩放级别范围 3-20 级
});
// 构造官方卫星、路网图层
var satelliteLayer = new AMap.TileLayer.Satellite();
var roadNetLayer = new AMap.TileLayer.RoadNet();
//设置鼠标样式
// map.setDefaultCursor("crosshair");
//为地图注册click事件获取鼠标点击出的经纬度坐标
map.on('click', function(e) {
data.push({
id:num,
lng:e.lnglat.R,
lat:e.lnglat.Q,
remark:""
});
initdata();
num++;
});
//初始化数据
function initdata(){
//1、清除所有图标
markers=[];
map.clearMap();
//2、渲染图标
for(let i=0;i<data.length;i++){
//添加图标
var marker = new AMap.Marker({
// 将 html 传给 content
content: '<div class="pot-out"><div class="pot-in">'+data[i].id+'</div></div>',
position:[data[i].lng,data[i].lat],
offset:new AMap.Pixel(-9,-18), //中心点
draggable: true, // 设置是否可以拖拽
cursor: 'move', //拖动时的鼠标样式
raiseOnDrag: true, //托拽效果
extData:i //自定义数据
});
//鼠标移动
marker.on('mouseup',function (e3) {
var index=e3.target.De.extData;
data[index].lng=e3.lnglat.R;
data[index].lat=e3.lnglat.Q;
initdata();
});
markers.push(marker); //保存到标识列表中
}
map.add(markers); //添加标识到地图中
/*
* 渲染表格
*/
let tbodyinner = document.getElementsByTagName("tbody")[0]
let html = ''
for(let i=0;i<data.length;i++){
html+=`
<tr>
<td>${data[i].id}</td>
<td name="latlng" title='${data[i].lng}'>${data[i].lng}</td>
<td name="latlng" title='${data[i].lng}'>${data[i].lat}</td>
<td name="grade" title='${data[i].remark}' index="${i}">${data[i].remark}</td>
<td> <button name="del" class="btn2" index="${i}">删除</button> </td>
<td> <button name="locate" class="btn2" index="${i}">定位</button> </td>
</tr>
`
}
// tbody.innerHTML="..."往tbody中添加内容
tbodyinner.innerHTML = html
addEvents()
save=false;
}
// 表格添加监听click事件
function addEvents(){
let subject = document.getElementsByName("grade")
for(let i=0;i<subject.length;i++){
subject[i].addEventListener('click',function(e){
edit(this,e)
});
}
let delbut = document.getElementsByName("del")
for(let i=0;i<delbut.length;i++){
delbut[i].addEventListener('click',function(e){
deletes(e)
});
}
let locate = document.getElementsByName("locate")
for(let i=0;i<delbut.length;i++){
locate[i].addEventListener('click',function(e){
locates(e)
});
}
}
//表格编辑
function edit(i,e){
let oldvalue = i.innerHTML;
// 设置该标签为空
i.innerHTML = ''
// 添加input对象
let inp = document.createElement("input")
inp.value = oldvalue
inp.classList.add("inputClass")
// 添加子节点
i.appendChild(inp)
// 获取文本中的内容
inp.select()
// 失去焦点事件
inp.onblur = function(){
i.innerHTML = inp.value;
var index=e.target.getAttribute("index");
data[index].remark=inp.value;
}
}
//删除表格行数据
function deletes(e){
var r=confirm("确定删除?");
if (r==true){
var index=e.target.getAttribute("index");
//表格数据移除
data.splice(index, 1);
//地图上移除标记
map.remove([markers[index]]);
//列表中移除标记
markers.splice(index, 1);
initdata();
}
else{
console.log("取消");
}
}
//删除表格行数据
function locates(e){
var i=e.target.getAttribute("index");
map.setCenter([data[i].lng, data[i].lat]); //设置地图中心点
map.setZoom(18); //设置缩放等级
}
//导出Excel
function noDomExportExcel() {
// 使用 XLSX.utils.aoa_to_sheet(excleData);
var dataArry=[];
dataArry.push(["编号","经度","纬度","描述"]);
for(let i=0;i<data.length;i++){
var arry=[];
arry.push(data[i].id);
arry.push(data[i].lat.toString().padEnd(18,'0'));
arry.push(data[i].lng.toString().padEnd(18,'0'));
arry.push(data[i].remark);
dataArry.push(arry);
}
// 制作工作表的方式有很多种,以数组和对象为例
const worksheet = XLSX.utils.aoa_to_sheet(dataArry);
// 新建一个工作簿
const workbook = XLSX.utils.book_new();//创建虚拟workbook
/* 将工作表添加到工作簿,生成xlsx文件(book,sheet数据,sheet命名)*/
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
/* 输出工作表, 由文件名决定的输出格式(book,xlsx文件名称)*/
XLSX.writeFile(workbook, '标记信息.xlsx');
save=true;
}
//街道图层
function setRoadNetLayer() {
map.remove(satelliteLayer);
map.add(roadNetLayer);
}
//卫星图层
function setSatelliteLayer() {
map.remove(roadNetLayer);
map.add(satelliteLayer);
}
//混合图层
function setMixLayer() {
map.add(roadNetLayer);
map.add(satelliteLayer);
}
//在关闭页面时弹出确认提示窗口
window.onbeforeunload = function(event){
if(save){
console.log("已经导出,放心关闭");
}else{
return '您可能有数据没有导出,确认关闭?';
}
};
</script>
</body>
</html>
相关推荐
- JavaScript做个贪吃蛇小游戏(过关-加速),无需网络直接玩。
-
JavaScript做个贪吃蛇小游戏(过关-则加速)在浏览器打开文件,无需网络直接玩。<!DOCTYPEhtml><htmllang="en"><...
- 大模型部署加速方法简单总结(大模型 ai)
-
以下对大模型部署、压缩、加速的方法做一个简单总结,为后续需要备查。llama.cppGithub:https://github.com/ggerganov/llama.cppLLaMA.cpp项...
- 安徽医大第一医院应用VitaFlow Liberty(R)Flex为患者焕然一“心”
-
近日,在安徽医科大学第一附属医院心血管内科负责人暨北京安贞医院安徽医院业务副院长喻荣辉教授的鼎力支持和卓越带领下,凭借着先进的VitaFlowLiberty(R)Flex经导管主动脉瓣可回收可...
- 300 多行代码搞定微信 8.0 的「炸」「裂」特效!
-
微信8.0更新的一大特色就是支持动画表情,如果发送的消息只有一个内置的表情图标,这个表情会有一段简单的动画,一些特殊的表情还有全屏特效,例如烟花表情有全屏放烟花的特效,炸弹表情有爆炸动画并且消息和...
- 让div填充屏幕剩余高度的方法(div填充20px)
-
技术背景在前端开发中,经常会遇到需要让某个div元素填充屏幕剩余高度的需求,比如创建具有固定头部和底部,中间内容区域自适应填充剩余空间的布局。随着CSS技术的发展,有多种方法可以实现这一需求。实现步骤...
- css之div内容居中(css中div怎么居中)
-
div中的内容居中显示,包括水平和垂直2个方向。<html><head><styletype="text/css">...
- 使用uniapp开发小程序遇到的一些问题及解决方法
-
1、swiper组件自定义知识点swiper组件的指示点默认是圆圈,想要自己设置指示点,需要获得当前索引,然后赋给当前索引不同的样式,然后在做个动画就可以了。*关键点用change方法,然后通过e.d...
- 微信小程序主页面排版(怎样设置小程序的排版)
-
开发小程序的话首先要了解里面的每个文件的作用小程序没有DOM对象,一切基于组件化小程序的四个重要的文件*.js*.wxml--->view结构---->html*.wxss--...
- Vue动态组件的实践与原理探究(vue动态组件component原理)
-
我司有一个工作台搭建产品,允许通过拖拽小部件的方式来搭建一个工作台页面,平台内置了一些常用小部件,另外也允许自行开发小部件上传使用,本文会从实践的角度来介绍其实现原理。ps.本文项目使用VueCLI...
- 【HarmonyOS Next之旅】兼容JS的类Web开发(四) -> tabs
-
目录1->创建Tabs2->设置Tabs方向3->设置样式4->显示页签索引5->场景示例编辑1->创建Tabs在pages/index目录...
- CSS:前端必会的flex布局,我把布局代码全部展示出来了
-
进入我的主页,查看更多CSS的分享!首先呢,先去看文档,了解flex是什么,这里不做赘述。当然,可以看下面的代码示例,辅助你理解。一、row将子元素在水平方向进行布局:1.垂直方向靠顶部,水平方向靠...
- 【HarmonyOS Next之旅】兼容JS的类Web开发(四) -> swiper
-
目录1->创建Swiper组件2->添加属性3->设置样式4->绑定事件5->场景示例编辑1->创建Swiper组件在pages/index...
- CSS:Flex布局,网页排版神器!(css3 flex布局)
-
还在为网页排版抓狂?别担心,CSS的flex布局来了,让你轻松玩转各种页面布局,实现网页设计自由!什么是Flex布局?Flex布局,也称为弹性布局,是CSS中的一种强大布局方式,它能够让你...
- 移动WEB开发之flex布局,附携程网首页案例制作
-
一、flex布局体验传统布局兼容性好布局繁琐局限性,不能再移动端很好的布局1.1flex弹性布局:操作方便,布局极为简单,移动端应用很广泛PC端浏览器支持情况较差IE11或更低版本,不支持或仅部...
- 2024最新升级–前端内功修炼 5大主流布局系统进阶(mk分享)
-
2024最新升级–前端内功修炼5大主流布局系统进阶(mk分享)获课》789it.top/14658/前端布局是网页设计中至关重要的一环,它决定了网页的结构和元素的排列方式。随着前端技术的不断发展,现...
- 一周热门
- 最近发表
-
- JavaScript做个贪吃蛇小游戏(过关-加速),无需网络直接玩。
- 大模型部署加速方法简单总结(大模型 ai)
- 安徽医大第一医院应用VitaFlow Liberty(R)Flex为患者焕然一“心”
- 300 多行代码搞定微信 8.0 的「炸」「裂」特效!
- 让div填充屏幕剩余高度的方法(div填充20px)
- css之div内容居中(css中div怎么居中)
- 使用uniapp开发小程序遇到的一些问题及解决方法
- 微信小程序主页面排版(怎样设置小程序的排版)
- Vue动态组件的实践与原理探究(vue动态组件component原理)
- 【HarmonyOS Next之旅】兼容JS的类Web开发(四) -> tabs
- 标签列表
-
- HTML 教程 (33)
- HTML 简介 (35)
- HTML 实例/测验 (32)
- HTML 测验 (32)
- JavaScript 和 HTML DOM 参考手册 (32)
- HTML 拓展阅读 (30)
- HTML常用标签 (29)
- HTML文本框样式 (31)
- HTML滚动条样式 (34)
- HTML5 浏览器支持 (33)
- HTML5 新元素 (33)
- HTML5 WebSocket (30)
- HTML5 代码规范 (32)
- HTML5 标签 (717)
- HTML5 标签 (已废弃) (75)
- HTML5电子书 (32)
- HTML5开发工具 (34)
- HTML5小游戏源码 (34)
- HTML5模板下载 (30)
- HTTP 状态消息 (33)
- HTTP 方法:GET 对比 POST (33)
- 键盘快捷键 (35)
- 标签 (226)
- HTML button formtarget 属性 (30)
- CSS 水平对齐 (Horizontal Align) (30)