SQL STDistance,两个位置都在同一记录中

时间:2018-12-01 22:17:25

标签: sql sql-server geography sqlgeography ogc

我是地理SQL查询的新手。我有两个桌子。 [station_information]用地理类型的空间列描述了自行车租赁站,而[bike_rides]有关于租赁自行车出行的信息。

[station_information]具有station_id作为主键,[bike_rides]具有to_station_id和from_station_id列,它们引用了自行车旅行的起点和终点。我想在[bike_rides]中创建一个距离列,其中每条记录的from_station_id和to_station_id之间的距离。

我该怎么做?我知道我必须加入表格并使用STDistance,但是我不知道。我查找的每个STDistance示例都为起点和终点创建变量,并使用STGeomFromText创建该点,或者使用来自两个不同表的空间列。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我正在设想您的架构,如下所示:

create table dbo.station_information (
   station_id int not null
      constraint PK_station_information primary key clustered (station_id),
   location geography not null
);

create table  dbo.bike_rides (
    bike_ride_id int not NULL
        constraint PK_bike_rides primary key clustered (bike_ride_id),
    from_station_id INT
        constraint [FK_bike_rides_origin]
        foreign key (from_station_id)
        references dbo.station_information (station_id),
    to_station_id INT
        constraint [FK_bike_rides_destination]
        foreign key (to_station_id)
        references dbo.station_information (station_id)
);

如果是这样,以下查询应从概念上帮助您解决问题:

select br.bike_ride_id, 
   origin.[location].STDistance(destination.[location])
from dbo.bike_rides as br
join dbo.station_information as origin
    on br.from_station_id = origin.station_id
join dbo.station_information as destination
    on br.to_station_id = destination.station_id;

查询中的联接只是正常的“联接回具有我想要的详细信息的位置”。唯一奇怪的事情(如果您可以称其为“奇怪”)是您有两个引用同一张表的列,因此您必须两次联接回该表(对于要获取详细信息的每个上下文一次)。

一旦执行了这些联接,就可以同时使用“起点和目的地”地理列,因此可以对它们进行所需的任何地理空间计算。