我试图创建一个应用程序来告诉我circle
中是否包含坐标。
因为每次我点击地图上的一个点我得到坐标。我想知道新的坐标是否包含在圆圈内
我还想知道如何让一个圆圈从坐标开始占据5米左右。在我的示例中,半径为:50000
但我不知道如何执行转换以设置以米为单位的值。
这是我的代码:
http://plnkr.co/edit/OI4sjcuS526rFYxPnvDv?p=preview
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
center: {lat:4.624335 , lng: -74.063644 },
zoom: 5,
});
//circle coordinates
var circle = new google.maps.Circle({
map: map,
radius: 50000,
fillColor: '#FFFFFF',
opacity:0,
center:{lat:4.624335 , lng: -74.063644 }
});
google.maps.event.addListener(map, 'click', function(e) {
//I get new coordinates ( e.latLng)
});
}
谢谢!
更新
他们已将此问题标记为重复,并使用此解决方案 (http://jsfiddle.net/kaiser/wzcst/embedded/result/)
但它并不能真正满足我的问题,因为正如您在图像中看到的那样,解决方案失败了。
答案 0 :(得分:2)
从我在你的问题中所理解的,你要做的是
在SO中有一篇关于此的帖子:Check if a latitude and longitude is within a circle google maps。如果您检查接受的答案(天才算法的Guffa),他使用此函数检查该点是否在半径范围内:
// credits to user:69083 for this specific function
function arePointsNear(checkPoint, centerPoint, km) {
var ky = 40000 / 360;
var kx = Math.cos(Math.PI * centerPoint.lat / 180.0) * ky;
var dx = Math.abs(centerPoint.lng - checkPoint.lng) * kx;
var dy = Math.abs(centerPoint.lat - checkPoint.lat) * ky;
return Math.sqrt(dx * dx + dy * dy) <= km;
}
现在,关于您要实现的目标,您只需在Click事件中添加即可。这是我做的:
google.maps.event.addListener(map, 'click', function(event) {
var click = event.latLng;
var locs = {lat: event.latLng.lat(), lng: event.latLng.lng()};
var n = arePointsNear(user, locs, diameter);
然后我添加了条件,如果函数返回true,标记将有一个标签“ I ”(内部的简称)。
if(n){
marker = new google.maps.Marker({
map: map,
position: locs,
label: {
text:"I", //marking all jobs inside radius with I
color:"white"
}
});
如果没有,那么标记将被标记为“ O ”(外部的缩写)......
}else{
marker = new google.maps.Marker({
map: map,
position: locs,
label: {
text:"O", //marking all jobs outside radius with O
color:"white"
}
});
}
});
以下是我创建的示例应用程序,以防您希望在行动中看到它: http://jsbin.com/hujusod/edit?js,output
这可能是Check if a latitude and longitude is within a circle google maps 的副本。或How To Display Content Based on Closest Lat/Long to Entered Address。
但是由于功能以不同的方式使用,我发布了我的答案,以帮助你做你原本打算做的事情。如果您需要
arePointsNear
功能,请随意提供答案。
我希望这有帮助!