Postgresql+Geoserver搭建本地地图服务器(二)

前言

上次仅仅是搭建了服务器,这次写的是服务器的一些基本使用方式。

正文

上次地图服务器搭建完后,能够发布地图了,包括点,线,路等基本数据类型,但正常我们想要的是把这条点轨迹显示在这份地图上。所以这篇博客主要教的就是在地图上显示层叠数据和将数据导入数据库并展示。

发布轨迹数据

这节主要讲的就是将手头的数据导入数据库并显示。
比如我手里的北京市出租车的轨迹数据:

步骤一 处理数据

首先我们要将数据文本.txt转换成.csv(因为Postgresql数据库支持csv文件的直接导入)

如若有多个csv请先自行拼接。

步骤二 数据库建表

在数据库中建立对应的表结构,当前数据结构构建如下:

步骤三 导入数据

导入数据,右击当前对应的表,直接导入:

步骤四 生成轨迹数据

生成location字段

通过sql语句添加gis location 字段
alter table tablename add location geometry(Point,900913);

根据经纬度生成location字段的数据
UPDATE taxi SET location= ST_TransForm(ST_GeomFromText('POINT(' || lng || ' ' || lat || ')',4326),900913);

最终数据存储如下:

然后就可以打开GeoServer正常发布啦,方法和上一篇一样。

注:ST_GeomFromText(‘POINT(‘ || longitude || ‘ ‘ || latitude || ‘)’,4326)把经纬度合成一个4326的点,ST_TransForm把该点转换成900913格式。我们导入的北京地图为900913格式。

可能出现以下错误:
错误一:GetProj4StringSPI: Cannot find SRID (4326) in spatial_ref_sys
在spatial_ref_sys 表中找不到4326 空间引用标识符(SRID)解决方法重新运行一遍 postgis-2.2 里的spatial_ref_sys.sql 重新生成一下即可。psql -U postgres -d osm -f “你PostgreSQL安装路径/share/contrib/postgis-2.1/spatial_ref_sys.sql”

错误二:超出范围错误 原因:lat lng 出现超出90 -90 180 -180 ,解决方法: delete lat,lng 超出范围的部分; 第二次添加错误: 运行了将近2个小时,极点坐标也不行,比如:(90,0)又不得不改为删除在北京市范围之外的lat lng (在第一次的基础上,大概有45000行);delete from taxidata
where lng>118 or lng<115 or="" lat="">41 or lat<39

地图层叠显示

接着上次,现在我们已经来到了Layer Preview页面


通过openLayers分别发布osmtest的roads和taxidata
产生两个新的页面


URL分别如下:
http://localhost:8080/geoserver/osmtest/wms?service=WMS&version=1.1.0&request=GetMap&layers=osmtest:taxidata&styles=&bbox=1.2926567E7,4827767.5,1.3016818E7,4925840.0&width=471&height=512&srs=EPSG:900913&format=application/openlayers

http://localhost:8080/geoserver/osmtest/wms?service=WMS&version=1.1.0&request=GetMap&layers=osmtest:planet_osm_roads&styles=&bbox=1.2877315E7,4780414.5,1.3038415E7,4928771.0&width=512&height=471&srs=EPSG:900913&format=application/openlayers

看到URL中两个参数layers=osmtest:planet_osm_roadslayers=osmtest:taxidata就是指定的发布源,现在我们将两个URL合并一下:
http://localhost:8080/geoserver/osmtest/wms?service=WMS&version=1.1.0&request=GetMap&layers=osmtest:taxidata,osmtest:planet_osm_roads&styles=&bbox=1.2877315E7,4780414.5,1.3038415E7,4928771.0&width=512&height=471&srs=EPSG:900913&format=application/openlayers
复制到浏览器地址栏打开就成功啦。效果如下:

URL里面还有好多参数比如Height和Width都可以自己设置的。

后记

目前为止我自己使用也不是很熟练,我导入多条轨迹之后发现颜色是一样的,这样就不能分辨是哪一条轨迹了,所以我还在学习。等学会了可能再回来更新。