我有一堆来自GPSLogger for Android app。
的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表中?
我在this博客文章中提到过:
我不知道任何可以直接从GPX转换为的内容 PostGIS的
This post给出了使用SQL来做到这一点的示例,但我无法理解代码:/
答案 0 :(得分: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)
答案 1 :(得分: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
您当然可以使用管道并在一个命令行中创建所有内容
有关详细信息,请参阅联机帮助页。
EDIT 如果你仍然想要一个python脚本,你可以在这里找到帮助 http://pypi.python.org/pypi/gpxtools