如何在Google地图中使用圈子代替标记

时间:2014-04-01 20:50:41

标签: javascript jquery google-maps

我创建了一个gist来更清晰地包含我的代码:

我正在创建一个显示位置列表的基本应用,但不是显示确切位置的标记,我想使用半径为1000米的圆圈。目标是为这些位置添加一点隐私。页面上的文字会产生以下效果:"地图上的圆圈反映了其他用户的大致位置"。虽然隐私不是非常关键,但我不希望随机的人看地图并知道其他用户的地址。

我正在使用两个宝石:Geocoder和Gmaps4rails。地理编码工作正常。标记工作正常,但我无法弄清楚如何转移到圈子。

gmaps4rails dev指出(Github page)圈子是可能的,我只是不确定要改变什么。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您基本上只需要使用SVG circular path定义一个对象,并将其分配给标记的icon属性。这是我做过类似事情的一大块代码。请注意,您需要使用path定义和/或scale属性来获得所需的结果,但这会演示整个配方:

// Somewhere in your code you define an object you'll use as an icon.
// You only need to instantiate this once.
var circleIcon = {
    path: 'M 0, 0 m -10, 0 a 10, 10 0 1, 0 20, 0 a 10, 10 0 1, 0 -20, 0',
    fillColor: '#00FFFF',
    fillOpacity: 0.0,
    scale: 1,
    strokeColor: '#00FFFF',
    strokeWeight: 2,
    strokeOpacity: 0.8
};


// Then elsewhere in your code you can create markers like this.
// Many markers can reference the same icon object.
var latLng = new google.maps.LatLng(33.9958, -80.8896);

var circleMarker = new google.maps.Marker({
    icon: circleIcon
    position: latLng,
    map: map
});


// Optionally, you can use methods like these set marker properties.
//circleMarker.setPosition(latLng );
//circleMarker.setVisible(true);
//circleMarker.setMap(map);

另一方面,关于保留"稍微隐私",听起来圆圈的中心仍然代表用户的真实位置。因此,您可能需要考虑在地理编码器出来的LatLng坐标中引入一些微妙的随机偏移。基于a quick review of decimal degrees,纬度和经度值的+/- 0.001到0.009的波动应该会给你一些大约100到1000米的晃动,这可能足以满足您的需要。如果我这样做,我可能会看一些样本点,并将他们的真实位置与他们的"随机偏移"进行比较。在我开始使用它之前的位置,主要是为了给它一个现实检查。