Широта Долгота & пиксельные координаты
От: pavel2011  
Дата: 21.06.12 15:05
Оценка:
У меня есть координаты вершин прямоугольника в широте и долготе к примеру
1) 50.1206918701132 29.9907961594281
2) 50.1204843220237 29.9910643222503
3) 50.1203695279562 29.9908492137306
4) 50.1205768957582 29.990581048775

Мне надо по координатам этих точек нарисовать прямоугольник.
Подскажите как пересчитатьв пиксельные координаты и я так понимаю масштабировать? Если область рисования будет скажем 400 на 300 пикселей
Re: Широта Долгота & пиксельные координаты
От: Bashka Россия  
Дата: 21.06.12 15:31
Оценка:
Здравствуйте, pavel2011, Вы писали:

P>У меня есть координаты вершин прямоугольника в широте и долготе к примеру

P>1) 50.1206918701132 29.9907961594281
P>2) 50.1204843220237 29.9910643222503
P>3) 50.1203695279562 29.9908492137306
P>4) 50.1205768957582 29.990581048775

P>Мне надо по координатам этих точек нарисовать прямоугольник.

P>Подскажите как пересчитатьв пиксельные координаты и я так понимаю масштабировать? Если область рисования будет скажем 400 на 300 пикселей

Ну что Вы... Нет конечно.
Форма фигуры (на экране, т.е. на плоскости) будет зависеть от картографической проекции и эллипсоида.
Вы должны использовать либо готовую либу (или API) для работы с проекциями, либо нарисовать ее самому.
Расчет плоских координат по широте и долготе — очень обширная тема, на которой существуют много лет крупные производители.
Поэтому лучше говорить о конкретной проекции.
А масштабировать конечно надо, но форма фигуры от этого не изменится, т.е. это уже вопрос техники.
Re[2]: Широта Долгота & пиксельные координаты
От: pavel2011  
Дата: 21.06.12 17:06
Оценка:
Здравствуйте, Bashka, Вы писали:

B>Здравствуйте, pavel2011, Вы писали:


P>>У меня есть координаты вершин прямоугольника в широте и долготе к примеру

P>>1) 50.1206918701132 29.9907961594281
P>>2) 50.1204843220237 29.9910643222503
P>>3) 50.1203695279562 29.9908492137306
P>>4) 50.1205768957582 29.990581048775

P>>Мне надо по координатам этих точек нарисовать прямоугольник.

P>>Подскажите как пересчитатьв пиксельные координаты и я так понимаю масштабировать? Если область рисования будет скажем 400 на 300 пикселей

B>Ну что Вы... Нет конечно.

B>Форма фигуры (на экране, т.е. на плоскости) будет зависеть от картографической проекции и эллипсоида.
B>Вы должны использовать либо готовую либу (или API) для работы с проекциями, либо нарисовать ее самому.
B>Расчет плоских координат по широте и долготе — очень обширная тема, на которой существуют много лет крупные производители.
B>Поэтому лучше говорить о конкретной проекции.
B>А масштабировать конечно надо, но форма фигуры от этого не изменится, т.е. это уже вопрос техники.



А если у меня будет плоская система координат типа пулково.
1) 544442.1 344451.6
2) 544441.2 344421.3
3) 544443.5 344451.4
3) 544453.8 344441.4
Re[3]: Широта Долгота & пиксельные координаты
От: Bashka Россия  
Дата: 21.06.12 17:44
Оценка:
Здравствуйте, pavel2011, Вы писали:

P>Здравствуйте, Bashka, Вы писали:


B>>Здравствуйте, pavel2011, Вы писали:


P>А если у меня будет плоская система координат типа пулково.

P>1) 544442.1 344451.6
P>2) 544441.2 344421.3
P>3) 544443.5 344451.4
P>3) 544453.8 344441.4

Тогда другое дело. Координаты (в метрах) для Пулково 42 (или 63) можно пересчитать в пиксели.
Но, нужно помнить, что поперечная проекция Меркатора (ее модификацией является Гаусса-Крюгера Пулково) делится на зоны.
Только в пределах одной зоны гарантирована минимальная погрешность проекции.
Re[4]: Широта Долгота & пиксельные координаты
От: Аноним  
Дата: 21.06.12 18:06
Оценка:
А как это делается? Я что то совсем запутался...
Re[5]: Широта Долгота & пиксельные координаты
От: Bashka Россия  
Дата: 22.06.12 09:40
Оценка:
Здравствуйте, Аноним, Вы писали:


А>А как это делается? Я что то совсем запутался...

Ничего страшного.
Узнаете разрешение экрана (в пикселах/дюйм или пикселах/метр). Это конечно, возможно узнать только системными средствами.
Если разрешение в пикселах/дюйм, то пересчитываете желаемый масштаб с коэфф. 1/дюйм.
Потом:
желаемый масштаб*разрешение экрана*координата угла прямоугольника.
Дальше уже пойдет рисование в пикселах.
Все.
Re: Широта Долгота & пиксельные координаты
От: Аноним  
Дата: 23.06.12 21:21
Оценка:
Здравствуйте, pavel2011, Вы писали:

P>У меня есть координаты вершин прямоугольника в широте и долготе к примеру

P>Мне надо по координатам этих точек нарисовать прямоугольник.

Чаще всего применяется такая проекция: http://wiki.openstreetmap.org/wiki/Mercator
Re[2]: Широта Долгота & пиксельные координаты
От: Bashka Россия  
Дата: 24.06.12 10:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Чаще всего применяется такая проекция: http://wiki.openstreetmap.org/wiki/Mercator


Абсолютно НЕВЕРНО.
Ваша ссылка на поперечную проекция Меркатора.
А чаще всего для изображения ВСЕЙ поверхности Земли используется "Прямая проекция Меркатора"
Например, это карта Google.

И OpenStreet — плохой выбор SDK.
Я с ней работал и могу сказать, что это совсем уж дохлая вещь.

Формулы прямой проекции Меркатора много проще, чем поперечной.
Сами смотрите насколько они просты: http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%D0%9C%D0%B5%D1%80%D0%BA%D0%B0%D1%82%D0%BE%D1%80%D0%B0
Автору вопроса нужны формулы для x,y.
Re[3]: Широта Долгота & пиксельные координаты
От: Аноним  
Дата: 24.06.12 17:55
Оценка:
Здравствуйте, Bashka, Вы писали:

B>Абсолютно НЕВЕРНО.


Go fuck yourself, dumbass.
Re: Широта Долгота & пиксельные координаты
От: AleksandrN Россия  
Дата: 29.06.12 10:17
Оценка:
Здравствуйте, pavel2011, Вы писали:

P>Подскажите как пересчитатьв пиксельные координаты и я так понимаю масштабировать? Если область рисования будет скажем 400 на 300 пикселей


Библиотека proJ умеет пересчитывать географические координаты в прямоугольные.

Вот небольшой пример:
#include <proj_api.h>
#include <stdio.h>

main(int argc, char **argv) {
    projPJ pj_merc, pj_latlong;
    projPJ pj_merc1, pj_latlong1;
    projPJ pj_merc2, pj_latlong2;
    double x, y;
    double x1, y1;
    double x2, y2;

    if (!(pj_merc = pj_init_plus("+proj=utm +ellps=WGS84 +datum=WGS84 +lon_0=0")) ) {
        printf("suxx 1\n");
        exit(1);
    }
    if (!(pj_latlong = pj_init_plus("+proj=latlong +ellps=WGS84")) ) {
        printf("suxx 2\n");
        exit(1);
    }

    if (!(pj_merc1 = pj_init_plus("+proj=utm +ellps=SGS85 +lon_0=0")) ) {
        printf("suxx 3\n");
        exit(1);
    }
    if (!(pj_latlong1 = pj_init_plus("+proj=latlong +ellps=SGS85")) ) {
        printf("suxx 4\n");
        exit(1);
    }

    if (!(pj_merc2 = pj_init_plus("+proj=latlong +ellps=SGS85 +lon_0=0")) ) {
        printf("suxx 5\n");
        exit(1);
    }
    if (!(pj_latlong2 = pj_init_plus("+proj=latlong +ellps=WGS84")) ) {
        printf("suxx 6\n");
        exit(1);
    }

    while (scanf("%lf %lf", &x, &y) == 2) {
        x *= DEG_TO_RAD;
        y *= DEG_TO_RAD;
        x1 = x2 = x;
        y1 = x2 = y;
        int p = pj_transform(pj_latlong, pj_merc, 1, 1, &x, &y, NULL );
        int p1 = pj_transform(pj_latlong1, pj_merc1, 1, 1, &x1, &y1, NULL );
        int p2 = pj_transform(pj_latlong2, pj_merc2, 1, 1, &x2, &y2, NULL );
        x2 /= DEG_TO_RAD;
        y2 /= DEG_TO_RAD;
        printf("%.2f\t%.2f; p=%d\n%.2f\t%.2f; p=%d\n%.2f\t%.2f; p=%d\n\n", x, y, p, x1, y1, p1, x2, y2, p2);
    }

    return 0;
}
Re[3]: Широта Долгота & пиксельные координаты
От: Aleх  
Дата: 04.07.12 01:23
Оценка:
Здравствуйте, Bashka, Вы писали:

B>И OpenStreet — плохой выбор SDK.

B>Я с ней работал и могу сказать, что это совсем уж дохлая вещь.

Там много инструментов идет. Что именно не понравилось? И что есть лучше?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.