从地图中心计算地图正方形的坐标

时间:2019-02-25 15:44:49

标签: ios mapkit cllocation cllocationcoordinate2d

我想获取矩形角的坐标。或找到距地图中心50公里的最西北点的坐标。

有人知道我该怎么做吗?

问题是当我在地图上移动时,我总是希望有一个矩形(该矩形不需要绘制,我只需要后端请求的坐标即可),它的拐角总是与当前位置相距50 km地图的中心。

我正在考虑以某种方式使用distance中的CLLocation函数,但是在这种情况下,我有距离,但没有坐标之一。

50km = mapCenterLocation.distance(from: coordinatesUnknown)

enter image description here

2 个答案:

答案 0 :(得分:1)

不确定您的意思,但这也许可以帮忙

func getNewTargetCoordinate(position: CLLocationCoordinate2D, userBearing: Float, distance: Float)-> CLLocationCoordinate2D{
    //haversine formula 
    //r is earth radius
    let r = 6378140.0
    let latitude1 = position.latitude * (Double.pi/180);
    let longitude1 = position.longitude * (Double.pi/180);
    //bearing for user heading in degree
    let brng = Double(userBearing) * (Double.pi/180);

    //calculating user new position based on user distance and bearing can be seen at haversine formula
    var latitude2 = asin(sin(latitude1)*cos(Double(distance)/r) + cos(latitude1)*sin(Double(distance)/r)*cos(brng));
    var longitude2 = longitude1 + atan2(sin(brng)*sin(Double(distance)/r)*cos(latitude1),cos(Double(distance)/r)-sin(latitude1)*sin(latitude2));

    //converting latitude as degree 
    latitude2 = latitude2 * (180/Double.pi)
    longitude2 = longitude2 * (180/Double.pi)

    // return location of user
    return CLLocationCoordinate2DMake(latitude2, longitude2)
}

此功能适用于NE方向和距离(以米为单位) 对于西北方向,我认为您可以只将135表示度,将5000表示距离。 对于位置,您需要放置地图中心位置。

编辑: 对于自定义矩形。您可以先检查对角线度

func getDiagonalDegree(x: Float, y:Float) -> Float{
    return atan2(y,x)*(180/Double.pi)
}

因此,现在您可以将返回的对角度设为,并将其放在getNewTargetCoordinate中。新方位是270 + diagonalDegree。

答案 1 :(得分:0)

不确定我是否正确理解了您,但是我认为这可能会有所帮助,或者至少会向您指明方向

CLLocationCoordinate2D northWest;

northWest = [mapView convertPoint:CGPointMake(0, 0) toCoordinateFromView:mapView];

通过此操作,您将获得地图左上角的坐标,我想您只需要进行调整即可将点设置为距中心50公里,并以相同的逻辑获得坐标。