7

我有一堆来自 GPSLogger for Android应用程序的 gpx 文件。

文件看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<gpx  version="1.0" creator="GPSLogger - http://gpslogger.mendhak.com/"  
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xmlns="http://www.topografix.com/GPX/1/0" 
  xsi:schemaLocation="http://www.topografix.com/GPX/1/0 
    http://www.topografix.com/GPX/1/0/gpx.xsd" >
  <time>2011-08-26T06:25:20Z</time>
  <bounds></bounds>
  <trk>
    <trkseg>
      <trkpt  lat="46.94681501102746"  lon="7.398453755309032" >
        <ele>634.0</ele>
        <speed>0.0</speed>
        <src>gps</src>
        <sat>6</sat>
        <time>2011-08-26T06:25:20Z</time>
      </trkpt>
      <trkpt  lat="46.94758878281887"  lon="7.398622951942811" >
        <ele>748.0</ele>
        <speed>0.0</speed>
        <src>gps</src>
        <sat>5</sat>
        <time>2011-08-26T06:30:56Z</time>
      </trkpt>

...   ...   ...

    </trkseg>
  </trk>
</gpx>

是否可以遍历包含这些文件的目录并使用 SQL 或 Python 将它们加载到一个 PostGIS 表中?

我偶然发现这篇博文提到:

我不知道有什么可以直接从 GPX 转换为 PostGIS

这篇文章给出了一个使用 SQL 来做到这一点的例子,但我无法理解代码:/

4

2 回答 2

8

ogr2ogr(GDAL 的一部分)是一个简单直接的 Unix shell 工具,用于将 GPX 文件加载到 PostGIS。

ogr2ogr -append -f PostgreSQL PG:dbname=walks walk.gpx

ogr2ogr 在 PostGIS 中使用自己的模式创建自己的数据库表。表格tracks中每个 GPS 轨迹一行;tracks.wkb_geometry包含 GPS 轨迹本身作为 MultiLineString。该表track_points包含单独的位置修复(带有时间戳)。

这是walks导入前数据库的样子:

walks=# \d
               List of relations
 Schema |       Name        | Type  |  Owner   
--------+-------------------+-------+----------
 public | geography_columns | view  | postgres
 public | geometry_columns  | view  | postgres
 public | raster_columns    | view  | postgres
 public | raster_overviews  | view  | postgres
 public | spatial_ref_sys   | table | postgres
(5 rows)

...在导入之后:

walks=# \d
                    List of relations
 Schema |           Name           |   Type   |  Owner   
--------+--------------------------+----------+----------
 public | geography_columns        | view     | postgres
 public | geometry_columns         | view     | postgres
 public | raster_columns           | view     | postgres
 public | raster_overviews         | view     | postgres
 public | route_points             | table    | postgres
 public | route_points_ogc_fid_seq | sequence | postgres
 public | routes                   | table    | postgres
 public | routes_ogc_fid_seq       | sequence | postgres
 public | spatial_ref_sys          | table    | postgres
 public | track_points             | table    | postgres
 public | track_points_ogc_fid_seq | sequence | postgres
 public | tracks                   | table    | postgres
 public | tracks_ogc_fid_seq       | sequence | postgres
 public | waypoints                | table    | postgres
 public | waypoints_ogc_fid_seq    | sequence | postgres
(15 rows)
于 2012-04-16T23:05:20.867 回答
3

如果你使用的是 linux,你可以试试这个:

  1. 使用程序将 GPX 转换为 SHP:gpx2shp

    sudo apt-get install gpx2shp
    ...
    gpx2shp -o output_file.shp infile.gpx
    
  2. 然后使用 shp2pgsql 将该文件加载到启用 postgis 的数据库

    sudo apt-get install postgis
    ...
    shp2pgsql output_file.shp gis_table
    

您当然可以使用管道并在一个命令行中完成所有操作

有关更多信息,请参阅手册页。

编辑如果你仍然想要一个 python 脚本,你可以在这里找到帮助 http://pypi.python.org/pypi/gpxtools

于 2011-08-30T05:47:16.683 回答