我创建了一个从地图上的对象中绘制多个标记的函数。每个标记也会被推入一个数组中,以便以后访问它。
我的createMarker函数看起来像这样,并在initMap函数中调用:
function createMarker(markerData){
for(var i = 0; i < markerData.length; i++){
var testing = new google.maps.LatLng(parseFloat(markerData[i].lat), parseFloat(markerData[i].lng));
console.log(testing);
var marker = new google.maps.Marker({
animation: google.maps.Animation.DROP,
position: new google.maps.LatLng(parseFloat(markerData[i].lat), parseFloat(markerData[i].lng)),
map: myMap
});
markerBounds.extend(marker.position);
markerArray.push(marker);
}
}
但我的问题是,控制台日志只返回:
function (){return a}
而不是预期的lat lng对象。所以在我的markerArray中也没有lat lng坐标。但是标记仍然在地图上创建。
稍后我想将markerArray中的每个标记位置与当前用户位置进行比较。但我认为这不起作用,因为上述问题。
for (var i = 0; i < markerArray.length; i++) {
var markerPosition = new google.maps.LatLng(parseFloat(markerArray[i].lat), parseFloat(markerArray[i].lng));
if(google.maps.geometry.spherical.computeDistanceBetween(userPosition, markerPosition) < radius){
console.log('test');
}
}
我对此进行了研究但未找到答案。我得到的唯一信息是异步函数。
我希望你能理解这个问题。 :)
答案 0 :(得分:1)
我无法重现你的问题,但我的赌注是,你对于你在数组中添加了什么以及对象的属性有一些误解。让我明白一下:
lat
和lng
是getter函数,这意味着您应该调用,例如position.lat()以获取Float中的Lat坐标。position
属性,该属性是LatLng对象。
因此,如果您需要,例如标记的纬度:myMarker.position.lat()
在您的代码中,您将标记放在数组中,但在距离计算中,您需要位置:
所以这是一些有效的例子,我希望它有所帮助:
var myMarkerData = [{lat: -34.397, lng: 150.644}, {lat: -34.396, lng: 150.643}]
var markerArray = []
var userPosition = new google.maps.LatLng(-34.398, 150.645);
function createMarker(markerData){
for(var i = 0; i < markerData.length; i++){
var testing = new google.maps.LatLng(parseFloat(markerData[i].lat), parseFloat(markerData[i].lng));
console.log(testing);
var marker = new google.maps.Marker({
animation: google.maps.Animation.DROP,
position: new google.maps.LatLng(parseFloat(markerData[i].lat), parseFloat(markerData[i].lng)),
map: map
});
//markerBounds.extend(marker.position);
markerArray.push(marker);
}
}
var map;
function initialize() {
var mapOptions = {
zoom: 8,
center: {lat: -34.397, lng: 150.644}
};
map = new google.maps.Map(document.getElementById('map'),
mapOptions);
createMarker(myMarkerData)
for (var i = 0; i < markerArray.length; i++) {
//var markerPosition = new google.maps.LatLng(parseFloat(markerArray[i].position.lat()), parseFloat(markerArray[i].position.lng()));
var markerPosition = markerArray[i].position
console.log(markerPosition,userPosition)
var distance = google.maps.geometry.spherical.computeDistanceBetween(userPosition, markerPosition)
console.log(distance)
}
}
google.maps.event.addDomListener(window, 'load', initialize);