计算两条经纬度之间的一条道路的折线上的距离

时间:2019-03-30 04:53:13

标签: javascript java google-bigquery geospatial postgis

这不是乌鸦飞翔的距离。

我正在寻找这样的API:

distanceMiles = CalculationMilesBetweenPointsAlongRoad(LatLon1,LatLon2,RoadPolyline)

我有一条以折线表示的道路。

当车辆在这条道路上行驶时,我捕获经纬度。我想计算每个报告的LatLon之间的车辆行驶距离。

由于数据摄取的速度,我想在不进行空间查询的情况下执行此操作,但是如果唯一的方法是将道路折线存储在BigQuery或PostGIS中并不断对其进行查询,那我就可以了。

1 个答案:

答案 0 :(得分:3)

  

当车辆在道路上行驶时,我捕获经纬度。我想计算每个报告的LatLon之间的车辆行驶距离。

让我用飓风玛丽亚在2017年所做的计算距离的场景来模拟您的用例

在查询下面为此“准备”数据(BigQuery标准SQL):

#standardSQL
WITH points AS (
    SELECT ROW_NUMBER() OVER(ORDER BY iso_time) pos,
        ST_GEOGPOINT(longitude, latitude) AS point
    FROM `bigquery-public-data.noaa_hurricanes.hurricanes`
    WHERE name LIKE '%MARIA%' AND season = '2017'
        AND ST_DWITHIN(ST_GEOGFROMTEXT('POLYGON((-179 26, -179 48, -10 48, -10 26, -100 -10.1, -179 26))'), ST_GEOGPOINT(longitude, latitude), 10)
), lines AS (
    SELECT pos, ST_MAKELINE(LAG(point) OVER(ORDER BY pos), point) line
    FROM points
) 
SELECT pos, line
FROM lines
WHERE pos > 1

上方可以显示为

enter image description here

现在,下面计算飓风“穿越”的距离

#standardSQL
WITH points AS (
  SELECT ROW_NUMBER() OVER(ORDER BY iso_time) pos,
    ST_GEOGPOINT(longitude, latitude) AS point
  FROM `bigquery-public-data.noaa_hurricanes.hurricanes`
  WHERE name LIKE '%MARIA%' AND season = '2017'
    AND ST_DWITHIN(ST_GEOGFROMTEXT('POLYGON((-179 26, -179 48, -10 48, -10 26, -100 -10.1, -179 26))'), ST_GEOGPOINT(longitude, latitude), 10)
), lines AS (
  SELECT pos, ST_MAKELINE(LAG(point) OVER(ORDER BY pos), point) line
  FROM points
) 
SELECT SUM(ST_LENGTH(line)) path_length
FROM lines
WHERE pos > 1

enter image description here

注意:ST_LENGTH(geography_expression)返回地理输入中线的总长度(以米为单位)

您可以了解有关ST_LENGTH here

的更多信息