Страница 1 из 1

[новичок] Как перевести расстояние в метрах в градусы?

Добавлено: 30 май 2010, 19:40
skaurus
Здравствуйте :)

Только начинаю разбираться с хранением гео-информации в БД... У меня есть база точек с координатами из яндекс-карт (это как я знаю wgs84, srid 4326); для каждой точки я знаю город в котором она находится. И есть задача для заданной точки найти все точки из базы, что находятся в определенном радиусе (поиск всегда в пределах одного города) и расстояние до них.

Радиус задается в метрах, и расстояние надо получать в метрах. Я вижу два пути - 1) хранить данные с другим srid (2163 ?), но я понятия не имею, какую погрешность внесу; 2) задавать радиус поиска не в метрах, а в градусах.

Мне больше нравится второй вариант, но - как пересчитать радиус поиска? Вероятно, учитывая что поиск всегда в пределах одного города, формулу пересчета можно будет упростить...

Re: [новичок] Как перевести расстояние в метрах в градусы?

Добавлено: 30 май 2010, 19:48
Максим Дубинин
попробуйте вот так считать

http://gis-lab.info/qa/great-circles.html

Re: [новичок] Как перевести расстояние в метрах в градусы?

Добавлено: 30 май 2010, 19:55
skaurus
Спасибо за ответ!

Но там, кажется, описан расчет расстояния между двумя lon-lat координатами; А мне бы нужно перевести абстрактные 1000 метров в X градусов :) Или невозможно длину отрезка в градусах посчитать и я спрашиваю чушь?

Re: [новичок] Как перевести расстояние в метрах в градусы?

Добавлено: 30 май 2010, 20:55
Дмитрий Барышников
1000 метров на разной широте равны разному кол-ву градусов

Re: [новичок] Как перевести расстояние в метрах в градусы?

Добавлено: 30 май 2010, 21:12
skaurus
Ок, но я всегда знаю широту точки, от которой веду поиск!

Re: [новичок] Как перевести расстояние в метрах в градусы?

Добавлено: 30 май 2010, 22:03
Максим Дубинин
да, немного не дочитал, пардон.

мне кажется второе проще, если в пределах одного города, можно просто 1 градус = 110.5 км, правда это на экваторе, наверное вопрос какая ошибка вас устроит...

Можете немного адаптировать по широте:
http://en.wikipedia.org/wiki/Longitude#Degree_length

Re: [новичок] Как перевести расстояние в метрах в градусы?

Добавлено: 31 май 2010, 03:11
skaurus
Спасибо за ссылку!

Она донесла до меня, что градус по широте и градус по долготе разной длины) Взяв за основу точное число точек, находящихся в километре от искомой (полученное медленной функцией, считающей расстояния по сфере), начал подбирать коэффициент перевода метров в градусы, чтобы воспользоваться быстрой функцией... В принципе, меня устроило геометрическое среднее:

1/sqrt( 111320*cos( lat ) * 111000.0)

Погрешность процентов 6 оказалась, но это очень приблизительно, я таблицу случайными данными набивал.

Re: [новичок] Как перевести расстояние в метрах в градусы?

Добавлено: 31 май 2010, 03:58
Игорь Черниенко
А в какой СУБД работаете?

Re: [новичок] Как перевести расстояние в метрах в градусы?

Добавлено: 31 май 2010, 04:02
skaurus
PostgreSQL + PostGIS
соответственно точная ф-ция у меня - это ST_Distance_Sphere, а быстрая - ST_Distance, она умеет использовать GiST. Так как данные я храню в WGS84, и чтобы индекс использовался, преобразование в другой srid на лету делать нельзя... пересчитываю метры в градусы)