• Introduction to PostGIS 之线性参考、地理编码


    今天学习了postGIS中的两个很有用的方法:
    • ST_Line_Interpolate_Point

            geometry ST_Line_Interpolate_Point(geometry a_linestring, float a_fraction):返回线上内插的一个点

     

    返回线上20%处得一个点

    • ST_Line_Locate_Point

            float ST_Line_Locate_Point(geometry a_linestring, geometry a_point):返回a_point离a_linestring在上最近的点位置(这个位置表示为一个0到1浮点数)。点具体的位置我们可以使用前面介绍的ST_Line_Interpolate_Point取出。

     

     

    返回给定点到线的最近点 

           这两个方法对于地理编码(Geocoding)是很有用的,下面我就用上一篇导入的数据来做下试验:

           首先我这里用到了QGIS这个软件使查询结果可视化(另外OpenJUMP也可以查询可视化)

          1.首先添加图层

          2.添加完图层之后,就开始执行我们的查询了,这里用到了QGIS中的一个插件工具RT Sql Layer

     这个插件工具需要另外下载安装:1)插件—>Fetch Python Plugins..

                                           

                                              2)点击Fetch Python Plugins后找到RT Sql Layer  安装

          3.安装完插件后  点击RT Sql Layer 连接到数据库island,然后点击Query Builder,在弹出的窗体中输入如下查询语句:

    SELECT ST_Line_Interpolate_Point(
    ln.the_geom,
    ST_Line_Locate_Point(
    ln.the_geom,
    pt.the_geom
    )
    )
    FROM road
    as ln, features as pt;

     

           4.得到如下结果:

    从图上就会看到 路上多了很多点,但是这个结果并不是我所要的,因为这样的结果是把路两边的很远的features都拉过来了。所以要做下限制,只返回离道路一定距离的点,执行以下SQL:

    SELECT DISTINCT ON (pt.gid)

    pt.name
    AS pt_name,
    pt.gid
    AS pt_id,
    ST_Line_Interpolate_Point(
    ln.the_geom,
    ST_Line_Locate_Point(ln.the_geom, pt.the_geom)
    )
    As snapped_point
    FROM
    features
    AS pt INNER JOIN
    road
    AS ln
    ON
    ST_DWithin(pt.the_geom, ln.the_geom,
    0.004)
    ORDER BY
    pt.gid;

    这样的结果就比较理想了,这里用到了ST_DWithin方法,这个方法也是很常用的,执行一些地物查找就会用到它。

    注:如果你所用的POSTGIS是1.5+的话,ST_ClosestPoint将是一个更好的方法:

    geometry ST_ClosestPoint(geometry g1, geometry g2),这个就简洁了许多,g1不局限于线,g2不局限于点。

    你可以用ST_ClosestPoint来替代ST_Line_Interpolate(ST_Line_Locate_Point ..  效果是一样的。

  • 相关阅读:
    hive中使用正則表達式不当导致执行奇慢无比
    C/C++实现正负数四舍五入
    EEPlat的控制器概念
    由于好高骛远所以半途而废(张作作)
    新辰:关于“网络推广不能仅仅依靠网络”的详解
    SQL的事务回滚操作带案例分析
    怎样把引用的jar包和本项目一起导出成jar文件
    A星算法(Java实现)
    Hadoop之——HBASE结合MapReduce批量导入数据
    Spring MVC 数据验证——validate编码方式
  • 原文地址:https://www.cnblogs.com/shitao/p/2098206.html
Copyright © 2020-2023  润新知