Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Определить попадание точки в полигон  [new]
RasimS
Member

Откуда: SPB
Сообщений: 954
Добрый день, уважаемые форумчане. Подскажите, как можно решить задачу и возможно ли ее решить средствами Sql Server 2008
Есть географические данные. Сейчас они хранятся, не как тим geography, а в виде координат (широта, долгота) decimal
На вход подаются координаты полигона(широта,долгота). Возможно ли стандартными средствами сервера определить точки попадающие в полигон? Спасибо.
14 окт 11, 11:56    [11439847]     Ответить | Цитировать Сообщить модератору
 Re: Определить попадание точки в полигон  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Создать объект Geography и воспользоваться его функцией
14 окт 11, 12:31    [11440162]     Ответить | Цитировать Сообщить модератору
 Re: Определить попадание точки в полигон  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
http://msdn.microsoft.com/ru-ru/library/cc280766(v=SQL.100).aspx
14 окт 11, 12:32    [11440171]     Ответить | Цитировать Сообщить модератору
 Re: Определить попадание точки в полигон  [new]
aleks2
Guest
1. Поскольку в T-SQL доступны все необходимые математические фукнкции - канешно возможно.
2. Вам ишо и алгоритм?
а) Ну вычислите полный угол поворота радиус вектора из тестируемой точки при проходе по всем точкам вершин полигона. Для внутренней =360 градусов, для внешних < 360 градусов.
б) Вычислите число пересечений луча из тестируемой точки в бесконечность с ребрами полигона: нечетное = внутренняя точка, четное = внешняя.
в) Вычислите число пересечений отрезка из тестируемой точки в заведомо внутреннюю точку полигона с ребрами полигона: четное = внутренняя точка, нечетное = внешняя.
14 окт 11, 12:33    [11440174]     Ответить | Цитировать Сообщить модератору
 Re: Определить попадание точки в полигон  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
aleks2,

мне кажется, что владельцу SQL2008 не стоит напрягаться.

GEOGRAPHY, кроме всего прочего, обеспечивает вычисление
для эллипсоидальной модели Земли, то есть самому сделать
с такой точностью совсем не так просто.
Казалось бы, бери и пользуйся, раз уплочено! В чём проблема?
Там одна строчка получится - см. примеры.
14 окт 11, 13:11    [11440505]     Ответить | Цитировать Сообщить модератору
 Re: Определить попадание точки в полигон  [new]
RasimS
Member

Откуда: SPB
Сообщений: 954
iap
http://msdn.microsoft.com/ru-ru/library/cc280766(v=SQL.100).aspx

Спасибо за наводку. Попробую потестирую. Думаю использовать метод STIntersects
14 окт 11, 15:31    [11441988]     Ответить | Цитировать Сообщить модератору
 Re: Определить попадание точки в полигон  [new]
RasimS
Member

Откуда: SPB
Сообщений: 954
aleks2
1. Поскольку в T-SQL доступны все необходимые математические фукнкции - канешно возможно.
2. Вам ишо и алгоритм?
а) Ну вычислите полный угол поворота радиус вектора из тестируемой точки при проходе по всем точкам вершин полигона. Для внутренней =360 градусов, для внешних < 360 градусов.
б) Вычислите число пересечений луча из тестируемой точки в бесконечность с ребрами полигона: нечетное = внутренняя точка, четное = внешняя.
в) Вычислите число пересечений отрезка из тестируемой точки в заведомо внутреннюю точку полигона с ребрами полигона: четное = внутренняя точка, нечетное = внешняя.

Да я знаю этот метод. Думал его реализовывать, но хотелось понять возможно ли стандартными средствами решить вопрос. В любом случае спасибо
14 окт 11, 15:32    [11442001]     Ответить | Цитировать Сообщить модератору
 Re: Определить попадание точки в полигон  [new]
RasimS
Member

Откуда: SPB
Сообщений: 954
Начал разбираться с простр. типом данных. Возникает ошибка.
The specified input does not represent a valid geography instance because it exceeds a single hemisphere. Each geography instance must fit inside a single hemisphere. A common reason for this error is that a polygon has the wrong ring orientation.

Строю полигон. Я понимаю, что ошибка из-за координат полигона, но как вот их обработать не понимаю.
Вот пример
POLYGON((
28.82072512060405 59.607641010658945,
28.04756227880718 60.29982287251295,
31.8776709213853 60.29505175491393,
31.685410179197817 59.60833697556368,
28.82072512060405 59.607641010658945
))
Может кто сталкивался. Спасибо
15 окт 11, 18:10    [11446255]     Ответить | Цитировать Сообщить модератору
 Re: Определить попадание точки в полигон  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
RasimS
Начал разбираться с простр. типом данных. Возникает ошибка.
The specified input does not represent a valid geography instance because it exceeds a single hemisphere. Each geography instance must fit inside a single hemisphere. A common reason for this error is that a polygon has the wrong ring orientation.

Строю полигон. Я понимаю, что ошибка из-за координат полигона, но как вот их обработать не понимаю.
Вот пример
POLYGON((
28.82072512060405 59.607641010658945,
28.04756227880718 60.29982287251295,
31.8776709213853 60.29505175491393,
31.685410179197817 59.60833697556368,
28.82072512060405 59.607641010658945
))
Может кто сталкивался. Спасибо
Перечислите точки в обратном порядке.
Не в ту сторону закрутили. IMHO
15 окт 11, 18:46    [11446315]     Ответить | Цитировать Сообщить модератору
 Re: Определить попадание точки в полигон  [new]
RasimS
Member

Откуда: SPB
Сообщений: 954
iap, Спасибо.
15 окт 11, 22:32    [11446945]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить