2013-07-30 28 views
2

我面对关于秩序问题纬度/经度在下面的查询,它的工作原理,如果我把坐标顺序错误(LNG,LAT)。然而,地理::点应采取经纬度,这是非常奇怪的。我试图检查谷歌地图的纬度/经度,它在正确的位置,以顺时针的顺序polygone,一切都看起来不错,查询如下:STIntersects在错误的纬度/经度

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

+0

是否有可能在分行表的地理空间数据是(长,LAT)命令? –

+0

我发现Google地图中的LAT/LON与其他空间应用程序的顺序错误... – DPSSpatial

回答

1

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

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

纬度通常被用作y坐标,也就是说,您距离赤道北方或南方有多远。

相同的不一致性,给出了长:

龙 - 是表示正在生成的点的y坐标的浮子表达。

当然,经度通常被解释为一个x坐标,也就是说,东西两边离主子午线有多远。

另外,lat和lng并不是所有SRID都使用的,只是那些定义了非投影坐标系(如4326)的,因此对于文档中的通用参数名称,“Lat”和“Long”是很差的选择。

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