Вычислить длину полилиний в polygon (TSQL, геометрия)

#sql-server #tsql #spatial

#sql-сервер #tsql #пространственный

Вопрос:

У меня много полилиний (polyline) и многоугольник. Полилинии могут пересекаться с полигоном различными способами:

  1. нет пересечения (полилиния вне полигона)
  2. нет вставки (полилиния в полигоне)
  3. одно пересечение (полилиния начинается / заканчивается в polygon)
  4. множественные пересечения (полилиния может, например, начинаться в polygon, выходить из него, а затем возвращаться обратно внутрь …)

Мне нужно вычислить общую длину всех полилиний внутри полигона. Я использую MSSQL 2016 Экспресс-версии. Можно ли это сделать только с помощью TSQL?

Ответ №1:

Ответ да — TSQL является полным по Тьюрингу, что означает, что вы можете реализовать с его помощью любой алгоритм, который вы хотите. Он более удобен в использовании, чем машина Тьюринга, но (возможно) менее удобен, чем, например, C # с полноценной средой разработки.

Комментарии:

1. Я думаю, ваш ответ совершенно правильный, но никоим образом не помогает. Очевидно, мне следовало спросить: «Как это можно сделать?»

2. Это было немного косноязычно 🙂 Может быть, вы могли бы сначала попытаться реализовать логику в SQL, а затем, если вы столкнетесь с какой-то конкретной проблемой, касающейся использования SQL для выражения такой логики, тогда попросите помощи по конкретной проблеме.

3. 🙂 Я думаю, что 1. -3. не проблема, но у меня возникла «логическая» проблема с ситуацией 4. Если я проверю наличие взаимосвязей, и их будет, скажем, четыре, я не знаю, как (системно) определить, какие части полилинии находятся внутри полигона …?

4. Вероятно, лучше перефразировать вопрос как чисто геометрическую задачу, потому что это пока не имеет никакого отношения к SQL?

5. Вернет ли функция STUnion область действия полилинии внутри полигона?