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

Откуда:
Сообщений: 405
Добрый день! впервые столкнулся с геоданными в sql.
Подскажите как можно найти вхождение точки в полигон.
Точки находятся в одной таблице (id, pointfrom(geometry), pointtill(geometry)), а полигоны в другой таблице (id, namepolygon(geometry).
Спасибо.
9 ноя 12, 15:56    [13447407]     Ответить | Цитировать Сообщить модератору
 Re: помогите с геоданными  [new]
iap
Member

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

в крайнем случае проверить на непустоту пересечение объектов "точка" и "полигон"?
Там же вроде была специальная функция (что-то лень в BOL лезть)
9 ноя 12, 16:00    [13447445]     Ответить | Цитировать Сообщить модератору
 Re: помогите с геоданными  [new]
iap
Member

Откуда: Москва
Сообщений: 47050
STIntersects
9 ноя 12, 16:05    [13447487]     Ответить | Цитировать Сообщить модератору
 Re: помогите с геоданными  [new]
AnaceH
Member

Откуда:
Сообщений: 109
temoxa,

STIntersection, Filter.
9 ноя 12, 16:05    [13447491]     Ответить | Цитировать Сообщить модератору
 Re: помогите с геоданными  [new]
AnaceH
Member

Откуда:
Сообщений: 109
temoxa,

Точнее, конечно же, STIntersects вместо STIntersection. Кстати, Filter зачастую работает быстрее, но результат менее точный.
9 ноя 12, 16:07    [13447511]     Ответить | Цитировать Сообщить модератору
 Re: помогите с геоданными  [new]
iap
Member

Откуда: Москва
Сообщений: 47050
AnaceH
temoxa,

STIntersection, Filter.
STIntersects сразу результат "пересекаются/не пересекаются" даёт
9 ноя 12, 16:08    [13447514]     Ответить | Цитировать Сообщить модератору
 Re: помогите с геоданными  [new]
iap
Member

Откуда: Москва
Сообщений: 47050
iap
AnaceH
temoxa,

STIntersection, Filter.
STIntersects сразу результат "пересекаются/не пересекаются" даёт
И Filter(), оказывается, тоже. Спасибо.
9 ноя 12, 16:10    [13447537]     Ответить | Цитировать Сообщить модератору
 Re: помогите с геоданными  [new]
temoxa
Member

Откуда:
Сообщений: 405
Select PointFrom
From test as ds
Inner Join (Select namepolygon From Zone) as polygons 
On polygons.STIntersects(PointFrom) = 1


Написал вот такой скриптик, тока шота оно ошибки валит...

Может кто-нить подможет!
9 ноя 12, 17:25    [13448242]     Ответить | Цитировать Сообщить модератору
 Re: помогите с геоданными  [new]
AnaceH
Member

Откуда:
Сообщений: 109
temoxa
Select PointFrom
From test as ds
Inner Join (Select namepolygon From Zone) as polygons 
On polygons.STIntersects(PointFrom) = 1


Написал вот такой скриптик, тока шота оно ошибки валит...

Может кто-нить подможет!

Зачем подзапрос (Select namepolygon From Zone)?
Select ds.PointFrom
From test as ds
Inner Join Zone as z
On z.namepolygon.STIntersects(ds.PointFrom) = 1
9 ноя 12, 17:35    [13448311]     Ответить | Цитировать Сообщить модератору
 Re: помогите с геоданными  [new]
temoxa
Member

Откуда:
Сообщений: 405
AnaceH,

подзапрос нужен для того, чтобы извлечь полигоны из другой бд)))

но вот ошибку все равно дает:

Msg 6522, Level 16, State 1, Line 1
A .NET Framework error occurred during execution of user-defined routine or aggregate "geometry":
System.ArgumentException: 24144: This operation cannot be completed because the instance is not valid. Use MakeValid to convert the instance to a valid instance. Note that MakeValid may cause the points of a geometry instance to shift slightly.
System.ArgumentException:
at Microsoft.SqlServer.Types.SqlGeometry.ThrowIfInvalid()
at Microsoft.SqlServer.Types.SqlGeometry.STIntersects(SqlGeometry other)
12 ноя 12, 10:11    [13456953]     Ответить | Цитировать Сообщить модератору
 Re: помогите с геоданными  [new]
temoxa
Member

Откуда:
Сообщений: 405
А вот и решение, может кому-нибудь пригодится...

Select ds.PointFrom, polygons.Name
From test.dbo.DowntimeStatistics as ds
Inner Join (Select Name, Polygon From DW_import_teletrack.dbo.Zone_Spatial) as polygons 
On polygons.Polygon.[b]MakeValid()[/b].STIntersects(ds.PointFrom) = 1
12 ноя 12, 10:47    [13457150]     Ответить | Цитировать Сообщить модератору
 Re: помогите с геоданными  [new]
AnaceH
Member

Откуда:
Сообщений: 109
temoxa
подзапрос нужен для того, чтобы извлечь полигоны из другой бд)))

Не нужен
temoxa
но вот ошибку все равно дает:

Он еще и способ решения дает.
сервер
Use MakeValid to convert the instance to a valid instance
12 ноя 12, 10:49    [13457163]     Ответить | Цитировать Сообщить модератору
 Re: помогите с геоданными  [new]
temoxa
Member

Откуда:
Сообщений: 405
Ребята, вопросик: если точка не входит в полигон, то как найти ближайший и расчитать дистанцию (в км) до него?

Спасибо.
13 ноя 12, 12:01    [13463704]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить