posts - 118,  comments - 276,  views - 45万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

转载请注明作者think8848和出处(http://think8848.cnblogs.com)

 

上回我们说到如何《在GeoServer中为OpenStreetMap数据设置OSM样式》,文中本来是要发布海图的,因为时间太晚了,所以今天补上吧。

1. 下载OpenStreetMap海图数据

请打开这个网站下载http://openstreetmapdata.com/data/water-polygons OpenStreetMap海图数据(是否称为水图更好点:))

这里面有三个文件,本文将用到第二个文件

因为我们下载的OpenStreetMap的中国数据就是Mercator投影坐标系,SRID为3857,而上文参考的这个例子使用的是WGS84坐标系,SRID为4326,下载第一个文件你还需要自已转一下,所以为了避免麻烦,直接下第二个就好了。

2. 将shp文件导入到PostGis中

先将下载好的数据弄到GeoServer所以服务器,然后解压,然后使用shp2pgsql工具导入到PostGis中,命令如下:

su postgres

shp2pgsql -s 3857 -I -D /tmp/water-polygons-split-3857/water_polygons.shp ocean_all | psql -d chinaosmgisdb -U think8848

这里注意一点,在GeoServer中用了哪个Postgresql用户,这个 -U 参数后就用哪个用户,免得导了数据后没有访问权限

3. 将我们发布的地图范围所在区域(bounds)海图从完整的海图中切出来

复制代码
psql -U think8848 -d chinaosmgisdb -W

CREATE TABLE ocean AS
WITH bounds AS (
  SELECT ST_SetSRID(ST_Extent(way)::geometry,3857) AS geom
  FROM planet_osm_line
  )
SELECT 1 AS id, ST_Intersection(b.geom, o.geom) AS geom
FROM bounds b, ocean_all o
WHERE ST_Intersects(b.geom, o.geom);
复制代码

使用QGis看一眼啥效果

可以看到轮廓已经出来了,不过“帝国主义忘我之心不死啊”,OpenStreetMap默认把我大南海切去了一半啊,所以我们要带着批判的态度去使用它!!!HaHaHa...

4. 在GeoServer中创建ocean图层

直接在GeoServer建图层即可,唯一要注意的就是在图层样式中选择chinaosm:ocean样式

然后在图层组osm中将这个层加进去,放到合适的位置即可

5. 在Layer Preview中查看效果

 

Good!不再像昨天一样是白色的了。

 

 写在后面的话,GeoServer  + PostGis + OpenStreetMap基本上告一段落,接下来要学习PostGis + OpenStreetMap + node-mapnik,好掌握PostGis + OpenStreetMap最佳实践,以便选择一个更好的方式发布地图服务。

posted on   think8848  阅读(8741)  评论(8编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2008-10-31 [转]探求真正的SOA
点击右上角即可分享
微信分享提示