如何表示两个坐标之间的距离

How to represent distances between two coordinates

我有一个简单的数据集,按记录有 2 个不同的坐标。

(dem_latitude&dem_longitude是一个坐标,html_latitude&html_longitude是另一个坐标)

我的主要目的是看看每对坐标之间的距离有多大。

澄清一下,我不想将距离视为数字,而是在地图中用易于识别的 2 个坐标(构成一对坐标)表示。

我能想到但不知道如何开发的解决方案:

  1. 我可以看到每个坐标是它的伙伴,也许通过一条线。

  2. 点击一个坐标等事件使伙伴坐标高亮

关于如何实施任何此解决方案的任何建议或实现我的 "main purpose" 的任何其他建议?

如果解决方案是使用所见即所得的 CartoDB 编辑器更好:)

CartoDB UI 和 CartoDB 所见即所得非常好且直观,但是当每行处理一个几何图形时。我不是专家,但我认为在这种情况下您需要使用您的开发人员超能力并且:

1 - 更改 table 架构并添加新列 distance

2 - 运行 根据点信息更新该列值的简单查询:

UPDATE <table_name> SET distance = (SELECT ST_Distance(
    ST_GeographyFromText(
      'SRID=4326;POINT(' || dem_longitude || ' ' || dem_latitude || ')'
    ),
    ST_GeographyFromText(
      'SRID=4326;POINT(' || html_longitude || ' ' || html_latitude || ')'
    )
  )
);

请记住,您可以使用 API 运行 查询,因此可以轻松地将此查询集成到任何向 table 添加数据以保持更新的回调中。

受@blat 的 启发,并在使用SRID 代码the_geom_webmercator[ 处理了很多奇怪的错误之后=26=] vs the_geom,我得到了这个解决方案:

select
  st_transform(
    st_makeline(
      st_setsrid(st_makepoint(html_longitude,html_latitude), 4326),
      st_setsrid(st_makepoint(dem_longitude,dem_latitude), 4326)
    ),
    3857 
  ) as the_geom_webmercator
from the_data_set

如果您还想显示起始点和终点,您必须为每个坐标对创建额外层,然后执行如下操作:

select
  cartodb_id,
  st_transform(
    st_setsrid(st_makepoint(dem_longitude,dem_latitude), 4326),
    3857 
  ) as the_geom_webmercator
from the_data_set

结果如下所示: