Юго-западная и Северо-восточная точки - PullRequest
3 голосов
/ 22 октября 2009

Я разрабатываю приложение для iphone, которое использует API Google. У меня есть набор широт и логитов. Мне нужно найти точки юго-запада и северо-востока из этих точек. Как я могу это сделать?

заранее спасибо

Ответы [ 2 ]

3 голосов
/ 14 июля 2010

Принимая во внимание: A point (LAT, LNG) A distance or radius DIST 1° of latitude ~= 69 miles ~= 111 kms 1° of longitude ~= cos(latitude)*69 ~= cos(latitude)*111

Точка SW: lng_sw = LNG - (DIST / (abs(cos(radians(LAT))) * 111)) lat_sw = LAT - (DIST / 111)

NE точка: lng_ne = LNG + (DIST / (abs(cos(radians(LAT))) * 111)) lat_ne = LAT + (DIST / 111)

Если вы используете мили в качестве единицы измерения, используйте 69 вместо 111.

0 голосов
/ 06 февраля 2012

Это код C #, если кому-то нужно

 private double DegreeToRadian(double angle) {
     return Math.PI * angle / 180.0;
 }

 private bool CalculateNeSw(double distance, double lat, double lng, out MapPoint[] points) {
        /*
         * 1° of latitude ~= 69 miles ~= 111 kms, 1° of longitude ~= cos(latitude)*69 ~= cos(latitude)*111
         * SW.LNG = LNG - (DIST / abs(cos(radians(LAT))) * 111), SW.LAT = LAT - (DIST / 111)
         * NE.LNG = LNG + (DIST / abs(cos(radians(LAT))) * 111), NE.LAT = LAT + (DIST / 111)
         */
        points = new MapPoint[2];
        try {
            double deltaLat = distance / 69;
            double deltaLng = distance / Math.Abs(Math.Cos(DegreeToRadian(lat)) * 69);

            /* South-West */
            points[1] = new MapPoint {
                Lng = (lng - deltaLng).ToString(),
                Lat = (lat - deltaLat).ToString(),
                IsSet = true,
                FormattedAddress = "South-West"
            };

            /* North-East */
            points[0] = new MapPoint {
                Lng = (lng + deltaLng).ToString(),
                Lat = (lat + deltaLat).ToString(),
                IsSet = true,
                FormattedAddress = "North-East"
            };

            return true;
        }
        catch (Exception ex) {
            return false;
        }}

Примечания:

  • MapPoint - простой класс данных со свойствами Lat / Lon

  • Я использовал мили ==> 69

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...