Sql2008查询的问题-其经纬度的存在在一个地理面?
-
08-07-2019 - |
题
我有以下两个表格:-
GeoShapes
- GeoShapeId INT身份
- 名VARCHAR(100)
- 形状的地理[这是一个封闭的面的Lat/渴望]
CrimeLocations
- CrimeLocationId INT身份
- 经纬度地理[这是一个纬度/经度点]
现在,我有周围10公里的GeoShape结果和周围500CrimeLocations.
我试图找出其GeoShapes所有500犯罪纬度/经度分存在。
(I只是没有得到它!我是想做一个 STIntersects
上查询,但没有工作。任何建议?
干杯!
编辑1:我不能使用任何 GEOMETRY
功能。因为(正如上文所述),这些都是所有地理类型。
编辑2:我知道如何使用 STContains
和 STIntersects
.请不要提供基本的实例。我的好奇心要做一个复杂的查询与我的表格结构,同上。
解决方案
关于你的编辑,它不是你经常看到的一个问题,包括"请不要提供...".当然,每一点帮助?特别是因为你没有实际上表示我们你的 做 知道关于 STContains
或 STIntersects
(或 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
查询有,或者一个变量与总从一个单独的查询。
是复杂的足够了吗?
不隶属于 StackOverflow