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

Как используя PostGIS вычислить пересечение 3-х окружностей?

Добавлено: 17 мар 2011, 18:14
aquam
Начальные данные: есть три окружности заданные точкой центра (широта и долгота) и радиусом в километрах.
Вопрос №1. Как вычислить полигоны окружностей и занести их в PostGIS?
Пока что нашёл функцию make_ellipse(cx float8, cy float8, a float8, b float8, slices float8),
но не знаю как вычислить a и b (у меня в километрах).

Вопрос №2. Как на основе сделанных полигонов окружностей вычислить полигон пересечения?

Спасибо!

Re: Как используя PostGIS вычислить пересечение 3-х окружнос

Добавлено: 17 мар 2011, 19:20
KolesovDmitry
aquam писал(а):Начальные данные: есть три окружности заданные точкой центра (широта и долгота) и радиусом в километрах.
Вопрос №1. Как вычислить полигоны окружностей и занести их в PostGIS?
Пока что нашёл функцию make_ellipse(cx float8, cy float8, a float8, b float8, slices float8),
но не знаю как вычислить a и b (у меня в километрах).
Если у вас данные в широта/долгота, а радиус в километрах, то можно сначала перепроецировать ваши данные в прямоугольную систему координат (или как это там называется?) при помощи ST_Transform, а потом считать в километрах.
aquam писал(а): Вопрос №2. Как на основе сделанных полигонов окружностей вычислить полигон пересечения?
Попробуйте ST_Intersection.

Re: Как используя PostGIS вычислить пересечение 3-х окружнос

Добавлено: 17 мар 2011, 20:35
aquam
Спасибо! Буду пробовать.

Re: Как используя PostGIS вычислить пересечение 3-х окружнос

Добавлено: 17 мар 2011, 22:40
aquam
Можно поподробней c первым вопросом где перепроецирование в прямоугольную систему координат?
Получается мне нужно использовать что-то вида make_ellipse(37, 53, ST_Transform(радиус), ST_Transform(радиус), 18) для получения полигона-окружности с центром в точке (37, 53)?

Re: Как используя PostGIS вычислить пересечение 3-х окружнос

Добавлено: 18 мар 2011, 07:58
KolesovDmitry
aquam писал(а):Можно поподробней c первым вопросом где перепроецирование в прямоугольную систему координат?
Получается мне нужно использовать что-то вида make_ellipse(37, 53, ST_Transform(радиус), ST_Transform(радиус), 18) для получения полигона-окружности с центром в точке (37, 53)?
Не, не так. Я бы попробовал что-то в этом роде:
* сначала создаете точку в системе координат широта/долгота
* потом перепроецируете эту точку при помощи ST_Transform в нужную систему координат
* в новой системе координат делаете хоть make_ellips, хоть буферные зоны вокруг нее.

Re: Как используя PostGIS вычислить пересечение 3-х окружнос

Добавлено: 18 мар 2011, 12:05
Denis Rykov
Пример:

Код: Выделить всё

SELECT AsText(ST_Buffer(ST_Transform(ST_SetSRID(ST_MakePoint(37,53),4326),3395),1000000));

Re: Как используя PostGIS вычислить пересечение 3-х окружнос

Добавлено: 20 мар 2011, 23:28
aquam
Спасибо!
Отличные советы!