0

我有多條折線,我想用可拖動標記綁定這些折線。當我嘗試用多段線綁定標記時,標記將消失。如何將多條折線綁定到可拖動標記

var locations = { 
    "feed1": [ 
     [25.774252, -80.190262], 
     [18.466465, -66.118292], 
     [32.321384, -64.75737] 
    ], 
    "feed2": [ 

     [32.321384, -64.75737], 
     [36.321384, -88.75737] 
    ], 
    "feed3": [ 

     [20.466465, -68.118292], 
     [34.321384, -66.75737], 
     [27.774252, -82.190262] 
    ] 
}; 

function MVCArrayBinder(mvcArray) { 
    this.array_ = mvcArray; 
} 
MVCArrayBinder.prototype = new google.maps.MVCObject(); 
MVCArrayBinder.prototype.get = function(key) { 
    if (!isNaN(parseInt(key))) { 
     return this.array_.getAt(parseInt(key)); 
    } else { 
     this.array_.get(key); 
    } 
} 
MVCArrayBinder.prototype.set = function(key, val) { 
    if (!isNaN(parseInt(key))) { 
     this.array_.setAt(parseInt(key), val); 
    } else { 
     this.array_.set(key, val); 
    } 
} 

function marFunc(event) { 
    console.log(event.latLng); 
    var path = poly.getPath(); 

    path.push(event.latLng); 
    var len = path.getLength(); 
    var marker = new google.maps.Marker({ 
     position: event.latLng, 
     map: map, 
     draggable: true 
    }); 
    marker.bindTo('position', poly.binder); 
} 

var poly; 
var map; 

function initialize() { 
    var polyOptions = { 
     strokeColor: '#000000', 
     strokeOpacity: 1.0, 
     strokeWeight: 3, 
     map: map 
    }; 
    poly = new google.maps.Polyline(polyOptions); 

    var bounds = new google.maps.LatLngBounds(); 
    map = new google.maps.Map(document.getElementById('map'), { 
     center: new google.maps.LatLng(25.774252, -80.190262), 
     zoom: 10, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 
    var markers = new Array(); 
    var polycoordinate = Array(); 

    poly.binder = new MVCArrayBinder(poly.getPath()); 
    for (var i in locations) { 
     for (j in locations[i]) { 
      var evt = {}; 
      evt.latLng = new google.maps.LatLng(locations[i][j][0], locations[i][j][1]); 
      bounds.extend(evt.latLng); 
      marFunc(evt); 
     } 
    } 
    poly.setMap(map); 
    map.fitBounds(bounds); 
} 
google.maps.event.addDomListener(window, "load", initialize); 

在我通過對象循環和在我傳遞的緯度經度的marFunc()函數來創建標記的同時呈現折線初始化()函數。

這就是我得到: enter image description here

回答

2

您在代碼中有一個錯字(你離開了「bindTo」函數的最後一個參數):

marker.bindTo('position', poly.binder); 

應該是:

marker.bindTo('position', poly.binder, (len-1).toString()); 

相關問題:Google Maps V3 Polyline : make it editable without center point(s)

proof of concept fiddle

screen shot of resulting map

代碼片段:

var locations = { 
 
    "feed1": [ 
 
    [25.774252, -80.190262], 
 
    [18.466465, -66.118292], 
 
    [32.321384, -64.75737] 
 
    ], 
 
    "feed2": [ 
 

 
    [32.321384, -64.75737], 
 
    [36.321384, -88.75737] 
 
    ], 
 
    "feed3": [ 
 

 
    [20.466465, -68.118292], 
 
    [34.321384, -66.75737], 
 
    [27.774252, -82.190262] 
 
    ] 
 
}; 
 

 
function MVCArrayBinder(mvcArray) { 
 
    this.array_ = mvcArray; 
 
} 
 
MVCArrayBinder.prototype = new google.maps.MVCObject(); 
 
MVCArrayBinder.prototype.get = function(key) { 
 
    if (!isNaN(parseInt(key))) { 
 
    return this.array_.getAt(parseInt(key)); 
 
    } else { 
 
    this.array_.get(key); 
 
    } 
 
} 
 
MVCArrayBinder.prototype.set = function(key, val) { 
 
    if (!isNaN(parseInt(key))) { 
 
    this.array_.setAt(parseInt(key), val); 
 
    } else { 
 
    this.array_.set(key, val); 
 
    } 
 
} 
 

 
function marFunc(event) { 
 
    var path = poly.getPath(); 
 

 
    path.push(event.latLng); 
 
    var len = path.getLength(); 
 
    var marker = new google.maps.Marker({ 
 
    position: event.latLng, 
 
    map: map, 
 
    draggable: true 
 
    }); 
 
    marker.bindTo('position', poly.binder, (len - 1).toString()); 
 
} 
 

 
var poly; 
 
var map; 
 

 
function initialize() { 
 
    var polyOptions = { 
 
    strokeColor: '#000000', 
 
    strokeOpacity: 1.0, 
 
    strokeWeight: 3, 
 
    map: map 
 
    }; 
 
    poly = new google.maps.Polyline(polyOptions); 
 

 
    var bounds = new google.maps.LatLngBounds(); 
 
    map = new google.maps.Map(document.getElementById('map'), { 
 
    center: new google.maps.LatLng(25.774252, -80.190262), 
 
    zoom: 10, 
 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    }); 
 
    var markers = new Array(); 
 
    var polycoordinate = Array(); 
 

 
    poly.binder = new MVCArrayBinder(poly.getPath()); 
 
    for (var i in locations) { 
 
    for (j in locations[i]) { 
 
     var evt = {}; 
 
     evt.latLng = new google.maps.LatLng(locations[i][j][0], locations[i][j][1]); 
 
     bounds.extend(evt.latLng); 
 
     marFunc(evt); 
 
    } 
 
    } 
 
    poly.setMap(map); 
 
    map.fitBounds(bounds); 
 
} 
 
google.maps.event.addDomListener(window, "load", initialize);
html, 
 
body, 
 
#map { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
}
<script src="https://maps.googleapis.com/maps/api/js"></script> 
 
<div id="map"></div>

+0

感謝回答這個真正解決問題,而是如何能分出折線,類似這樣的[鏈接](https://i.imgur.com/0Kf4KuP.png) –

+0

你的例子只包含一條折線。如果您想要多條多段線,則需要創建多條多段線,每條多段線都有其自己的綁定器對象。 – geocodezip

+0

所以,基本上我必須爲不同的折線創建不同的數組,並將它們綁定到它們各自的綁定器對象上? –

相關問題