linux环境下搭建osm_web服务器一(Postgresql配置及osm2pgsql原始数据导入):
Postgresql配置及osm2pgsql原始数据导入
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
[plain] view plain copy
- 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的管理员密码
[plain] view plain copy
- sudo passwd postgres
输入两遍自己的密码, 就更改了Linux下用户postgres的口令。而后,在数据库中修改 postgres 的密码,一般与上面操作系统中postgres用户的密码取一致。
[plain] view plain copy
- sudo su postgres
- psql -dpostgres
- ALTER USER postgres WITH PASSWORD '你的密码huawei.123';
为了安全,创建一个用户,用于数据访问。为了和后面渲染契合,用户名 www-data,分别在console以及psql下执行:
[plain] view plain copy
- 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 postgis代替)
[plain] view plain copy
- create extension adminpack;
以安装服务器管理员拓展包,否则,很多pgAdmin的功能用不了。
<4>建立PostGIS数据库
首先,我们要在2TB的分区文件夹下建立表空间。本例中, 2TB分区位于
/hugecargo
[plain] view plain copy
- cd /hugecargo
- sudo mkdir pgtbs_osmgis
- sudo chown postgres ./pgtbs_osmgis
而后,在psql或者pgAdmin下创建表空间
[plain] view plain copy
- CREATE TABLESPACE pgtbs_osmgis
- OWNER "www-data"
- LOCATION '/hugecargo/pgtbs_osmgis';
接着,创建数据库。由于中文Mint 下,postgresql默认采用 zh_cn.UTF-8 locale, 这种字符排序对后面的导入工作会造成一定的麻烦,保险起见,采用Locale "C"
[plain] view plain copy
- 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)。
[plain] view plain copy
- 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吧!
[plain] view plain copy
- shared_buffers = 256MB
- checkpoint_segments = 20
- maintenance_work_mem = 256MB
- autovacuum = off
小内存机器,不要设置太大。
[plain] view plain copy
- shared_buffers = 128MB
注意,把前面的"#"去掉,否则那一行只是注释而已,我这个粗心鬼不止一次忘了。
而后,要同步修改系统的最大共享内存数
[plain] view plain copy
- sudo nano /etc/sysctl.conf
在尾部补上
[plain] view plain copy
- #128MB shared_buffer对应256MB shmmax
- kernel.shmmax=268435456
- #256MB shared_buffer对应512MB
- shmmax kernel.shmmax=536870912
最后,重启机器,确定postgresql服务运行正常,就ok了。
至此,postgresql设置完毕。
-----------------------------------------
<6> 编译支持pbd文件格式的 osm2pgsql
为了导入数据,需要osm2pgsql这个工具。安装一些依赖
(未完全实现)
[plain] view plain copy
- 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 到系统路径中的程序。
[plain] view plain copy
- 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
[plain] view plain copy
- cd osm2pgsql
- ./autogen.sh
- ./configure
- make
- sudo make install
就ok了
请注意一下configure的时候,有没有提示protobuf 是yes,是的话,才能认 pbf文件,从而节约大量的下载时间(pbf比 osm.bz2小了7-8个GB)
<7> 开始导入测试用中国数据(全球数据最后一步导入,那是去和老板请假休息的时候)
准备好后,直接运行
[plain] view plain copy
- ./osm2pgsql -dosmgis -s -S"./default.style" -C384 -Uwww-data -W -Hlocalhost -v ~/downloaded/china.osm.pbf
(eg: /usr/bin/osm2pgsql -dosmgis -s -S"/usr/share/osm2pgsql/default.sty
le" -C384 -Uwww-data -W –H192.168.105.180 -v /bantian.osm)
即可导入。china.osm.pbf 的数据导入很快。
-----------------------------------
本文就到这里,现在,我们有了基础的数据。下一篇,我们开始配置 mapnik2 渲染器,以及 apache-mod_tile + renderd 组成的WMS服务器。
转载:http://blog.csdn.net/goldenhawking/article/details/7952303
linux环境下搭建osm_web服务器一(Postgresql配置及osm2pgsql原始数据导入):的更多相关文章
- linux环境下搭建osm_web服务器二(Mapnik及apache2mod_tile配置):
Mapnik及apache2mod_tile配置 上一篇,我们配置好了PostgreSQL服务器,导入了测试数据.今天,我们来配置 mapnik2 + apache2 + mod_tile 的WMS服 ...
- linux环境下搭建osm_web服务器四(对万国语的地名进行翻译和检索):
对万国语的地名进行翻译和检索 经过 前三篇的调试,已经有了一个完整的Map可以浏览,我们痛苦的世界范围数据下载.导入过程也结束了.要提醒一下的是,鉴于网速,不要下载 planetosm.lastest ...
- linux环境下搭建osm_web服务器三(Openlays和slippymap):
Openlays和slippymap 上一步,我们已经有了自己的地图瓦片服务器,现在,开始实现SlippyMap啦! <1>下载释放OpenLayers到 www文件夹 SlippyMap ...
- Windows和Linux环境下搭建SVN服务器
--------------------------Windows下搭建SVN服务器----------------------------- 一.安装SVN服务端 软件包Setup-Subversi ...
- linux系统Centos环境下搭建SVN服务器及权限配置
linux系统Centos环境下如何搭建SVN服务器以及svnserve.conf.authz.passwd配置文件详细介绍 至于svn的概念,这里就不做详细阐述了,可以自行百度.简单来讲就是一个 ...
- linux环境下搭建solr服务器--单机版
前提需要在安装好jdk和tomcat,本人用的是jdk1.8+tomcat8.5+solr4.10. 第一步:安装linux.jdk.tomcat.(这步都是比较简单的,就不多说了) 第二步:把sol ...
- 在Linux 环境下搭建 JDK 和 Tomcat
在Linux 环境下搭建 JDK 和 Tomcat 参考地址:http://www.cnblogs.com/liulinghua90/p/4661424.html [JDK安装] 1.首先下载 ...
- Linux环境下搭建禅道管理工具-包含软件资源
Linux环境下搭建禅道管理工具 1:百度云盘下载: 禅道--链接: https://pan.baidu.com/s/1Stu7nOZVIPO5TnpJWjWtiQ 提取码:dnik CentOs操 ...
- ubuntu 14.04LTS 环境下搭建tftp服务器
花费我一整天的时间在 ubuntu 14.04LTS 环境下搭建tftp服务器,网上好多资料参差不齐,简单来说,TFTP(Trivial File Transfer Protocol),是一个基于UD ...
随机推荐
- ThreadPoolExecutor之三:自定义线程池-扩展示例
ThreadPoolExecutor是可扩展的,下面一个示例: package com.dxz.threadpool.demo1; import java.util.concurrent.Blocki ...
- mysql 下字符集知识汇总
Do not issue the query set names with Connector/J, as the driver will not detect that the character ...
- python学习(二十二) String(上)
str1 = "This is a 'test'" print(str1) str1 = 'This is a "test"' print(str1) str1 ...
- C语言实现Base64编码/解码
Bse64是一种以64个可打印字符对二进制数据进行编码的编码算法.base64在对数据进行编码时以三个8位字符型数据为一组,取这三个字符型数据的ASCII码,然后以6位为一组组成4个新的数据,这4个新 ...
- 关于调整TimePicker, DatePicker的大小,样式
最近在做一个时间选择器,想把要DatePicker和TimePicker放在一起使用,无赖他们的大小样式是被Google写死了,找不到相应的属性来设置,自己花了点时间写了一个使用的Demo,运行的效果 ...
- wkhtmltopdf Windows下 测试demo 成功
html2pdf 转pdf 中文不换行 然后找到了wkhtmltopdf 支持中文换行 样式也支持 在PHP中生成PDF文件,可以使用 FPDF 和 TCPDF .但是它们只能用于创建简单的表格,当涉 ...
- Python模块学习 ---- datetime
Python提供了多个内置模块用于操作日期时间,像calendar,time,datetime.time模块我在之前的文章已经有所介绍,它提供的接口与C标准库time.h基本一致.相比于time模块, ...
- Nim游戏变种——取纽扣谁先取完
(2017腾讯实习生校招笔试题)Calvin和David正在玩取纽扣游戏,桌上一共有16个纽扣,两人轮流来取纽扣,每人每次可以选择取1个或3个或6个(不允许不取),谁取完最后的纽扣谁赢.Cavin和D ...
- java设计模式之责任链模式(Chain of Responsibility)
转自:http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html 在阎宏博士的<JAVA与模式>一书中开头是这样 ...
- mongodb(四)
Count+Distinct+Group数据库命令操作固定集合特性GridFS文件系统补充服务器端脚本 db.runCommand({group:{ ns:"persons", k ...