谷歌地图v3绘制圆使用半正弦公式和折线

时间:2011-07-19 19:40:00

标签: google-maps-api-3 geometry polyline

我正在使用hasrsine公式和google.maps.Polyline在地图上绘制一个圆圈。我的代码中存在一个错误,导致通过它绘制一条直线来绘制圆。造成这种情况的错误是什么?如何纠正? (我需要使用折线绘制我的圆,以便我可以使用圆的点来确定给定的位置是否在圆圈内。因此,我没有使用google.maps.Circle)

请参阅以下代码:

var address=document.getElementById("address").value;
var radius=document.getElementById("radius").value;
var latitude=40;
var longitude=0;
geocoder.geocode( { 'address': address}, function(results, status){
if (status==google.maps.GeocoderStatus.OK){
latlng=(results[0].geometry.location);
latitude=latlng.lat();
longitude=latlng.lng();
}   

else{
    alert("Geocode was not successful for the following reason: " + status);
}
});





//Degrees to radians 
  var d2r = Math.PI / 180;

  //  Radians to degrees
 var r2d = 180 / Math.PI;

 // Earth radius is 3,963 miles
 var cLat = (radius / 3963) * r2d;

 var cLng = cLat / Math.cos(latitude * d2r);


  //Store points in array 
  var points = [];
alert("declare array");

  var bounds= new google.maps.LatLngBounds();

  // Calculate the points
  // Work around 360 points on circle
  for (var i=0; i < 360; i++) {

  var theta = Math.PI * (i/16);

  // Calculate next X point 
  circleY = longitude + (cLng * Math.cos(theta));            
   // Calculate next Y point 
  circleX = latitude + (cLat * Math.sin(theta));
    // Add point to array 
    var aPoint=new google.maps.LatLng(circleX, circleY);
    points.push(aPoint);
    bounds.extend(aPoint);

 }
 points.push(points[0]);//to complete circle

var colors=["#CD0000","#2E6444","#003F87" ];

var Polyline_Path = new google.maps.Polyline({
path: points,
strokeColor: colors[count],
// color of the outline of the polygon
strokeOpacity: 1,
// between 0.0 and 1.0
strokeWeight: 1,
// The stroke width in pixels
fillColor: colors[count],
fillOpacity: 0
});
Polyline_Path.setMap(map);

2 个答案:

答案 0 :(得分:1)

你在循环中theta的值需要从0到2 * PI来创建一个整圆。您的值从0到22.5 * PI。这意味着你将绕圆圈10.25次,最后从圆圈的四分之一处开始绘制一条线到你开始的点:这就是你要说的线。

尝试使用:

var theta = Math.PI *(i / 180);

虽然您可能还想减少点数:360段对于一个圆圈来说很多。我发现32通常绰绰有余。

答案 1 :(得分:1)

上面的答案是正确的,但是你说你不能使用API​​中的圆圈,因为你想在多边形检查中做一个点。您应该使用Circle类并进行距离检查以了解该点是否在圆圈中。您可以使用距离的实现或使用API​​(google.maps.geometry.spherical.computeDistanceBetween)。