jQuery 点击时提取drawingManager多边形路径Google Maps

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/15454919/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-26 15:05:30  来源:igfitidea点击:

Extract drawingManager polygon path Google Maps on click

javascriptjquerygoogle-mapsgoogle-maps-api-3polygon

提问by Yev

I have a Google map with drawing manager enabled where a user can draw a polygon and save it to my db. I added an event listener to the drawingManager object for the overlaycomplete event. When the event is fired, the coordinates of the polygon are written to a hidden field. This works great - the only problem being that if the individual vertices are dragged/changed after that point the event isn't fired. I need to either update the field on(any)change or iterate through the polygon vertices when the user hits submit and write them to the hidden field. I can't quite figure out how to get this to work, but you can see what I have so far here: http://jsfiddle.net/5Y4WT/21/

我有一个启用了绘图管理器的 Google 地图,用户可以在其中绘制多边形并将其保存到我的数据库中。我为overlaycomplete 事件向drawingManager 对象添加了一个事件侦听器。当事件被触发时,多边形的坐标被写入一个隐藏字段。这很有效 - 唯一的问题是,如果在该点之后拖动/更改单个顶点,则不会触发事件。当用户点击提交并将它们写入隐藏字段时,我需要在(任何)更改时更新字段或迭代多边形顶点。我不太清楚如何让它工作,但你可以在这里看到我到目前为止的内容:http: //jsfiddle.net/5Y4WT/21/

HTML:

HTML:

<div id="map_canvas" style="width:500px; height:450px;"></div>
<form method="post" accept-charset="utf-8" id="map_form">
  <input type="text" name="vertices" value="" id="vertices"  />
  <input type="button" name="save" value="Save!" id="save"  />
</form>

JavaScript:

JavaScript:

var map; // Global declaration of the map
var iw = new google.maps.InfoWindow(); // Global declaration of the infowindow
var lat_longs = new Array();
var markers = new Array();
var drawingManager;
function initialize() {
    var myLatlng = new google.maps.LatLng(40.9403762, -74.1318096);
    var myOptions = {
        zoom: 13,
        center: myLatlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP}
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    drawingManager = new google.maps.drawing.DrawingManager({
    drawingMode: google.maps.drawing.OverlayType.POLYGON,
    drawingControl: true,
    drawingControlOptions: {
                position: google.maps.ControlPosition.TOP_CENTER,
                drawingModes: [google.maps.drawing.OverlayType.POLYGON]
                },
                        polygonOptions: {
                            editable: true
                        }
            });
            drawingManager.setMap(map);

            google.maps.event.addListener(drawingManager, "overlaycomplete", function(event) {
                var newShape = event.overlay;
                newShape.type = event.type;
            });

            google.maps.event.addListener(drawingManager, 'overlaycomplete', function(event) {
                $('#vertices').val(event.overlay.getPath().getArray());
            });
        }
 initialize();

$(function(){
    $('#save').click(function(){
        //iterate polygon vertices?
    });
});

回答by Yev

Figured it out!!

弄清楚了!!

I added function overlayClickListener:

我添加了函数overlayClickListener:

function overlayClickListener(overlay) {
    google.maps.event.addListener(overlay, "mouseup", function(event){
        $('#vertices').val(overlay.getPath().getArray());
    });
}

and attached it to the overlay on overlaycomplete:

并将其附加到overlaycomplete上的叠加层:

google.maps.event.addListener(drawingManager, "overlaycomplete", function(event){
                overlayClickListener(event.overlay);
                $('#vertices').val(event.overlay.getPath().getArray());
            });

For the solution in action, see here: http://jsfiddle.net/rvsMH/1/

有关实际解决方案,请参见此处:http: //jsfiddle.net/rvsMH/1/