graphicLayer.startDraw({开启连续绘制isContinued之后,无法获取连续标绘的坐标数据

148 篇文章 2 订阅
132 篇文章 0 订阅

摘要:graphicLayer.startDraw({开启连续绘制isContinued之后,无法获取连续标绘的坐标数据的解决方案

问题前景:

graphicLayer.startDraw({开启连续绘制isContinued之后,.then()方法只走一次,无法获取连续标绘的所有坐标数据。

如果是结束绘制的话 有graphicLayer.endDraw()方法,但是在连续绘制开启之后,then()只走一次,无法记录连续绘制的次数。

相关链接:

http://mars3d.cn/editor-vue.html?key=ex_7_14_0&id=layer-graphic/draw/draw

http://mars3d.cn/api/GraphicLayer.html?classFilter=graphicLayer#endDraw 

相关代码:

 

 

 

问题解决方案参考:

isContinued 是否连续标绘,连续标绘状态下无法编辑已有对象,且不支持获取startDraw方法的返回值(是内部自动调用的,如果要获取请drawCreated事件中获取或外部手动进行startDraw)。

  graphicLayer.on(mars3d.EventType.drawCreated, function (e) {
    console.log("创建完成", e)

    graphicLayer.stopDraw()
    graphicLayer.startDraw(mars3d.Util.clone(e.graphic.options)) // 连续标绘时,可以代替isContinued

  })

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 安装AMap API 首先,需要在Vue3项目中安装AMap API,可以通过以下命令进行安装: ``` npm install vue-amap --save ``` 2. 引入AMap API 在Vue3项目的main.js文件中引入AMap API: ```javascript import VueAMap from 'vue-amap'; Vue.use(VueAMap); VueAMap.initAMapApiLoader({ key: 'your amap key', plugin: ['AMap.PolyEditor', 'AMap.MouseTool'] }); ``` 其中,`your amap key`需要替换成自己的AMap API Key。 3. 绘制多边形 在Vue3组件中,可以通过以下代码绘制多边形: ```javascript <template> <div> <el-button @click="startDraw">开始绘制</el-button> <el-button @click="savePolygon">保存多边形</el-button> <el-button @click="clearPolygon">清除多边形</el-button> <div ref="map" style="height: 500px;"></div> </div> </template> <script> export default { data() { return { map: null, mouseTool: null, polygon: null }; }, mounted() { this.initMap(); }, methods: { initMap() { this.map = new AMap.Map(this.$refs.map, { zoom: 13, center: [116.397428, 39.90923] }); this.mouseTool = new AMap.MouseTool(this.map); }, startDraw() { this.mouseTool.polygon({ strokeColor: '#FF33FF', strokeOpacity: 0.2, strokeWeight: 3, fillColor: '#1791fc', fillOpacity: 0.4 }); AMap.event.addListener(this.mouseTool, 'draw', e => { this.polygon = e.obj; }); }, savePolygon() { const path = this.polygon.getPath(); const coordinates = path.map(item => [item.lng, item.lat]); // 将多边形的坐标信息通过axios发送到Django后端进行存储 axios.post('/api/polygon/', { coordinates }).then(response => { console.log(response.data); }); }, clearPolygon() { if (this.polygon) { this.map.remove(this.polygon); this.polygon = null; } } } }; </script> ``` 在上述代码中,通过`this.mouseTool.polygon()`方法创建一个多边形,并通过`AMap.event.addListener()`方法监听`draw`事件,获取绘制的多边形对象。在保存多边形时,通过`getPath()`方法获取多边形的坐标信息,并通过axios发送到Django后端进行存储。 4. 存储多边形 在Django后端中,可以通过以下代码存储多边形: ```python from django.db import models from django.contrib.postgres.fields import ArrayField class Polygon(models.Model): coordinates = ArrayField(ArrayField(models.FloatField())) def __str__(self): return str(self.coordinates) ``` 在上述代码中,通过`ArrayField`字段存储多边形的坐标信息。在存储多边形时,可以通过以下代码: ```python from django.http import JsonResponse from .models import Polygon def save_polygon(request): coordinates = request.POST.get('coordinates') polygon = Polygon(coordinates=coordinates) polygon.save() return JsonResponse({'status': 'success'}) ``` 在上述代码中,通过`request.POST.get()`方法获取前端发送的多边形坐标信息,并存储到数据库中。最后,通过`JsonResponse`返回存储结果。 以上就是在Vue3中,在AMap上绘制多边形,将多边形的坐标信息通过Django存入PostgreSQL数据库的完整流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值