【问题标题】:How to represent distances between two coordinates如何表示两个坐标之间的距离
【发布时间】:2015-10-17 01:50:01
【问题描述】:

我有一个简单的数据集,其中包含 2 个不同的记录坐标。

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

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

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

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

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

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

关于如何实施这些解决方案的任何建议或任何其他建议以实现我的“主要目的”?

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

【问题讨论】:

    标签: cartodb


    【解决方案1】:

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

    【讨论】:

    • 非常有趣,它可以帮助我做另一件事,但在这种情况下,我正在寻找距离的图形表示,而不是作为数字的距离,我希望看到 2 个点并用线什么的连接起来。我已经对问题添加了一个说明“作为一个说明,我不想将距离视为一个数字,而是在地图中以易于识别的 2 个坐标(形成一对)表示。” ,我也更改了数据集截图,显示我不需要计算距离。
    【解决方案2】:

    受到@blat 的answer 的启发,并在处理了 SRIDs 代码the_geom_webmercatorthe_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
    

    结果如下:

    【讨论】:

    • 如果您对结果感到好奇,请检查this map,但我不确定它是否会长期处于活动状态。
    猜你喜欢
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2018-06-12
    相关资源
    最近更新 更多