javascript - 计算 2 个纬度/经度之间道路折线上的距离

标签 javascript java google-bigquery geospatial postgis

这不是乌鸦飞的距离。

我正在寻找这样的 API:

distanceMiles = calculateMilesBetweenPointsAlongRoad(LatLon1, LatLon2, RoadPolyline)

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

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

由于数据摄取的速度,我想在没有空间查询的情况下执行此操作,但如果唯一的方法是将道路多段线存储在 BigQuery 或 PostGIS 中并持续对其进行查询,我会接受。

最佳答案

As a vehicle moves on road, I capture lat/lons. I want to calculate the distance the vehicle traveled between each reported 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) 返回输入 GEOGRAPHY 中线的总长度(以米为单位)

您可以阅读有关 ST_LENGTH here 的更多信息

关于javascript - 计算 2 个纬度/经度之间道路折线上的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55428292/

相关文章:

javascript - 从沙盒 iFrame 到主窗口的 PostMessage,origin 始终为 null

javascript - instanceof 自定义错误类返回 false

java - Intellij 中的目录错误

java - Android服务定期在后台执行任务?

sql - BigQuery基础知识-查询时的FROM子句

mysql - 从链接值中查找唯一用户

google-analytics - BigQuery 和 GA : Some ecom metrics like product revenue not assigned correctly to product list name

javascript - onclick 不适用于 selectpicker 多选下拉列表

javascript - 数组组合重复值

java - 循环遍历 hashmap 以创建具有内部函数的类实例