2

を描いてMKCircleMKMapViewます。ポイントの座標をサーバーに送信し、円の内側にある領域に関連する情報を取得するには、円の境界線 (内側ではなく) 内のすべてのポイントを取得する必要があります。

また、円のcenter coordinateandradiusがあるので、この変数によってポイントを計算できるかもしれません。

ポイント座標を取得するにはどうすればよいですか?

4

2 に答える 2

3

点を計算しました. しかしご存知のように, すべての点を取得することはできません. しかし, このメソッドは円の約 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
}
于 2015-08-27T10:49:40.837 に答える
0

円の円周上には無限の点があるので、すべてを取得することは不可能です。

ただし、指定したポイントが円の境界上にあるかどうかは、あなた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 

この点と円の中心の間の距離は半径と同じなので、点は円周上にあります。

于 2015-08-27T08:50:10.013 に答える