1

我是 Spatialite 的新手。我有以下查询:

select A.* 
from linka as A, pointa as B 
where Contains(Buffer(B.Geometry, 100), A.Geometry)

我实际上想创建 100 米缓冲区并了解其中包含哪些链接。

我可以找到插入的“100”实际上是度数,它给了我在这个范围内的输出。

我也可以在我的查询中输入度数,但是从度数到米/公里的转换在世界各地并不相同。我浏览了许多站点并且能够知道大约 1 度 = 110 公里。但是从 GIS 专家和一些参考站点也可以了解地球上每个极点的不同之处。

例如,在阿尔塔/挪威,用于平面近似的度量 x 和 y 之间的差异是 x 方向上的 34 公里等于 y 方向上的 111 公里。使用地理坐标时,缓冲区看起来与此类似:http:
//extremelysatisfactorytotalitarianism.com/blog/wp-content/uploads/2010/08/tissot_indicatrix_equirectangular_proj.png

我构建了将地理数据转换为几何(X、Y 坐标格式)数据并在 Spatiallite 可以理解的地方进行转换的软件。

我还尝试阅读有关 SRID 的内容,但无法理解如何将其插入到我的查询中。

4

2 回答 2

0

如果您使用的是 SQL Server 2008 或更高版本,您应该能够使用空间类型

  1. 让我们假设链接包含地理列,它的名字是地理,它包含点
  2. 不要忘记创建空间索引!
  3. 尝试这个

    声明@buffer geography = geography::Point(1.234, 5.678, 4326); 声明@distance float = 100.0;

    SELECT * from linka WHERE linka.geo.STDistance(@buffer) < @distance

于 2014-02-19T14:59:10.723 回答
0

如果我假设您当前的投影是 WGS84,则将您的几何图形临时转换为公制投影(例如 UTM),请尝试以下语句

 transform (buffer (transform (B.geometry, #projection), #dist), 4326))

-in #projection:您的新投影,例如:WGS 84 / UTM zone 31N 的 32631(选择适合您的区域的投影)

-in #dist:以米为单位的距离

(WGS84 为 4326)

于 2014-02-20T22:33:44.843 回答