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

时间:2015-10-16 10:26:45

标签: cartodb

我有一个简单的DataSet,它有2个不同的坐标记录。

enter image description here

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

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

作为澄清,我不想将距离看作数字,而是在地图中用2坐标(形成一对)来表示。

解决方案我可以想象,但我不知道如何发展:

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

  2. 点击一个坐标等事件会使合作伙伴坐标突出显示。

  3. 有关如何实施任何此解决方案或任何其他建议以实现我的主要目的的任何建议"?

    如果解决方案更好地使用WYSIWYG CartoDB编辑器:)

2 个答案:

答案 0 :(得分:2)

CartoDB UI和CartoDB WYSIWYG非常好且直观,但每行使用一个几何体时。我不是专家,但我认为在这种情况下你需要使用你的开发者超级大国并且:

1 - 更改表架构并添加新的列距离

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​​运行查询,因此很容易将此查询集成到任何回调中,该回调会将数据添加到表中以保持更新。

答案 1 :(得分:0)

受到@ blat answer的启发,以及使用 SRID代码 the_geom_webmercator 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

结果如下:

enter image description here