powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / c# конвертация гео координат в оконные x y
22 сообщений из 22, страница 1 из 1
c# конвертация гео координат в оконные x y
    #39428193
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Вопрос больше математический нежили программный. У меня имеется набор географических координат (WGS1984), в градусах:
Код: plaintext
1.
2.
3.
4.
С.Ш.       В.Д.
58.496     77.959
58.502     77.958
58.509     77.957
58.521     77.954
Эти координаты мне нужно отобразить в контроле Casvas в виде точек. Если я координаты буду использовать в таком виде, то они в окне отобразятся в виде одной точки, что не верно.
А мне нужно чтобы эти точки крупным планом позиционировались на весь контроле Casvas. Т.е. нужно как-то преобразовать эти координаты в границы контролла Casvas (x = 0 ... 500, y = 0 ... 250).

Может кто нибудь подсказать как выполнить это математическое преобразование?
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39428278
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нуууууу, порассуждал бы сам логически

У тебя градусный масштаб 360 по горизонтали и 360 по вертикали. Соответственно, множитель для широты у тебя 500/360=1,389, а для долготы - 250/360=0,694.

Только очевидно нужно еще для южной широты и западной долготы сделать числа отрицательными (ибо откладываются они в обе стороны от экватора и от нулевого меридиана и сдвинуть на +180 (чтобы из диапазона -180-180 получить диапазон 0-360)
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39428286
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или ты хочешь, чтобы крайние точки во вполне конкретном наборе координат находились на краю канваса, а все остальные - расположились относительно них?
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39428295
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProИли ты хочешь, чтобы крайние точки во вполне конкретном наборе координат находились на краю канваса, а все остальные - расположились относительно них?если так, тогда алгоритм такой
1) найти максимум и минимум значений координат
2) вычислить между ними разницу
3) разделить на эту разницу 500 (или 250) - получишь коэффициент
4) вычесть из каждой координаты минимальную координату и результат умножить на коэффициент

В случае, если нужно сохранить пропорции, нужно использовать единый коэффициент для x и y (минимальный)
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39428300
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProНуууууу, порассуждал бы сам логически

У тебя градусный масштаб 360 по горизонтали и 360 по вертикали. Соответственно, множитель для широты у тебя 500/360=1,389, а для долготы - 250/360=0,694.

Только очевидно нужно еще для южной широты и западной долготы сделать числа отрицательными (ибо откладываются они в обе стороны от экватора и от нулевого меридиана и сдвинуть на +180 (чтобы из диапазона -180-180 получить диапазон 0-360)

при помощи этих коэффициентов задачу решить не вышло, в окне приложения они все равно будут в виде одной точки. А нужно чтобы масштабировалось расположение точек на весь контрол Casvas (Size 500x250)
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39428303
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Nechto, сегодня, 09:40 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1254957&msg=20339646] [20339646]
>...Может кто нибудь подсказать ...

А если пойти несколько другим путём - посмотрите на это и это .

С уважением,
Владимир
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39428313
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВМоисеев>Nechto, сегодня, 09:40 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1254957&msg=20339646] [20339646]
>...Может кто нибудь подсказать ...

А если пойти несколько другим путём - посмотрите на это и это .

С уважением,
Владимир

Есть и такой вариант .
Задача по сути простая, и навешивать кучу библиотек для её решения не целесообразно.
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39428314
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProShocker.ProИли ты хочешь, чтобы крайние точки во вполне конкретном наборе координат находились на краю канваса, а все остальные - расположились относительно них?если так, тогда алгоритм такой
1) найти максимум и минимум значений координат
2) вычислить между ними разницу
3) разделить на эту разницу 500 (или 250) - получишь коэффициент
4) вычесть из каждой координаты минимальную координату и результат умножить на коэффициент

В случае, если нужно сохранить пропорции, нужно использовать единый коэффициент для x и y (минимальный)

Нужно чтобы эти точки масштабировались по границам контрола casvas (500x250).
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39428319
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoShocker.Proпропущено...
если так, тогда алгоритм такой
1) найти максимум и минимум значений координат
2) вычислить между ними разницу
3) разделить на эту разницу 500 (или 250) - получишь коэффициент
4) вычесть из каждой координаты минимальную координату и результат умножить на коэффициент

В случае, если нужно сохранить пропорции, нужно использовать единый коэффициент для x и y (минимальный)

Нужно чтобы эти точки масштабировались по границам контрола casvas (500x250).ну вот, действуй по этому алгоритму.
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39428322
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProУ тебя градусный масштаб 360 по горизонтали и 360 по вертикали. Соответственно, множитель для широты у тебя 500/360=1,389, а для долготы - 250/360=0,694.
Это только в очень грубом приближении.
Для менее приближенных расчетов нужно еще учитывать форму геоида.
А для относительно точных расчетов для WGS 84 нужно еще много чего учитывать.
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39428324
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще нужно не забыть про ориентацию координатной системы. Т.е. координатная система канваса будет соответствовать южной широте и восточной долготе, таким образом в других случаях ее надо "отзеркалить" (500-x и 250-y)
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39428326
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.учитывать форму геоида.все зависит от типа проекции геоида на плоскость, тут вообще куча вариантов
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39428935
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо все получилось!
Географические координаты перевел в нужную проекцию, и посчитал.
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39432058
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
// Извесные переменные
int widthCanvas
int heigthCanvas

double xIn
double yIn

double maxX
double minX
double maxY
double minY

// Вычисления
double koffX = (maxX - minX) / widthCanvas
double koffY = (maxY - minY) / heigthCanvas

int xPixel = Math.Round(((double)xIn - minX) / koffX, 0);
int yPixel = Math.Round(((double)yIn - minY) / koffY, 0);


Оказывается я не полностью решил задачу. Пропорции объектов в canvas не соблюдаются. Вы упоминали, что нужно какой-то минимальный коэффициент для соблюдения пропорций, а вот какой?

Да ещё хотелось бы понять как изменять масштаб объектов.
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39432064
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoПропорции объектов в canvas не соблюдаютсяну так понятно, вы же пытаетесь вписать координаты не в квадрат, а в прямоугольник, вот они и сплющиваются. Выберите ЕДИНЫЙ коэффициент для абсцисс и ординат (очевидно, наименьший из двух вычисленных)
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39432116
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProNechtoПропорции объектов в canvas не соблюдаютсяну так понятно, вы же пытаетесь вписать координаты не в квадрат, а в прямоугольник, вот они и сплющиваются. Выберите ЕДИНЫЙ коэффициент для абсцисс и ординат (очевидно, наименьший из двух вычисленных)

Покажите пожалуйста примером? А то я чё то не до понимаю.
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39432137
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
koff = min(koffX, koffY)
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39432143
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoДа ещё хотелось бы понять как изменять масштаб объектов.как раз-таки изменять этот полученный коэффициент
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39432475
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alibek B.koff = min(koffX, koffY)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
int widthCanvas
int heigthCanvas

double xIn
double yIn

double maxX
double minX
double maxY
double minY

// Вычисления
double koffX = (maxX - minX) / widthCanvas
double koffY = (maxY - minY) / heigthCanvas
double koffMin = koffX > koffY ? koffY : koffX;

int xPixel = Math.Round(((double)xIn - minX) / koffMin , 0);
int yPixel = Math.Round(((double)yIn - minY) / koffMin , 0);



Нашел минимальный коэффициент. Не выходит, объекты выходят за рамки canvas.
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39432480
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
int widthCanvas
int heigthCanvas

double xIn
double yIn

double maxX
double minX
double maxY
double minY

// Вычисления
double koffX = (maxX - minX) / widthCanvas
double koffY = (maxY - minY) / heigthCanvas
double koffMax = koffX < koffY ? koffY : koffX;

int xPixel = Math.Round(((double)xIn - minX) / koffMax , 0);
int yPixel = Math.Round(((double)yIn - minY) / koffMax , 0);



Получилось! Только вот нахождением не минимального а максимального коэффициента. Теперь объекты позиционируются правильно.

Только вот единственное всегда с левой стороны Canvas. Как можно сдвинуть их к центру?
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39432546
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
int widthCanvas
int heigthCanvas

double xIn
double yIn

double maxX
double minX
double maxY
double minY

// Масштаб
double scalle = 1

// Вычисления
double koffX = (maxX - minX) / widthCanvas
double koffY = (maxY - minY) / heigthCanvas
double koffMax = (koffX < koffY ? koffY : koffX) / scalle;

int centrX = //я так понимаю нужно найти максимальную по X и как-то посчитать смещение.
int centrX = //аналогично только по Y.

int xPixel = Math.Round(((double)xIn - minX) / koffMax , 0) + centrX;
int yPixel = Math.Round(((double)yIn - minY) / koffMax , 0) + centrY;
...
Рейтинг: 0 / 0
c# конвертация гео координат в оконные x y
    #39432621
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechtoминимального а максимального коэффициентада, конечно, он же в знаменателе...

Nechtoя так понимаю нужно найти максимальную по X и как-то посчитать смещение.для коэффициента, который совпадает с максимальным, считать смещение смысла нет, он будет нулевой.

для второй величины смещение будет пропорционально отношению коэффициентов. То есть например, для Y в формуле будут участвовать koffMax, koffY, heigthCanvas.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / c# конвертация гео координат в оконные x y
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]