Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在谷歌地图中,用虚线边框画一个圆圈,并用颜色填充_Javascript_Google Maps_Google Maps Api 3_Google Maps Markers - Fatal编程技术网

Javascript 在谷歌地图中,用虚线边框画一个圆圈,并用颜色填充

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

我试图在谷歌地图上画一个带虚线边框的圆圈

我有一个函数画圈,它返回我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 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您不能将
图标
用于多边形或圆类(查看文档)。因此,除了画一个圆(作为背景)并在上面画点多段线,我真的看不到任何其他方法。