首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >maps v3无法获得多边形完成后的更改事件

maps v3无法获得多边形完成后的更改事件
EN

Stack Overflow用户
提问于 2017-02-06 10:32:29
回答 1查看 1.7K关注 0票数 0

我有一个地图,我想画多边形,使用googlemaps v3。如果我自己绘制一个多边形,我就可以在getPath()上获得多边形的getPath事件,而不需要问题;但是如果我想让用户绘制多边形,那么我就无法从多边形抓取onChange事件。

我的想法是创建两个空多边形,并将其中一个用于drawingManager;一旦绘图管理器的多边形触发polygonComplete,我就将其路径复制到另一个多边形并去掉drawingManager,但这是行不通的。

html:

代码语言:javascript
运行
AI代码解释
复制
<div id="map"></div>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=drawing" type="text/javascript"></script>

css:

代码语言:javascript
运行
AI代码解释
复制
#map{
  height: 500px;
  width: 500px;
}

联署材料:

代码语言:javascript
运行
AI代码解释
复制
if (document.getElementById('map')){  

  var mapOptions = {
    zoom: 6,
    center: {lat: 24.886, lng: -70.268},
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };

  var field = new google.maps.Polygon({
    paths: [],
    editable: true
  });

  var map = new google.maps.Map(document.getElementById('map'), mapOptions);

  var drawingManager = new google.maps.drawing.DrawingManager({
    drawingMode: google.maps.drawing.OverlayType.POLYGON,
    polygonOptions: {
      editable: false
    },
    drawingControlOptions: {
      position: google.maps.ControlPosition.TOP_CENTER,
      drawingModes: [google.maps.drawing.OverlayType.POLYGON]
    }
  });
  drawingManager.setMap(map);

  google.maps.event.addListener(drawingManager, 'polygoncomplete', function(polygon) {
    drawingManager.setOptions({
      drawingMode: null,
      drawingControlOptions: {
        position: google.maps.ControlPosition.TOP_CENTER,
        drawingModes: []
      }
    });
    field.setPath(polygon.getPath().getArray());
    polygon.setMap(null);
    polygon = null;
    field.setMap(map);
  });

  google.maps.event.addListener(field.getPath(), 'set_at', function(index, obj) {
    // changed point, via map
    console.log(field.getPath());
    console.log("a point has changed");
  });
  google.maps.event.addListener(field.getPath(), 'insert_at', function(index, obj) {
    // new point via map
    console.log(field.getPath());
    console.log("a point has been added");
  });
  google.maps.event.addListener(field.getPath(), "remove_at", function(index, obj) {
    //removed point, via map
    console.log(field.getPath());
    console.log("a point has been removed");
  });
}

我还设置了一个代码示例这里

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-06 10:59:48

您需要移动在polygoncomplete事件处理程序函数中添加事件侦听器的代码。

相关问题:Javascript google地图绘制事件

代码语言:javascript
运行
AI代码解释
复制
google.maps.event.addListener(drawingManager, 'polygoncomplete', function(polygon) {
  drawingManager.setOptions({
    drawingMode: null,
    drawingControlOptions: {
      position: google.maps.ControlPosition.TOP_CENTER,
      drawingModes: []
    }
  });
  field.setPath(polygon.getPath().getArray());
  polygon.setMap(null);
  polygon = null;
  field.setMap(map);
  google.maps.event.addListener(field.getPath(), 'set_at', function(index, obj) {
    // changed point, via map
    console.log(field.getPath());
    console.log("a point has changed");
  });
  google.maps.event.addListener(field.getPath(), 'insert_at', function(index, obj) {
    // new point via map
    console.log(field.getPath());
    console.log("a point has been added");
  });
  google.maps.event.addListener(field.getPath(), "remove_at", function(index, obj) {
    //removed point, via map
    console.log(field.getPath());
    console.log("a point has been removed");
  });
});

概念小提琴的证明

代码片段:

代码语言:javascript
运行
AI代码解释
复制
var map;

function initialize() {
  if (document.getElementById('map')) {

    var mapOptions = {
      zoom: 6,
      center: {
        lat: 24.886,
        lng: -70.268
      },
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    var field = new google.maps.Polygon({
      paths: [],
      editable: true
    });

    map = new google.maps.Map(document.getElementById('map'), mapOptions);

    var drawingManager = new google.maps.drawing.DrawingManager({
      drawingMode: google.maps.drawing.OverlayType.POLYGON,
      polygonOptions: {
        editable: false
      },
      drawingControlOptions: {
        position: google.maps.ControlPosition.TOP_CENTER,
        drawingModes: [google.maps.drawing.OverlayType.POLYGON]
      }
    });
    drawingManager.setMap(map);

    google.maps.event.addListener(drawingManager, 'polygoncomplete', function(polygon) {
      drawingManager.setOptions({
        drawingMode: null,
        drawingControlOptions: {
          position: google.maps.ControlPosition.TOP_CENTER,
          drawingModes: []
        }
      });
      field.setPath(polygon.getPath().getArray());
      polygon.setMap(null);
      polygon = null;
      field.setMap(map);
      google.maps.event.addListener(field.getPath(), 'set_at', function(index, obj) {
        // changed point, via map
        for (var i = 0; i < field.getPath().getLength(); i++) {
          console.log(field.getPath().getAt(i).toUrlValue(6));
        }
        console.log("a point has changed");
      });
      google.maps.event.addListener(field.getPath(), 'insert_at', function(index, obj) {
        // new point via map
        for (var i = 0; i < field.getPath().getLength(); i++) {
          console.log(field.getPath().getAt(i).toUrlValue(6));
        }
        console.log("a point has been added");
      });
      google.maps.event.addListener(field.getPath(), "remove_at", function(index, obj) {
        //removed point, via map
        for (var i = 0; i < field.getPath().getLength(); i++) {
          console.log(field.getPath().getAt(i).toUrlValue(6));
        }
        console.log("a point has been removed");
      });
    });
  }
}
google.maps.event.addDomListener(window, "load", initialize);
代码语言:javascript
运行
AI代码解释
复制
#map {
  height: 500px;
  width: 500px;
}
代码语言:javascript
运行
AI代码解释
复制
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry,drawing"></script>
<div id="map"></div>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42074790

复制
相关文章
知识图谱属性与关系区别
实体关系分为两种,一种是属性property,一种是关系relation。其最大区别在于,属性所在的三元组对应的两个实体,常常是一个topic和一个字符串,如属性Type/Gender,对应的三元组(Justin Bieber, Type, Person),而关系所在的三元组所对应的两个实体,常常是两个topic。如关系PlaceOfBrith,对应的三元组(Justin Bieber, PlaceOfBrith, London)。
里克贝斯
2021/05/21
1.9K0
Python_类与实例的属性关系
从对象的相关知识我们知道,实例的内存中只有数据属性,准确的说应该是只有init构造函数中的数据,还不包括类中其他的数据属性。而类中既有init构造函数中的数据属性还有不在init构造函数中的数据,同时还包含类中的函数属性。 为什么要这样设计呢?因为我们可以通过类来实例化一个个不同的对象,如果此时把类的所有属性都存储在实例的内存中,那么所有的类的函数属性将重复的存放在内存中,这将极大的浪费电脑内存。所有当各个实例有需要的时候再去向类中取相应的函数属性就可以了,这样同时满足了功能的需要,又节省了内存空间。 所以,我们可以肯定的是:通过实例,我们可以访问类中的所有属性,但类却不同访问实例的属性。类既有数据属性也有函数属性,而实例只有数据属性。
py3study
2020/01/13
6970
Css中Position定位属性与层级关系
今天同事发现一个有意思的问题,关于position的层级关系的,他要不说我也没注意过 测试后果然有趣,有待深入研究: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Css中Position定位属性与层级关系</title> 6 <style type="text/css"> 7 #W{ 8
xing.org1^
2018/05/17
1.5K0
iOS基础·属性的修饰词与setter的关系
可以自己手动为实例变量在头文件 中声明setter、getter方法,并在实现文件中实现setter、getter方法。你也可以不声明不实现,但不要再企图调用setter、getter方法了,甚至点语法。
陈满iOS
2018/09/10
1.1K0
初识属性动画——使用Animator创建动画
ViewAnimation只支持几种动画:scale、transition、rotate、alpha四种类型。并且缺陷是只是改变了显示位置,实际位置并没有改变。 一个demo解释一切,如下图:
用户1108631
2019/08/17
7400
neo4j︱与python结合的py2neo使用教程(四)
版权声明:博主原创文章,微信公众号:素质云笔记,转载请注明来源“素质云博客”,谢谢合作!! https://blog.csdn.net/sinat_26917383/article/details/79901207
悟乙己
2019/05/26
9.1K0
py2neo 使用手册
neo4j︱与python结合的py2neo使用教程(四) Neo4j 简介及 Py2Neo 的用法 py2neo操作图数据库neo4j py2neo操作-官方样例
星辉
2021/12/06
1.3K0
ndarray 的创建及属性
上节课我们有提到过 ndarray 的创建,我只需要将列表传入到 np.array() 函数中。例如:
芯动大师
2022/11/15
4480
MySQL/Oracle索引的创建与使用
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
互联网金融打杂
2018/09/28
1K0
MySQL/Oracle索引的创建与使用
Promise对象的创建与使用
为什么要使用promise? 它指定回调函数的方式更加灵活,当new出一个promise的时候,这个任务就立刻开始执行了,后面的回调函数会在异步执行完后进行回调,在没有promise之前就不一样了:
gzq大数据
2021/06/08
9800
【Spring】——Spring的创建与使用
构建⼀辆车(Car Class),然而车需要依赖车身(FrameWork Class),而车身需要依赖底盘(Bottom Class),而底盘需要依赖轮胎(Tire Class),最终程序的实现代码如下
终有救赎
2023/10/16
1770
【Spring】——Spring的创建与使用
java 对象的创建与使用
HotSpot 是在 JIT 之后的一款 java 虚拟机的开源实现,sun 从 JDK 1.3.1 开始使用。 它主要使用 C++ 实现的,相对于 JIT,性能有大幅提高。 HotSpot 将部分代码直接编译为本地可执行代码,从而显著提升了性能。
用户3147702
2022/06/27
8660
java 对象的创建与使用
ovirt 上创建vm模板的创建与使用
版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://blog.csdn.net/wh211212/article/details/79977816
shaonbean
2019/05/26
1.9K0
MySQL/Oracle视图的创建与使用
视图是一个虚拟的表,是一个表中的数据经过某种筛选后的显示方式,视图由一个预定义的查询select语句组成。
互联网金融打杂
2018/08/02
1.4K0
线程的创建释放与使用
TerminateThread(m_hThreadHandle,0); // 线程句柄
ClearSeve
2022/02/11
6190
MySQL视图的创建与使用
视图是MySQL的一种虚拟表,实际的表我们可以看到每一行的数据,而视图是另一种形式的表,他可以将任何的查询结果变成一种虚拟的表方便下一次进行查询。
大猫的Java笔记
2020/09/30
2.3K0
JPA 的 CascadeType 属性 和 FetchType属性 和 各种映射关系
代码地址:https://gitee.com/a247292980/lgp20151222 
ydymz
2018/09/10
2.1K0
控件属性和InitializeComponent()关系:
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说控件属性和InitializeComponent()关系:,希望能够帮助大家进步!!!
Java架构师必看
2022/03/21
4441
控件属性和InitializeComponent()关系:
使用jQuery设置disabled属性与移除disabled属性
Readonly只针对input(text/ password)和textarea有效,而disabled对于所有的表单元素都有效,包括select,radio, checkbox, button等。
山河木马
2019/03/05
5K0
图数据库neo4j(二)python 连接neo4j
在完成安装之后,在python中调用py2neo即可,常用的有Graph,Node, Relationship。
学到老
2019/01/25
6.8K1
图数据库neo4j(二)python 连接neo4j

相似问题

允许用户使用密钥对SSH进入EC2 Linux实例

23

使用SSH密钥创建用户,不使用密码

10

如何通过ssh连接amazon linux

11

在Linux中与Amazon EC2的SSH连接

31

尝试通过azure门户使用ssh密钥服务为Azure linux vm中的现有用户更新SSH密钥

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档