我有以下两个表格:-

GeoShapes

  • GeoShapeId INT身份
  • 名VARCHAR(100)
  • 形状的地理[这是一个封闭的面的Lat/渴望]

CrimeLocations

  • CrimeLocationId INT身份
  • 经纬度地理[这是一个纬度/经度点]

现在,我有周围10公里的GeoShape结果和周围500CrimeLocations.

我试图找出其GeoShapes所有500犯罪纬度/经度分存在。

(I只是没有得到它!我是想做一个 STIntersects 上查询,但没有工作。任何建议?

干杯!

编辑1:我不能使用任何 GEOMETRY 功能。因为(正如上文所述),这些都是所有地理类型。

编辑2:我知道如何使用 STContainsSTIntersects.请不要提供基本的实例。我的好奇心要做一个复杂的查询与我的表格结构,同上。

有帮助吗?

解决方案

关于你的编辑,它不是你经常看到的一个问题,包括"请不要提供...".当然,每一点帮助?特别是因为你没有实际上表示我们你的 知道关于 STContainsSTIntersects (或 Filter() 对于这个问题)...

无论如何,我有一个数据库的邮编和storelocations方便,所以我改名为表/列匹配你的(然后,我有6,535CrimeLocatoins和3,285GeoShapes).我想你已经想通了现在-但其他人可能会发现这很有用...

以下返回查询的数量 CrimeLocations 在每 GeoShapes.形状

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