gpt4 book ai didi

sql-server-2008 - Sql 2008 查询问题 - 地理多边形中存在哪些 LatLong?

转载 作者:行者123 更新时间:2023-12-04 07:06:58 27 4
gpt4 key购买 nike

我有以下两个表:-

地理形状

  • GeoShapeId INT 身份
  • 名称 VARCHAR(100)
  • ShapeFile GEOGRAPHY [这是一个闭合的纬度/经度多边形]

  • 犯罪地点
  • CrimeLocationId INT IDENTITY
  • LatLong GEOGRAPHY [这是一个纬度/经度点]

  • 现在,我有大约 10K GeoShape 结果和大约 500CrimeLocations。

    我试图找出所有 500 个犯罪纬度/经度点都存在于哪些 GeoShapes 中。

    :( 我就是不明白!我试图在子查询上执行 STIntersects 但没有奏效。有什么建议吗?

    干杯!

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

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

    最佳答案

    关于您的“编辑”,您通常不会看到包含“请不要提供...”的问题。肯定每一点都有帮助吗?特别是因为您实际上还没有向我们展示您对 STContains 的了解或 STIntersects (或 Filter() 就此而言)...

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

    以下查询返回 的数量犯罪地点 在每个 GeoShapes.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 分钟),因为我没有设置任何地理空间索引,而且我的 ShapeFiles 有很高的点数,但它确实运行成功。如果我想按照您的建议限制结果:
    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那里的子查询,或来自单独查询的总数的变量。

    够复杂吗?

    关于sql-server-2008 - Sql 2008 查询问题 - 地理多边形中存在哪些 LatLong?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/303927/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com