Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 Sql 2008查询问题-哪个LatLong';几何多边形中是否存在s?_Sql Server 2008_Latitude Longitude_Geography - Fatal编程技术网

Sql server 2008 Sql 2008查询问题-哪个LatLong';几何多边形中是否存在s?

Sql server 2008 Sql 2008查询问题-哪个LatLong';几何多边形中是否存在s?,sql-server-2008,latitude-longitude,geography,Sql Server 2008,Latitude Longitude,Geography,我有以下两个表格:- 地形 地理形状标识 名称VARCHAR(100) ShapeFile GEOGRAPHY[这是一个横向/纵向闭合多边形] 犯罪 CrimeLocationId INT标识 LatLong地理[这是一个Lat/Long点] 现在,我有大约10万个地理形状结果和大约500个犯罪记录 我正试图找出所有500个犯罪点所在的地理形状 :(我就是不明白!我试图对子查询执行STIntersects,但没有成功。有什么建议吗 干杯 编辑1:我不能使用任何几何体函数。因为(如上所述)

我有以下两个表格:-

地形

  • 地理形状标识
  • 名称VARCHAR(100)
  • ShapeFile GEOGRAPHY[这是一个横向/纵向闭合多边形]
犯罪

  • CrimeLocationId INT标识
  • LatLong地理[这是一个Lat/Long点]
现在,我有大约10万个地理形状结果和大约500个犯罪记录

我正试图找出所有500个犯罪点所在的地理形状

:(我就是不明白!我试图对子查询执行
STIntersects
,但没有成功。有什么建议吗

干杯

编辑1:我不能使用任何
几何体
函数。因为(如上所述)这些都是地理类型


编辑2:我知道如何使用
STContains
STIntersects
。请不要提供这方面的基本示例。我更好奇的是如何使用我的表结构进行复杂的查询。

关于您的“编辑”,您很少看到包含“请不要提供…”的问题.当然每一点都有帮助吗?特别是因为您还没有向我们展示您对
STContains
STIntersects
(或
Filter()
的了解)

无论如何,我手头有一个zipcodes和StoreLocation数据库,所以我重命名了表/列以匹配您的表/列(然后我有6535个深红色线和3285个地理图形)。我想您现在已经知道了-但是其他人可能会发现这很有用

以下查询返回每个地理形状中深红色的数量。ShapeFile

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分钟),因为我没有设置任何地理空间索引,并且我的shapefile有一个高点计数,但它确实成功运行。如果我想按照您的建议限制结果,请执行以下操作:

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-因此您可以从CrimeLocations
子查询中添加一个
COUNT(*),或者从单独的查询中添加一个包含总数的变量


这够复杂吗?

你应该粘贴你尝试过的东西,以及为什么它不起作用。这可能会给你更好的建议。没关系:)我不久前就找到了答案,这基本上就是我所做的。干杯,伙计!很高兴你明白了。我注意到这个问题有多老了,但我认为这对其他有同样问题的人来说是值得的。。。空间函数的伟大之处在于,一旦你了解了它们,你就可以很容易地做一些相当复杂的事情。