Graphhopper中使用PostGIS数据

Graphhopper

Graphhopper是一个开源的地图导航引擎,主要支持OpenStreetMap的OSM数据格式,实现如下图的效果。其在0.11以及版本有一个Reader,可以读取Shape数据;有个老哥参考Shape数据的Reader开发了PostGIS数据库的Reader。但是在0.12版本时,Graphhopper团队从主项目中去除了Shape的Reader,并表示以后只支持OSM。

Graphhoper

实际上即便是之前Shapefile的Reader还是别人做的PostGIS的Reader都非常不完善,只能计算出线路数据,无法得到比如“继续行驶到XX路”“保持右行到XX路”中路的名称,因此即使使用较老版本的Graphhopper或者自己将其他格式老版本的Reader升级成新版本的,也无法完美的使用其功能。要完美使用Graphhopper的功能,最好的还是使用OSM数据。

OSM数据的劣势

OSM是采用XML标签来存储地理数据的,相对于同采用XML来存储的GML、KML格式来说,可读性都算是差的,比结构化的Shape数据或者PostGIS相差就更远了。因此比如要批量修改一些路的信息,OSM就非常不方便,但对于结构化的数据就很容易了。我在项目中遇到的情况是可能根据人流量来修改某条路在路径规划时的权重,因此最初没有考虑直接使用OSM数据,而是使用PostGIS。

不过随着对Graphhopper了解的加深,我发现OSM的劣势被降的很低。因为Graphhopper并不直接使用OSM数据或者其他Reader读的数据进行导航,他在启动时首先会根据数据生成网络,在导航时只会使用网络,数据就没用了。因此即便我数据中线路的权重是实时变化的,也无法在Graphhopper直接使用,只能一段时间生成一次网络。在这个过程中,是直接使用PostGIS生成无法显示路名的网络,还是先把PostGIS转成OSM生成完美的网络,中间都需要一个过程,只不后者多了几步罢了,差别不大。

PostGIS转OSM

讲怎么将OSM数据导入PostGIS数据库的帖子很多,但是几乎没找到怎么将PostGIS的地理数据转成OSM的。所以我采用了通用数据转换工具,FME。FME Writer的配置如下:

FME Writer配置

其中,

osm_id:数字,唯一值
maxspeed:限速,0表示不限速
oneway:是否单行道,yes/no/-1,-1表示与线绘制方向相反
fclass:道路类型,primary,tertiary,具体参考OSM道路分级,Graphhopper生成网格时主要以此为权重
name:道路名称

但是转完之后直接用于Graphhopper是会报错的,也许是我输入的参数不完整,也许是FME转出的文件不太规范,反正就是不能用。此时可以用一个叫JOSM的OSM数据编辑软件将其打开,然后另存一下,就OK了。

注:OSM的Path不支持太多节点的线,我没查到最大值是多少,根据我的实验,两千个点应该差不多是上限。因此如果线太复杂,需要简化才能处理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要在pgAdmin 4 使用 PostGIS,您需要执行以下步骤: 1. 安装 PostGIS:首先,您需要安装 PostGIS 扩展,这可以通过使用如下命令实现: ``` CREATE EXTENSION postgis; ``` 2. 创建 PostGIS 数据表:其次,您需要创建一个带有 PostGIS数据表,这可以通过使用如下语法实现: ``` CREATE TABLE table_name ( column1 data_type, column2 data_type, ... location geography(Point, 4326) ); ``` 3. 在 pgAdmin 4 插入数据:最后,您可以在 pgAdmin 4 插入数据,并使用 PostGIS 相关的函数和查询。 注意:4326 是一个常用的 SRID,表示 WGS 84 经纬度坐标系统。您可以根据需要使用不同的 SRID。 希望这些步骤能帮助您在 pgAdmin 4 使用 PostGIS。 ### 回答2: 在pgAdmin4,我们可以使用PostGIS扩展来对数据表进行地理空间数据的操作和分析。PostGIS是一个开源的地理信息系统(GIS)软件,它是PostgreSQL数据库的一个插件,可以为数据库添加地理功能。 在pgAdmin4使用PostGIS,我们首先需要在数据创建一个PostGIS扩展。可以通过在pgAdmin4的查询工具执行以下SQL语句来创建扩展: CREATE EXTENSION postgis; 创建扩展后,我们可以在数据添加一个地理空间字段,例如创建一个名为"geometry"的字段来存储空间几何数据: ALTER TABLE table_name ADD COLUMN geometry geometry; 接下来,我们可以执行各种PostGIS函数和操作来对数据的地理空间数据进行查询、分析和可视化。 例如,我们可以使用ST_GeomFromText函数将文本表示的地理空间几何数据转换为PostGIS几何类型: UPDATE table_name SET geometry = ST_GeomFromText('POINT(2 1)'); 我们还可以使用ST_GeomFromGeoJSON函数将GeoJSON格式的地理空间数据转换为PostGIS几何类型: UPDATE table_name SET geometry = ST_GeomFromGeoJSON('{"type": "Point", "coordinates": [2, 1]}'); 同时,我们可以利用ST_Contains、ST_Intersects等函数来进行地理空间关系的查询: SELECT * FROM table_name WHERE ST_Contains(geometry, ST_GeomFromText('POINT(2 1)')); 总结而言,pgAdmin4数据使用PostGIS,可以通过创建PostGIS扩展、添加地理空间字段以及执行各种PostGIS函数和操作,对数据的地理空间数据进行处理和分析。这为我们提供了强大的地理信息系统功能,使得在数据进行地理空间数据操作更加方便和高效。 ### 回答3: PgAdmin 4是一个用于管理PostgreSQL数据库的开源工具。在PgAdmin 4使用PostGIS是为了在数据处理地理空间数据。以下是在PgAdmin 4使用PostGIS时需要了解的一些重要细节: 1. 安装PostGIS扩展:首先,确保已在PostgreSQL服务器上安装了PostGIS扩展。可以使用pgAdmin 4的查询工具或命令行工具(如psql)来安装PostGIS。 2. 创建空间数据库:在pgAdmin 4创建一个新数据库,并将其设置为PostGIS空间数据库。这样,数据库将准备好接收地理空间数据。 3. 启用PostGIS扩展:打开在步骤2创建的数据库,然后进入"工具"菜单下的"扩展"子菜单。在扩展列表,找到PostGIS扩展并将其启用。这将为数据库添加必要的函数和数据类型来处理地理空间数据。 4. 创建数据表:使用pgAdmin 4的表设计器工具或手动编写SQL语句来创建一个新的数据表。在创建表时,可以使用PostGIS数据类型(如geometry)来存储地理空间数据。 5. 添加空间数据:通过pgAdmin 4的数据编辑器或其他工具(如QGIS)将地理空间数据添加到数据。可以使用WKT(Well-Known Text)或其他格式来表示地理空间数据,并将其插入到数据的相应列。 6. 查询和分析地理空间数据:利用pgAdmin 4的查询工具来进行地理空间数据的查询和分析。可以使用PostGIS提供的函数和操作符来执行各种空间分析操作,如缓冲区分析、距离计算等。 总的来说,使用PgAdmin 4PostGIS扩展,可以轻松地在数据存储、查询和分析地理空间数据。通过简单的安装和设置,PgAdmin 4提供了一个强大的界面,使用户能够更好地利用PostGIS扩展的功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值