Рассчитать координаты квадрата карты от центра карты - PullRequest
0 голосов
/ 25 февраля 2019

Я хочу получить координаты углов прямоугольника.Или найти координаты самой северо-западной точки в 50 км от центра карты.

Кто-нибудь знает, как я могу это сделать?

Дело в том, когда я двигаюсь по картеЯ хочу всегда иметь прямоугольник (прямоугольник не нужно рисовать, мне просто нужны его координаты для запроса бэкенда), его углы всегда находятся в 50 км от текущего центра карты.

IЯ думаю об использовании как-то функции distance из CLLocation, но в этом случае у меня есть расстояние, но не одна из координат.

50km = mapCenterLocation.distance(from: coordinatesUnknown)

enter image description here

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Не совсем уверен, что вы имеете в виду, но, возможно, это может помочь

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 для расстояния.Для этой позиции вам нужно указать местоположение в центре карты.

edit: Для настраиваемого прямоугольника. Вы можете сначала проверить диагональную степень

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

Так что теперь вы можете получить эту возвращенную диагональСтепень и положить его в getNewTargetCoordinate.Новый подшипник имеет диагональ 270 + градус.

0 голосов
/ 25 февраля 2019

Не уверен, правильно ли я вас понимаю, но я думаю, что это может помочь или, по крайней мере, указать вам какое-то направление

CLLocationCoordinate2D northWest;

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

При этом вы получите координаты верхнего левого угла картыЯ думаю, вам просто нужно отрегулировать это, чтобы установить точку в 50 км от вашего центра и получить координаты с той же логикой.

...