在javascript中设置google地图标记图标属性
我正在尝试使用javascript从xml数据中“设置”标记的样式:在javascript中设置google地图标记图标属性,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我正在尝试使用javascript从xml数据中“设置”标记的样式: var title = 'Speed: '+$(this).find('Speed').text(); var lat = $(this).find('lat').text(); var lng = $(this).find('lng').text(); var markerCoords = new google.maps.LatLng(parseFloat(
var title = 'Speed: '+$(this).find('Speed').text();
var lat = $(this).find('lat').text();
var lng = $(this).find('lng').text();
var markerCoords = new google.maps.LatLng(parseFloat(lat), parseFloat(lng));
bounds.extend(markerCoords);
var marker = new google.maps.Marker({
position: markerCoords,
title: title,
icon: {
path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,
scale: 5,
strokeWeight: 2,
fillColor: '#009933',
fillOpacity: 1,
rotation: 0,
anchor: new google.maps.Point(0,2)
},
到目前为止,这个效果很好。我似乎不能对图标中的选项做同样的操作。以下是我尝试以完全不显示标记的相同方式放置旋转编号:
var marker = new google.maps.Marker({
position: markerCoords,
title: title,
icon: {
path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,
scale: 5,
strokeWeight: 2,
fillColor: '#009933',
fillOpacity: 1,
rotation: $(this).find('rotation').text(),
anchor: new google.maps.Point(0,2)
},
当我试图将其添加为变量时,它也不会:
var title = 'Speed: '+$(this).find('Speed').text();
var lat = $(this).find('lat').text();
var lng = $(this).find('lng').text();
var rotation = $(this).find('rotation').text();
var markerCoords = new google.maps.LatLng(parseFloat(lat), parseFloat(lng));
bounds.extend(markerCoords);
var marker = new google.maps.Marker({
position: markerCoords,
title: title,
icon: {
path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,
scale: 5,
strokeWeight: 2,
fillColor: '#009933',
fillOpacity: 1,
rotation: rotation,
anchor: new google.maps.Point(0,2)
},
我唯一能想到的是,整个图标需要作为一个长字符串输入,但我不知道如何完成
为清楚起见,数据本身来自xml文件:
<markers>
<marker>
<lat>50.11966</lat>
<lng>-5.54409</lng>
<Speed>0</Speed>
<rotation>0</rotation>
<icon>google.maps.SymbolPath.CIRCLE</icon>
<fillColor>#0099FF</fillColor>
</marker>
<marker>
<lat>50.12173</lat>
<lng>-5.53225</lng>
<Speed>200</Speed>
<rotation>0</rotation>
<icon>google.maps.SymbolPath.FORWARD_CLOSED_ARROW</icon>
<fillColor>#009933</fillColor>
</marker>
</markers>
编辑2:
这不是渲染。任何想法:
var title = 'Speed: '+$(this).find('Speed').text();
var lat = $(this).find('lat').text();
var lng = $(this).find('lng').text();
//var rotation = $(this).find('rotation').text();
var type = (function(foo) {
var arr = foo.find('icon').text().split('.');
return arr[arr.length-1];
})($(this))
var markerCoords = new google.maps.LatLng(parseFloat(lat), parseFloat(lng));
bounds.extend(markerCoords);
var marker = new google.maps.Marker({
position: markerCoords,
title: title,
icon: {
path: new google.maps.SymbolPath[arr],
scale: 5,
strokeWeight: 2,
fillColor: '#009933',
fillOpacity: 1,
rotation: parseInt($(this).find('rotation').text(), 10),
anchor: new google.maps.Point(0,2)
},
当我用这个的时候也没有:
icon: {
path: new google.maps.SymbolPath[type],
你能看到我是否错误地应用了你的代码吗?图标符号对象的旋转属性应该是一个数字,所以parseInt($(this).find('rotation').text(),10)代码>
根据下面的评论,您还有另一个问题,需要使用new
调用SymbolPath构造函数。至于如何从XML文件中获取值,您只需要以下代码:
var type = (function(foo) {
var arr = foo.find('icon').text().split('.');
return arr[arr.length-1];
})($(this));
然后在标记选项中
icon: {
path: new google.maps.SymbolPath[type]()
如果您可以更改XML文件,那么我建议将路径行减少为仅为SymbolPath值,如CIRCLE
编辑:
您需要确保为标记对象设置贴图。有两种方法可以做到这一点:
1) 在构造函数选项中执行此操作
var marker = new.google.maps.Marker({
map: myGoogleMap,
position: new google.maps.LatLng(x, y),
title: 'my marker',
icon: //blah, blah, blah
});
2) 在完成所有操作后,在循环中使用方法调用执行此操作:
for (var i=0, len=markers.length; i<len; ++i) {
markers[i].setMap(myGoogleMap);
}
for(var i=0,len=markers.length;iahh,这很有效。你知道我如何为strokeColor和路径的“字符串”工作吗?更新了我的答案。strokeColor现在应该可以像你写的那样工作了。我觉得我快接近了,但它仍然无法渲染。你有机会看看“编辑2”吗上面?哦,我将XML更改为显示前进箭头或圆圈。虽然您的代码中没有显示它,但我假设您设置了标记的map属性?marker.setMap(myGoogleMapObject);
I have:markers.push(marker);如果这样做的话,最后是什么?
for (var i=0, len=markers.length; i<len; ++i) {
markers[i].setMap(myGoogleMap);
}