如何将多个gpx文件加载到PostGIS中?
我有一堆来自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处理的例子,但我对代码有点搞不懂 :/
2 个回答
3
如果你在使用Linux系统,可以试试以下方法:
用一个程序把GPX格式转换成SHP格式:gpx2shp
sudo apt-get install gpx2shp ... gpx2shp -o output_file.shp infile.gpx
然后用shp2pgsql把这个文件加载到一个支持PostGIS的数据库里
sudo apt-get install postgis ... shp2pgsql output_file.shp gis_table
当然,你也可以用管道命令,把这些步骤合并成一条命令来执行。
想了解更多信息,可以查看手册。
编辑:如果你还是想要一个Python脚本,可以在这里找到帮助:http://pypi.python.org/pypi/gpxtools
10
ogr2ogr 是一个简单易用的Unix命令行工具,属于GDAL,可以用来把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)