아래 함수는 4 점 중 다각형 사각형을 만들고 마지막 5 점이 사각형을 닫았다 고 가정합니다. 최소 24 점을 가져 와서 원을 만들어야합니다. 어떤 아이디어?사각형이 아닌 MySQL 다각형 원을 그리는 방법은 무엇입니까?
function getRadius($point="POINT(-29.8368 30.9096)", $radius=2)
{
$km = 0.009;
$center = "GeomFromText('$point')";
$radius = $radius*$km;
$bbox = "CONCAT('POLYGON((',
X($center) - $radius, ' ', Y($center) - $radius, ',',
X($center) + $radius, ' ', Y($center) - $radius, ',',
X($center) + $radius, ' ', Y($center) + $radius, ',',
X($center) - $radius, ' ', Y($center) + $radius, ',',
X($center) - $radius, ' ', Y($center) - $radius, '
))')";
$query = $this->db->query("
SELECT id, AsText(latLng) AS latLng, (SQRT(POW(ABS(X(latLng) - X({$center})), 2) + POW(ABS(Y(latLng) - Y({$center})), 2)))/0.009 AS distance
FROM crime_listing
WHERE Intersects(latLng, GeomFromText($bbox))
AND SQRT(POW(ABS(X(latLng) - X({$center})), 2) + POW(ABS(Y(latLng) - Y({$center})), 2)) < $radius
ORDER BY distance
");
if($query->num_rows()>0){
return($query->result());
}else{
return false;
}
}
하여 JS 버전 아래
이것은
var findCirclePolygons = function(point, r)
{
var d2r = Math.PI/180;
this.circleLatLngs = new Array();
numPoints = 24;
var circleLat = r * 0.009; // Convert degrees into km
var circleLng = circleLat/Math.cos(point.lat() * d2r);
for (var i = 0; i < numPoints + 1; i++) {
var theta = Math.PI * (i/(numPoints/2));
var vertexLat = point.lat() + (circleLat * Math.sin(theta));
var vertexLng = parseFloat(point.lng()) + parseFloat((circleLng * Math.cos(theta)));
var vertextLatLng = new google.maps.LatLng(vertexLat, vertexLng);
this.circleLatLngs.push(vertextLatLng);
}
// Set options
var options = {
paths: circleLatLngs,
strokeColor: "#0055ff",
strokeOpacity: 1,
strokeWeight: 1,
fillColor: "#0055ff",
fillOpacity: 0.35
};
// Return
return options;
};
이 숙제입니까? 있다면 숙제 태그를 추가하십시오. –
(X, Y)를 중심으로 원 안에있는 모든 점을 찾으려고하는 것 같습니다. (X, Y)에서 각 점의 거리를 계산하고 원하는 "반경"과의 거리를 확인하는 것이 좋습니다. –
... 그 역시 작동 할 수 있습니다. –