Fast/Simple/Indexable 从数据库中提取半径或范围内地图上的点的方法
Fast/Simple/Indexable way to extract points on maps within a radius or range from database
抱歉标题不明确。这不是 的重复项
.这是详细的问题:
我有一个包含索引纬度和经度值的位置数据库。如果需要,我可以自由添加索引和索引计算列。
给我一个坐标点和一个距离(比如5km),我需要:
Returns该点5公里以内的所有点。
或如果更简单,地图上5km边的正方形内的所有点。
要求数据库查找操作尽可能简单。精度不是最重要的。稍后可能会在 client-side 处优化结果,因此如果需要,最好从服务器获得更多 return 个结果。
我使用的数据库是 SQL 服务器,如果重要的话。
编辑:抱歉,我在 post 第一个 post 时忘记了另一个问题。我还有一个类似的问题:
应用相同的规则,圆形或方形,现在每个目标点也有自己的半径。比方说,A 点具有 B 和 C 的 Lat、Lng 和 Radius 属性等。现在我需要提取具有其形状 collides 与源形状的点。
SQL 服务器有一个名为 spatial indexes 的功能。
Geography Methods Supported by Spatial Indexes
Under certain conditions, spatial indexes support the following
set-oriented geography methods: STIntersects(),STEquals(), and
STDistance(). To be supported by a spatial index, these methods must
be used within the WHERE clause of a query, and they must occur within
a predicate of the following general form:
geography1.method_name(geography2) comparison_operator valid_number
To return a non-null result, geography1 and geography2 must have the
same Spatial Reference Identifier (SRID). Otherwise, the method
returns NULL.
Spatial indexes support the following predicate forms:
geography1.STIntersects(geography2) = 1
geography1.STEquals(geography2) = 1
geography1.STDistance(geography2) < number
geography1.STDistance(geography2) <= number
您的 geography
对象可以是简单的点,这可能就足够了,因为您说过不需要高精度,尤其是当点的半径远小于 5 公里距离时。
您也可以用几个点来近似圆,例如,八边形可能是一个足够好的近似值。
查看可用的 spatial types 和方法,尝试几种方法并测试它们的性能。
您可能还会发现 STBuffer and/or BufferWithTolerance 方法可用于围绕您的点构建圆圈。
抱歉标题不明确。这不是
我有一个包含索引纬度和经度值的位置数据库。如果需要,我可以自由添加索引和索引计算列。
给我一个坐标点和一个距离(比如5km),我需要:
Returns该点5公里以内的所有点。
或如果更简单,地图上5km边的正方形内的所有点。
要求数据库查找操作尽可能简单。精度不是最重要的。稍后可能会在 client-side 处优化结果,因此如果需要,最好从服务器获得更多 return 个结果。
我使用的数据库是 SQL 服务器,如果重要的话。
编辑:抱歉,我在 post 第一个 post 时忘记了另一个问题。我还有一个类似的问题:
应用相同的规则,圆形或方形,现在每个目标点也有自己的半径。比方说,A 点具有 B 和 C 的 Lat、Lng 和 Radius 属性等。现在我需要提取具有其形状 collides 与源形状的点。
SQL 服务器有一个名为 spatial indexes 的功能。
Geography Methods Supported by Spatial Indexes
Under certain conditions, spatial indexes support the following set-oriented geography methods: STIntersects(),STEquals(), and STDistance(). To be supported by a spatial index, these methods must be used within the WHERE clause of a query, and they must occur within a predicate of the following general form:
geography1.method_name(geography2) comparison_operator valid_number
To return a non-null result, geography1 and geography2 must have the same Spatial Reference Identifier (SRID). Otherwise, the method returns NULL.
Spatial indexes support the following predicate forms:
geography1.STIntersects(geography2) = 1 geography1.STEquals(geography2) = 1 geography1.STDistance(geography2) < number geography1.STDistance(geography2) <= number
您的 geography
对象可以是简单的点,这可能就足够了,因为您说过不需要高精度,尤其是当点的半径远小于 5 公里距离时。
您也可以用几个点来近似圆,例如,八边形可能是一个足够好的近似值。
查看可用的 spatial types 和方法,尝试几种方法并测试它们的性能。
您可能还会发现 STBuffer and/or BufferWithTolerance 方法可用于围绕您的点构建圆圈。