【问题标题】:Calculating nearest places using Mysql GIS features使用 Mysql GIS 功能计算最近的地方
【发布时间】:2016-08-09 08:14:36
【问题描述】:

我们有 2 张表格,其中一张用于存储客户的行程请求,一张用于存储司机的行程请求。我们必须使用 MYSQL 5.7 GIS 功能向客户展示最近的司机,并向司机展示最近的客户。

两个表都存储请求的纬度和经度。
因此,如果司机要求旅行,我想计算距离并从客户请求表中向司机显示半径 10 公里内最近的客户及其位置。

我尝试了st_distance_sphere,它适用于(Point,Point)。 但是,如果我传入 multipointpoint 它会返回零。

multipoint,point 不应该返回所有第一点到第二点之间的距离吗?

如果我错了,请更正。我尝试的查询如下。

SELECT 
  round(
    st_distance_sphere(
      st_geomfromtext(
        'Multipoint(72.87765590000004 17.385044,73.8567436 18.5204303)'
      ), 
      st_geomfromtext(
         'POINT (73.8567436 18.5204303)'
      )
    )
  ) as dist;

【问题讨论】:

    标签: mysql database gis


    【解决方案1】:

    它返回两个几何图形之间的最近距离。在您的多点中,您有

    Multipoint(72.87765590000004 17.385044,73.8567436 18.5204303)
    

    这里的第二组点正是as

    POINT (73.8567436 18.5204303)'
    

    所以距离为 0 是正确的响应。

    如果您想找到给定点到多个不同点的距离,您需要将它们作为单独的记录在表中,并进行如下查询:

    SELECT 
      round(
        st_distance_sphere(some_point-field, 
          st_geomfromtext(
             'POINT (73.8567436 18.5204303)'
          )
        )
      ) as dist;
    

    【讨论】:

    • 我假设它返回到所有点的距离。我怎样才能得到所有点的距离?我的意思是任何可用的功能?
    • 是的,上面的查询会做到这一点(some_point_field 是每辆出租车的最后一个已知位置(在表中以行的形式存在))。您可能还想查看 ST_Within
    • 我已经将它们作为不同的记录。所以你建议我必须循环遍历,是吗?
    • 一旦你执行了那个查询,是的,你可以在你的程序中循环遍历它
    • st_within 根据 lat long 返回 0 或 1。无论如何,我们可以通过半径吗?像mongo有什么叫做附近的东西吗?所以我得到了特定半径内的结果?
    猜你喜欢
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多