一步步DIY: OSM-Web服务器(一) PostgreSql 配置以及osm2pgsql原始PBF数据导入

原创 2012年09月06日 22:36:17

(-:<转载时请注明本文由goldenhawking在 CSDN blog 撰写,http://blog.csdn.net/goldenhawking/article/details/7952303   

2012年,Ubuntu 12.04LTS发布,又一个长效支持版,我们又该更新OpenStreetMap服务器了,这次,将详细在博客中记录配置过程。关于前面对OpenStreetMap的介绍,参考我的博文http://blog.csdn.net/goldenhawking/article/details/6402775

1、预防针

    全球数据导入工作非常耗时,也很容易出错,吸取前面N次的教训,在开始之前,打好预防针,主要有:

    a) 稳定的64位环境

    先前的博客中,2009年的数据集合还能运行在32位虚拟机中,2012年20GB的原始数据压缩文件展开后占用200GB以上的磁盘,光是ID一列字段就盛满4G的空间,显然32位是不行了。这次采用16GBwindows Server 、16核心盘阵服务器,2TB磁盘空间,VMBox虚拟机8GB内存以期资源充足。


   b) UPS电力供应+工作状态保护

    由于数据导入过程可能长达1-4周,为了吸取长时间断电即使UPS也挂了的惨痛教训,本次在Windows Server 2003 64bit + Oracle VirtualBox 4.18 下进行导入工作,以便在断电时,利用UPS的有限时间进行snapshot,而后休眠,以保证导入工作不被干扰。如果不使用虚拟机,直接使用系统的休眠,osm2pgsql与postgis  的 TCP连接有可能被重置(当你使用外部地址而不是localhost时),照样会挂。


  c) 质量过关的磁盘

    在中等内存容量下,采用slim模式导入,将面对持续数周的密集磁盘访问,采用盘阵速度较快,且容错保护好。以前出现过使用单块硬盘,读写了4周(3周导入,1周渲染),硬盘噪音超大,没用一年就挂了的惨痛经历。



2、最终目的

      完整导入全球Planet.OSM数据集,并编译、配置最新的Mapnik渲染器;采用最新的apache2+ mod_tile rended 搭建WebService;采用OpenLayers 实现 SlippyMap;利用GeoServer + OpenLayers +PostGIS叠加显示动态矢量数据。对拉丁语系、斯拉夫语系的地名进行翻译,并附带实现C-S架构的客户端

好了,下面开始第一篇,也是万事开头难,痛苦的数据导入过程。

------------------------------------------------------


本次,既然有8GB内存,就不在乎图形界面耗费的一两百MB了,使用Linux-Mint 13 64bit 作为基础平台,操作性好,利于安装eclipse、QT, code-blocks 等IDE进行开发实践。

<0>专门找一台机器,全天下载全球数据文件

      这一步在国内网速不好时,太要命了。用BT也不是太好,大家酌情考虑自己的方式。

      访问http://download.geofabrik.de/osm/ 下载感兴趣区域的数据,全球的直接google   Planet.osm ,到wiki的链接FTP去下载(暴慢),或者去http://osm-torrent.torres.voyager.hr/files/  去下载PBF种子(我的网速下,好不了哪去),这一步会花费好多天。osm.bz2格式的要比PBF大好多,导入的时候慢好多,建议能用就用 pbf的。如果使用PBF, 后面编译 osm2pgsql时,需要libprotobuf-c0-dev 和protobuf-c-compiler两个库,否则会不认。

     我这次是先下个中国的pbf,60MB,导入供功能测试,等到后面下完了,再导入全球的。


<1>安装PostgreSQL

sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install postgresql
sudo apt-get install postgresql-9.1-postgis postgresql-contrib-9.1 postgresql-server-dev-9.1
sudo apt-get install libpq-dev 
当然,也可以直接在X下新立得软件管理器中安装,顺便把pgAdminIII 给安上

下面进行配置。


<2>更改Linux  用户和PostgreSQL 的用户密码,创建用于数据访问的用户

为了用自己的postgres账户在 pgAdminIII中登录,以及远程访问数据库,我们要修改postgres的管理员密码

sudo passwd postgres

输入两遍自己的密码, 就更改了Linux下用户postgres的口令。而后,在数据库中修改 postgres 的密码,一般与上面操作系统中postgres用户的密码取一致。

sudo su postgres

psql -dpostgres

ALTER USER postgres WITH PASSWORD '你的密码';

为了安全,创建一个用户,用于数据访问。为了和后面渲染契合,用户名 www-data,分别在console以及psql下执行:

sudo passwd www-data
在psql或者pgAminIII 中
CREATE ROLE "www-data" LOGIN
  PASSWORD '你想设置给www-data的密码'
  SUPERUSER INHERIT CREATEDB NOCREATEROLE REPLICATION;

<3>adminPack 安装

     如果安装了pgAdminIII,则会提示您没有安装服务器端adminpack,postgresql 9.1下,这个东西不再是 contrb,而是“扩展”extension,直接点击“修复repair”或执行

create extension adminpack;

以安装服务器管理员拓展包,否则,很多pgAdmin的功能用不了。


<4>建立PostGIS数据库

首先,我们要在2TB的分区文件夹下建立表空间。本例中, 2TB分区位于 /hugecargo

cd /hugecargo
sudo mkdir pgtbs_osmgis
sudo chown postgres ./pgtbs_osmgis
而后,在psql或者pgAdmin下创建表空间

CREATE TABLESPACE pgtbs_osmgis
  OWNER "www-data"
  LOCATION '/hugecargo/pgtbs_osmgis';

接着,创建数据库。由于中文Mint 下,postgresql默认采用 zh_cn.UTF-8 locale, 这种字符排序对后面的导入工作会造成一定的麻烦,保险起见,采用Locale "C"

CREATE DATABASE osmgis
  WITH OWNER = "www-data"
       ENCODING = 'UTF8'
       TABLESPACE = pgtbs_osmgis
       LC_COLLATE = 'C'
       LC_CTYPE = 'C'
       CONNECTION LIMIT = -1;
GRANT ALL ON DATABASE osmgis TO public;
GRANT ALL ON DATABASE osmgis TO "www-data";


添加 postgis 功能,以及hstore(类似C++的map)。

sudo su postgres -c "psql -dosmgis </usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql"
sudo su postgres -c "psql -dosmgis </usr/share/postgresql/9.1/contrib/postgis-1.5/spatial_ref_sys.sql"
sudo su postgres -c "psql -dosmgis </usr/share/postgresql/9.1/contrib/postgis_comments.sql"
sudo su postgres
psql -dosmgis
create extension hstore

这样,postgis数据库就建立好了。


<5> 对postgresql性能进行优化

首先,编辑 /etc/postgresql/9.1/main/postgresql.conf

sudo nano /etc/postgresql/9.1/main/postgresql.conf

修改缓存,关闭自动资源释放,否则,等着导入的时候硬盘over吧!

shared_buffers = 256MB
checkpoint_segments = 20
maintenance_work_mem = 256MB
autovacuum = off
小内存机器,不要设置太大。

shared_buffers = 128MB

注意,把前面的"#"去掉,否则那一行只是注释而已,我这个粗心鬼不止一次忘了。

而后,要同步修改系统的最大共享内存数

sudo nano /etc/sysctl.conf 

在尾部补上

#128MB shared_buffer对应256MB shmmax 
kernel.shmmax=268435456 
#256MB shared_buffer对应512MB 
shmmax kernel.shmmax=536870912

最后,重启机器,确定postgresql服务运行正常,就ok了。


至此,postgresql设置完毕。

----------------------------------------- 


<6> 编译支持pbd文件格式的 osm2pgsql

为了导入数据,需要osm2pgsql这个工具。安装一些依赖

sudo apt-get install subversion git-core tar unzip wget bzip2 
sudo apt-get install build-essential autoconf libtool libxml2-dev libgeos-dev libbz2-dev 
sudo apt-get install proj libprotobuf-c0-dev protobuf-c-compiler 
sudo apt-get install libfreetype6-dev libpng12-dev libtiff4-dev libicu-dev libboost-all-dev 
sudo apt-get install libgdal-dev libcairo-dev libcairomm-1.0-dev apache2 apache2-dev libagg-dev
我在自己的文档文件夹下建立bin, src  两个文件夹,bin用于存放直接运行的程序,src用于存放编译后 make install 到系统路径中的程序。

mkdir ~/src
mkdir ~/bin
cd ~/bin
svn co http://svn.openstreetmap.org/applications/utils/export/osm2pgsql/

而后,进入目录,编译,如果需要多线程支持,安装pThread

sudo apt-get install libpthread-stubs0-dev libevent-pthreads-2.0-5  libzthread-dev

cd osm2pgsql
./autogen.sh
./configure
make
sudo make install

就ok了

请注意一下configure的时候,有没有提示protobuf 是yes,是的话,才能认 pbf文件,从而节约大量的下载时间(pbf比 osm.bz2小了7-8个GB)


<7> 开始导入测试用中国数据(全球数据最后一步导入,那是去和老板请假休息的时候)

准备好后,直接运行

./osm2pgsql -dosmgis -s -S"./default.style" -C384 -Uwww-data -W -Hlocalhost -v ~/downloaded/china.osm.pbf

即可导入。china.osm.pbf 的数据导入很快。


-----------------------------------

本文就到这里,现在,我们有了基础的数据。下一篇,我们开始配置 mapnik2 渲染器,以及 apache-mod_tile + renderd 组成的WMS服务器。








版权声明:本文为博主原创文章,转载时请注明 http://blog.csdn.net/goldenhawking 举报

相关文章推荐

Geoserver2.11矢量切片与OL3中的调用展示

本文讲述在Geoserver2.11中如何进行矢量切片以及OL3中的调用展示。

在Ubuntu16-04版本上搭建离线免费地图osm(一)

开放街道图OpenStreetMap,也就是osm,是一。个网上地图协作计划,目的是创造一内容自由且能让所有人都编辑的世界地图。这个教程会叫你如何搭建一个自己的OSM服务器,配置是Ubuntu16.0...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

使用osm2pgsql工具将osm数据导入postgis中(图解)

弄了好长一段时间,终于顺利地将osm数据导入到postgis中了,在这期间问题百出,现在将整个过程梳理总结一遍,也希望所有人不要再出现我这种低级错误了啊。。。准备工作安装软件:postgreSQL,并...

创建自己的 OSM.Planet 街道级别地图服务器,汉化地名避免万国语

2012年更新      经过从2008年以来对OSM的研究与利用,越来越发现OSMGIS的活跃、开放是非常引人注目的事情。尽管缺乏像ARCGIS这样强大的中间服务的支持,其庞大的原始数据集合本身就...

一步步DIY: OSM-Web服务器(三) OpenLays 与 SlippyMap

(-:  上一步,我们已经有了自己的地图瓦片服务器,现在,开始实现SlippyMap啦! 下载释放OpenLayers到 www文件夹 SlippyMap 利用 OpenLays 的AJax...

一步步DIY: OSM-Web服务器(二) mapnik 与 apache2 mod_tile 的配置

(-: 上一篇,我们配置好了PostgreSQL服务器,导入了测试数据。今天,我们来配置 mapnik2 + apache2 + mod_tile 的WMS服务器,以便在今后被 OpenLays...

一步步DIY: OSM-Web服务器(六) C/S架构客户端开发中的细节问题

虽然Ajax的Web应用功能强大,但是,很多时候还是需要 C/S模式的客户端程序。最为典型的应用是为现有产品添加新的OSM地图支持(比如替换掉MapX)。很多现有GIS应用都是Native C++的。...

一步步DIY: OSM-Web服务器(五) GeoServer与矢量叠加图层

(-:       只有栅格图层是没有意义的,我们需要矢量图层才能实现自己的功能。这里实现的功能是获取公司外派的外卖员的位置,并显示他们最后一次按动汇报器按钮的时刻,以便公司掌握这些员工的交通安...

一步步DIY: OSM-Web服务器(七) 利用 Google WebService 批量下载遥感瓦片数据

(-:写 http://blog.csdn.net/goldenhawking/article/details/8005564     前面六篇,是集中精力写的,其实,整个流程顺利走过来,花了笔...

一步步DIY: OSM-Web服务器(四) 对万国语的地名进行翻译与检索

(-:    经过 前三篇的调试,已经有了一个完整的Map可以浏览,我们痛苦的世界范围数据下载、导入过程也结束了。要提醒一下的是,鉴于网速,不要下载 planetosm.lastest 文件,因为这...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)