Проблема с запросом Sql 2008 - какой LatLong существует в географическом полигоне?

StackOverflow https://stackoverflow.com/questions/303927

Вопрос

у меня есть следующие две таблицы:-

Геоформы

  • Идентификатор GeoShapeId INT
  • Имя VARCHAR(100)
  • ГЕОГРАФИЯ шейп - файла [ это замкнутый полигон с широтой / длинами ]

Места совершения преступлений

  • Идентификатор CrimeLocationId INT IDENTITY
  • ГЕОГРАФИЯ Латлонга [ это точка Широты /Лонга ]

Сейчас у меня есть около 10 тысяч результатов геошейпа и около 500 местоположений преступлений.

Я пытаюсь выяснить, внутри каких геофайпов существуют все 500 криминальных точек широты / длины.

:( Я просто не понимаю этого!Я пытался сделать STIntersects по подзапросу, но это не сработало.Есть какие-нибудь предложения?

ваше здоровье!

ПРАВКА 1:Я не могу использовать ни одного GEOMETRY функции ..потому что (как указано выше) все это географические типы.

ПРАВКА 2:Я знаю, как использовать STContains и STIntersects.Пожалуйста, не приводите простых примеров этого.Мне больше интересно выполнить сложный запрос с моей структурой таблицы, описанной выше.

Это было полезно?

Решение

Что касается ваших "правок", не часто вы видите вопрос, который включает в себя "пожалуйста, не предоставляйте ...".Конечно, каждая мелочь помогает?Особенно с тех пор, как вы на самом деле не показали нам, что вы делай знать о STContains или STIntersects (или Filter() если уж на то пошло)...

В любом случае, у меня была под рукой база данных почтовых индексов и местоположений магазинов, поэтому я переименовал таблицы / столбцы в соответствии с вашими (тогда у меня было 6535 криминальных кодов и 3285 геошейпов).Я предполагаю, что вы уже поняли это, но кто-то другой может счесть это полезным...

Следующий запрос возвращает количество Места совершения преступлений в каждом Геометрические фигуры.Шейп-файл

SELECT G.Name, COUNT(CL.Id)
FROM   GeoShapes G
INNER JOIN CrimeLocations CL ON G.ShapeFile.STIntersects(CL.LatLong) = 1
GROUP BY G.Name
ORDER BY 2 DESC

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

SELECT G.Name, COUNT(CL.Id)
FROM   GeoShapes G
INNER JOIN CrimeLocations CL ON G.ShapeFile.STIntersects(CL.LatLong) = 1
GROUP BY G.Name
HAVING COUNT(CL.Id) = 500

Конечно, вы не хотите жестко кодировать число 500, поэтому вы могли бы добавить COUNT(*) FROM CrimeLocations подзапрос там, или переменная с итогом из отдельного запроса.

Достаточно ли это сложно?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top