高德地图绘图,点标记,并计算中心点

news/2024/10/4 7:59:09/

 

效果图

代码如下

/ 地图初始化
const map: any = ref(null)
const marker: any = ref(null)
const polyEditor: any = ref(null)
const view: any = ref(false)
const squareVertices: any = ref([])
const init = () => {workSpacesCurrent(workspaceId, {}).then((res) => {console.log('地图呢', res.data)map.value = new AMap.Map('container6', {center: [res.data.longitude, res.data.latitude],// center://   ['118.622184', '32.096262'],layers: [// 卫星new AMap.TileLayer.Satellite(),// 路网new AMap.TileLayer.RoadNet(),],zoom: 17, // 地图显示的缩放级别zooms: [0, 19], // 设置缩放级别范围为3至16})pointMark()})
}// 点标记
function pointMark () {if (cameraId.value !== 0) {console.log('你是多少', cameraId.value)console.log('cameraLngInpt', cameraLngInpt.value)console.log('cameraLatInpt', cameraLatInpt.value)setTimeout(() => {marker.value = new AMap.Marker({icon: 'https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png',position: [cameraLngInpt.value, cameraLatInpt.value],})map.value.add(marker.value)}, 5000)} else {if (squareVertices.value.length === 0) {map.value.on('click', (e) => {if (view.value) {polyEditor.value.close()polyEditor.value = nullmap.value.clearMap()}console.log('地图点击进来啦吗')console.log('e', e)marker.value = new AMap.Marker({icon: 'https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png',position: [e.lnglat.lng, e.lnglat.lat],})map.value.add(marker.value)// marker.value.setMap(map.value)console.log('地图点击点标记', marker.value)const cameralng = e.lnglat.lngconst cameralat = e.lnglat.latcameraLngInpt.value = cameralngcameraLatInpt.value = cameralat// 绘图drawMark(e)})} else {// centerPointFn()}}
}// 绘图
function drawMark (e: any) {squareVertices.value = calculateSquareVertices(e.lnglat.lat,e.lnglat.lng,1000)console.log('squareVertices.value', squareVertices.value)markerQure()
}// 监听绘图变化
const markerQure = () => {console.log('进来了没有地图渲染')console.log('squareVertices.value', squareVertices.value)if (view.value) {// polyEditor.value.close()// polyEditor.value = null// map.value.clearMap()}const path: any = []if (cameraId.value !== 0) {squareVertices.value.forEach((i) => {path.push([i[0], i[1]])})} else {squareVertices.value.forEach((i) => {path.push([i.lng, i.lat])})}console.log('path', path)const polygon = new AMap.Polygon({path: path,strokeColor: '#FF33FF',strokeWeight: 6,strokeOpacity: 0.2,fillOpacity: 0.4,fillColor: '#1791fc',zIndex: 50,bubble: true,})console.log('polygon', polygon)map.value.add([polygon])map.value.setFitView()centerPointFn()polyEditor.value = new AMap.PolygonEditor(map.value, polygon)polyEditor.value.addAdsorbPolygons([polygon])polyEditor.value.open()// 监听坐标点的变化polyEditor.value.on('addnode', function (event) {squareVertices.value = []event.target.getPath().forEach((i) => {squareVertices.value.push({lng: i.lng,lat: i.lat,})})console.log('这里有吗', squareVertices.value)clearMarker()setTimeout(() => {pointMark()}, 500)centerPointFn()})view.value = true// 监听拖动变化polyEditor.value.on('adjust', function (event) {squareVertices.value = []event.target.getPath().forEach((i) => {squareVertices.value.push({lng: i.lng,lat: i.lat,})})console.log('坐标参数', squareVertices.value)clearMarker()pointMark()centerPointFn()})polyEditor.value.on('removenode', function (event) {squareVertices.value = []event.target.getPath().forEach((i) => {squareVertices.value.push({lng: i.lng,lat: i.lat,})})console.log('坐标参数2', squareVertices.value)clearMarker()pointMark()centerPointFn()})
}// 画图各个点标记
const calculateSquareVertices = (centerLat, centerLng, sideLength) => {// 将长度从米转换为经度差值const deltaLat = (sideLength / 111300) * 1.1const deltaLng =(sideLength / (111300 * Math.cos(centerLat * (Math.PI / 180)))) * 1.1const vertices = [{ lat: centerLat + deltaLat, lng: centerLng - deltaLng }, // 右上角{ lat: centerLat - deltaLat, lng: centerLng - deltaLng }, // 右下角{ lat: centerLat - deltaLat, lng: centerLng + deltaLng }, // 左下角{ lat: centerLat + deltaLat, lng: centerLng + deltaLng }, // 左上角]return vertices
}// 中心点坐标
function centerPointFn () {let sumLng = 0let sumLat = 0if (cameraId.value !== 0) {console.log('是否进来')for (let i = 0; i < squareVertices.value.length; i++) {sumLng += squareVertices.value[i][0]sumLat += squareVertices.value[i][1]}} else {for (let i = 0; i < squareVertices.value.length; i++) {sumLng += squareVertices.value[i].lngsumLat += squareVertices.value[i].lat}}const centerLng = sumLng / squareVertices.value.lengthconst centerLat = sumLat / squareVertices.value.length// 创建多边形的中心点坐标对象const centerPoint = new AMap.LngLat(centerLng, centerLat)const centerPointInpp = [centerLng, centerLat]centerPointInpt.value = centerPointInpp.toString()addMarker(centerLng, centerLat)console.log('参数3', centerPointInpt.value)console.log('多边形的中心点经度:' +centerPoint.getLng() +',纬度:' +centerPoint.getLat())// const marker = new AMap.Marker({//   icon: '/src/assets/center.png',//   position: [centerLng, centerLat],//   offset: new AMap.Pixel(-13, -30),// })// map.value.add(marker)
}// 添加标记点
function addMarker (lng, lat) {if (marker.value) {console.log('添加点坐标更新')marker.value.setPosition([lng, lat]) // 更新点坐标} else {marker.value = new AMap.Marker({// icon: '/src/assets/center.png',map: map.value,position: [lng, lat],offset: new AMap.Pixel(-13, -30),})}
}// 清除标记点
function clearMarker () {console.log('清除打点位置', marker.value)if (marker.value) {marker.value.setMap(null)marker.value = null}
}


http://www.ppmy.cn/news/1524513.html

相关文章

界面控件KendoReact中文教程 - 如何创建动态进度条?

Kendo UI致力于新的开发&#xff0c;来满足不断变化的需求。现在我们非常自豪地宣布&#xff0c;通过React框架的Kendo UI JavaScript封装来支持React Javascript框架。Kendo UI for React能够为客户提供更好的用户体验&#xff0c;并且能够更快地构建更好的应用程序。 KendoR…

Spring 源码解读:手动实现BeanFactory的加载与管理

引言 BeanFactory是Spring框架的核心接口之一&#xff0c;它负责管理Bean的创建、加载与依赖注入。通过BeanFactory&#xff0c;开发者可以高效地管理Bean的生命周期&#xff0c;并在应用程序中灵活运用依赖注入机制。本篇文章将通过手动实现一个简单的BeanFactory&#xff0c…

SprinBoot+Vue农产品电商平台的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

JavaScript web API part2

web API 全选反选案例 需求&#xff1a; 勾选大复选框&#xff0c;勾选全部小复选框取消勾选大复选框&#xff0c;则取消勾选全部小复选框若有小复选框没有被勾选&#xff0c;则大复选框不被勾选若所有小复选框都被勾选&#xff0c;则大复选框被勾选 <!DOCTYPE html>…

linux中vim实用命令大全

感谢浪浪云支持发布 浪浪云活动链接 &#xff1a;https://langlangy.cn/?i8afa52 文章目录 1. 快速保存和退出2. 局部替换替换当前行中的文本替换当前行中的所有匹配替换整个文件中的内容确认替换 3. 高效删除和复制删除命令复制命令粘贴命令 4. 快速移动行内移动屏幕内移动文…

虚幻5|不同骨骼受到不同伤害|小知识(2)

1.蓝图创建一个结构&#xff0c;B_BoneDamage 结构里添加一个浮点变量&#xff0c;表示伤害倍数 2.当我们创建了一个结构&#xff0c;就需要创建一个数据表格&#xff0c;数据表格可以选择对应的结构 不同骨骼不同倍数伤害&#xff0c;骨骼要对应骨骼网格体的名称 3.把我们br…

timm从本地加载预训练模型

想要从timm加载本地预训练模型&#xff0c;首先是参考timm.create_model()从本地加载pretrained模型 将 model timm.create_model(modelxxx, pretrainedTrue, xxx)改为 pretrained_cfg timm.models.create_model("modelxxx").default_cfg pretrained_cfg[file] …

SFC CSS 功能:深层选择/插槽选择器/动态绑定

深层选择器​ 如果您希望样式中的选择器scoped“深入”&#xff0c;即影响子组件&#xff0c;则可以使用:deep()伪类&#xff1a; <style scoped> .a :deep(.b) {/* ... */ } </style> 以上内容将被编译为&#xff1a; .a[data-v-f3f3eg9] .b {/* ... */ }提示 创…