STIntersects在错误的lat / lng中

时间:2013-07-30 09:58:32

标签: sql-server geospatial

我在下面的查询中遇到了关于lat / lng顺序的问题,如果我把坐标放在错误的顺序(lng,lat),它就有效。然而地理:: Point应该采取lat然后lng,这是非常奇怪的。我试着检查谷歌地图上的lat / lng,它在正确的位置,顺时针顺序的多边形,一切看起来都很好,查询如下:

DECLARE @branch_id int = 0;
DECLARE @point geography;
SET @point = geography::Point(31.3353608924066, 30.0798141318826,  4326);

SELECT B.ID, B.DeliveryZone, A.LatLong 
FROM [dbo].[Branches] AS B
INNER JOIN [dbo].Addresses AS A ON B.AddressID = A.ID 
WHERE   B.ServiceProviderID = 2 AND
        B.Deleted = 0  AND
        B.DeliveryZone.STBuffer(1000).STIntersects( @point ) > 0 ;

enter image description here

1 个答案:

答案 0 :(得分:1)

SQL Server documentation for Point不一致。它说:

Lat - 是一个浮点表达式,表示正在生成的Point的x坐标。

纬度通常用作y坐标,即距离赤道有多远的北方或南方。

Long给出了同样的不一致:

Long - 浮点表达式,表示正在生成的Point的y坐标。

当然,经度通常被解释为x坐标,即距离本初子午线有多远的东西。

此外,所有SRID都没有使用lat和lng,只是定义了未注册的坐标系统(如4326),所以“Lat”和“Long”是文档中通用参数名称的不良选择。

根据文档中的这些问题,最有可能的是,对于EPSG 4326,数据库需要(x,y)顺序的坐标,因此(lng, lat) {{1} }。这也与大多数其他空间系统在EPSG 4326中定义坐标的方式一致。