2

我在以下查询中遇到了关于纬度/经度顺序的问题,如果我将坐标以错误的顺序(经度,纬度)放置,它会起作用。但是 geography::Point 应该采用 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 ;

在此处输入图像描述

4

1 回答 1

1

Point的SQL Server 文档不一致。它说:

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

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

对于 Long 给出了同样的不一致:

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

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

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

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

于 2014-04-15T18:39:56.447 回答