如何创建特定大小的 SQL Server 地理多边形?

Posted

技术标签:

【中文标题】如何创建特定大小的 SQL Server 地理多边形?【英文标题】:How can I create SQL Server Geography polygons that are of a specific size? 【发布时间】:2012-01-16 09:39:16 【问题描述】:

我想为一个 80 公里 x 80 公里的城市创建一组多边形。给定一个起始纬度和经度,我的想法是我可以在该点上添加 80 公里,这样我就可以得到 4 个点来创建多边形。

(x,y) -> (x+80km, y) -> (x+80km, y+80km) -> (x, y+80km) -> (x,y)

我遇到的困难是找到一种方法来计算点 +80 公里。我找到了SQL Server Spatial Tools 并且有一个函数

SqlGeography LocateAlongGeog(SqlGeography g, double distance)

但到目前为止,我还没有弄清楚如何使用它。我将继续使用此功能,但如果我可以采取任何其他方法,或者如果有人知道如何正确使用此功能,我将不胜感激。

【问题讨论】:

我已经为半径搜索做过类似的事情,但这远非微不足道。我们在 T-SQL 中实现了 Haversine 公式,对此有一些解决方法。如今,您可以使用 CLR 存储过程来做到这一点。无论如何,这并不容易,因为当您向两极移动时,经度会变小。祝你好运。 这可能会有所帮助zodiacal.com/tools/lat_table.php @deathApril - 感谢您的链接。有趣的是,无论从赤道向北还是向南,距离都是一样的。 【参考方案1】:

经度是一个“大圆”度量,也就是说,如果你画一个代表地球周围特定经度的圆圈,它总是一个以地球中心为中心的圆圈 - 所以要以恒定经度环绕地球,你总是走相同的距离:

2 * PI * 6378 /* 6378 is the radius of the Earth in km */

因此,向北移动(即沿同一经度行进)80 公里将使您的纬度增加:

360 * 80 / (2 * PI * 6378) 

纬度比较棘手,因为当您在同一纬度环游地球时,行进的距离会根据您旅行的纬度而变化:但是,公式很简单,我查了一下:http://www.newton.dep.anl.gov/askasci/env99/env086.htm

2 * PI * 6378 * COS(LAT)   /* where LAT is your Latitude */

所以,如果你在纬度 LAT,向东移动 80 公里,你的经度会增加:

360 * 80 / (2 * PI * 6378 * COS(LAT))

需要注意的几点: a) 6378 只精确到最近的公里 b)你的两个北点之间的东/西不会精确到 80 公里——对于北纬 80 度和南纬 80 度之间的纬度没有显着差异——只要你不是在寻找高精度的精确定位(我'我猜你不是 80 公里的基本测量值)它会做得很好(比如在 Bing 或 Google 上点 nicelt) c) SQL 使用弧度而不是度数来计算三角函数 - 因此在 SQL 中,您的余弦将需要: COS(PI * LAT / 180)

HTH 并且有某种意义

【讨论】:

我最终做了类似的事情。感谢您的意见。

以上是关于如何创建特定大小的 SQL Server 地理多边形?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个嵌入多边形以进行地理围栏的圆形地理围栏区域?

SQL Server 地理:减小 WKT 文本的大小(小数精度)

查询以将在特定地理距离内的行返回到给定行(使用 sql server 2008)

Sql 2008 查询问题 - 哪个 LatLong 存在于地理多边形中?

Android 地理围栏(多边形)

如何计算具有特定中心的正方形多边形?