Javascript 在谷歌地图中,用虚线边框画一个圆圈,并用颜色填充
我试图在谷歌地图上画一个带虚线边框的圆圈 我有一个函数画圈,它返回我lat,lngs的集合 我使用google maps多边形API绘制了一个圆,但是边界是一条连接线,而不是虚线 有什么想法吗?Javascript 在谷歌地图中,用虚线边框画一个圆圈,并用颜色填充,javascript,google-maps,google-maps-api-3,google-maps-markers,Javascript,Google Maps,Google Maps Api 3,Google Maps Markers,我试图在谷歌地图上画一个带虚线边框的圆圈 我有一个函数画圈,它返回我lat,lngs的集合 我使用google maps多边形API绘制了一个圆,但是边界是一条连接线,而不是虚线 有什么想法吗? 我发布我的代码以供参考: function drawCircle(point, radius, dir) { var d2r = Math.PI / 180; // degrees to radians var r2d = 180 / Math.PI; // radians to
我发布我的代码以供参考:
function drawCircle(point, radius, dir) {
var d2r = Math.PI / 180; // degrees to radians
var r2d = 180 / Math.PI; // radians to degrees
var earthsradius = 3963; // 3963 is the radius of the earth in miles
var points = 32;
// find the raidus in lat/lon
var rlat = (radius / earthsradius) * r2d;
var rlng = rlat / Math.cos(point.lat() * d2r);
var extp = new Array();
if (dir === 1) {
var start = 0;
var end = points + 1; // one extra here makes sure we connect the path
} else {
var start = points + 1;
var end = 0;
}
for (var i = start; (dir === 1 ? i < end : i > end); i = i + dir)
{
var theta = Math.PI * (i / (points/2));
ey = point.lng() + (rlng * Math.cos(theta)); // center a + radius x * cos(theta)
ex = point.lat() + (rlat * Math.sin(theta)); // center b + radius y * sin(theta)
extp.push(new google.maps.LatLng(ex, ey));
}
return extp;
}
var lineSymbol = {
path: 'M 0,-1 0,1',
strokeOpacity: 1,
scale: 4
};
var circle = new google.maps.Polygon({
path: drawCircle(new google.maps.LatLng
(center.latitude,
center.longitude),
radius/1609.344, 1),
strokeOpacity: 0.5,
icons: [{
icon: lineSymbol,
offset: '0',
repeat: '20px'
}],
strokeWeight: 2,
strokeColor: '#ffcb00',
fillColor: '#ffcb00',
fillOpacity: 0.1
});
return circle ;
函数绘图圆(点、半径、方向){
var d2r=Math.PI/180;//度到弧度
var r2d=180/Math.PI;//弧度到度
var earthsradius=3963;//3963是地球的半径,以英里为单位
var点=32;
//在lat/lon找到袭击者
var rlat=(半径/地球半径)*r2d;
var rlng=rlat/Math.cos(point.lat()*d2r);
var extp=新数组();
如果(dir==1){
var start=0;
var end=points+1;//这里的一个额外值确保我们连接路径
}否则{
var起点=点数+1;
var-end=0;
}
对于(变量i=start;(dir==1?iend);i=i+dir)
{
varθ=数学PI*(i/(点/2));
ey=点.lng()+(rlng*Math.cos(θ));//中心a+半径x*cos(θ)
ex=point.lat()+(rlat*Math.sin(θ));//中心b+半径y*sin(θ)
extp.push(新的google.maps.LatLng(ex,ey));
}
返回extp;
}
变量lineSymbol={
路径:“M 0,-1 0,1”,
频闪不透明度:1,
比例:4
};
var circle=new google.maps.Polygon({
路径:drawCircle(新的google.maps.LatLng
(中纬度,
中心经度),
半径/1609.344,1),
笔划不透明度:0.5,
图标:[{
图标:lineSymbol,
偏移量:“0”,
重复:“20px”
}],
冲程重量:2,
strokeColor:“#ffcb00”,
填充颜色:'#ffcb00',
填充不透明度:0.1
});
返回圈;
一个示例实现:
函数初始化(){
var mylatng=new google.maps.LatLng(0,0);
变量映射选项={
缩放:4,
中心:myLatLng,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
var map=new google.maps.map(document.getElementById(“地图画布”),mapOptions);
var半径=500000;
var marker=new google.maps.marker({
职位:myLatLng,
地图:地图
});
变量lineSymbol={
路径:“M 0,-1 0,1”,
频闪不透明度:1,
比例:4
};
var circlePoly=新的google.maps.Polyline({
路径:drawCircle(myLatLng,
半径/1609.344,1),
笔划不透明度:0,
图标:[{
图标:lineSymbol,
偏移量:“0”,
重复:“20px”
}],
冲程重量:2,
strokeColor:'红色',
填充颜色:'#ffcb00',
填充不透明度:0.1,
地图:地图
});
var circle=new google.maps.circle({
冲程重量:0,
fillColor:'黄色',
不透明度:.5,
地图:地图,
中心:myLatLng,
半径:半径
});
}
函数drawCircle(点、半径、方向){
var d2r=Math.PI/180;//度到弧度
var r2d=180/Math.PI;//弧度到度
var earthsradius=3963;//3963是地球的半径,以英里为单位
var点=32;
//在lat/lon找到袭击者
var rlat=(半径/地球半径)*r2d;
var rlng=rlat/Math.cos(point.lat()*d2r);
var extp=新数组();
如果(dir==1){
var start=0;
var end=points+1;//这里的一个额外值确保我们连接路径
}否则{
var起点=点数+1;
var-end=0;
}
对于(var i=启动;
(dir===1?iend);i=i+dir){
varθ=数学PI*(i/(点/2));
ey=点.lng()+(rlng*Math.cos(θ));//中心a+半径x*cos(θ)
ex=point.lat()+(rlat*Math.sin(θ));//中心b+半径y*sin(θ)
extp.push(新的google.maps.LatLng(ex,ey));
}
返回extp;
}
初始化()代码>
#地图画布{
高度:150像素;
}
查看并使用多段线我已经看到了此解决方案,但它无法填充内部颜色@Brettgregson然后画一个圆(无边框),并在圆上方画一条多段线。尝试找出正确的方法,而不是艰难的方法@MrUpsidownWell您不能将图标
用于多边形或圆类(查看文档)。因此,除了画一个圆(作为背景)并在上面画点多段线,我真的看不到任何其他方法。