を描いてMKCircle
いMKMapView
ます。ポイントの座標をサーバーに送信し、円の内側にある領域に関連する情報を取得するには、円の境界線 (内側ではなく) 内のすべてのポイントを取得する必要があります。
また、円のcenter coordinate
andradius
があるので、この変数によってポイントを計算できるかもしれません。
ポイント座標を取得するにはどうすればよいですか?
点を計算しました. しかしご存知のように, すべての点を取得することはできません. しかし, このメソッドは円の約 40 点を返します. これで十分です.
internal func radiusSearchPoints(coordinate: CLLocationCoordinate2D, radius: CLLocationDistance) -> [CLLocationCoordinate2D] {
var points: [CLLocationCoordinate2D] = []
let earthRadius = 6_378_100.0
let π = Double.pi
let lat = coordinate.latitude * π / 180.0
let lng = coordinate.longitude * π / 180.0
var t: Double = 0
while t <= 2 * π {
let pointLat = lat + (radius / earthRadius) * sin(t)
let pointLng = lng + (radius / earthRadius) * cos(t)
let point = CLLocationCoordinate2D(latitude: pointLat * 180 / π, longitude: pointLng * 180 / π)
points.append(point)
t += 0.3
}
return points
}
円の円周上には無限の点があるので、すべてを取得することは不可能です。
ただし、指定したポイントが円の境界上にあるかどうかは、あなたcentre coordinate
とあなたのradius
原点における円の方程式は、パラメトリック方程式によって与えられます。
x = cos(angle) * radius
y = sin(angle) * radius
円の例:centre = (1, 1) radius = 2
および例point (3, 1)
dx = point.x - centre.x
dy = point.y - centre.y
dx = 3 - 1 = 2
dy = 1 - 1 - 0
angle = atan2(dy/dx) = 0
dx = cos(angle) * radius
rearranging gives:
radius = dx/cos(angle)
radius = 2/cos(0)
radius = 2/1
radius = 2
この点と円の中心の間の距離は半径と同じなので、点は円周上にあります。