当前位置: 首页 > 编程日记 > 正文

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

  1. sudo apt-get update
  2. sudo apt-get dist-upgrade
  3. sudo apt-get install postgresql
  4. sudo apt-get install postgresql-9.1-postgis postgresql-contrib-9.1 postgresql-server-dev-9.1
  5. sudo apt-get install libpq-dev

当然,也可以直接在X下新立得软件管理器中安装,顺便把pgAdminIII 给安上

下面进行配置。

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

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

[plain] view plain copy

  1. sudo passwd postgres


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

[plain] view plain copy

  1. sudo su postgres
  2. psql -dpostgres
  3. ALTER USER postgres WITH PASSWORD '你的密码huawei.123';



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

[plain] view plain copy

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



<3>adminPack 安装

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

(未成功,用create extension postgis代替)

[plain] view plain copy

  1. create extension adminpack;



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

<4>建立PostGIS数据库

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

[plain] view plain copy

  1. cd /hugecargo
  2. sudo mkdir pgtbs_osmgis
  3. sudo chown postgres ./pgtbs_osmgis

而后,在psql或者pgAdmin下创建表空间

[plain] view plain copy

  1. CREATE TABLESPACE pgtbs_osmgis
  2. OWNER "www-data"
  3. LOCATION '/hugecargo/pgtbs_osmgis';

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

[plain] view plain copy

  1. CREATE DATABASE osmgis
  2. WITH OWNER = "www-data"
  3. ENCODING = 'UTF8'
  4. TABLESPACE = pgtbs_osmgis
  5. LC_COLLATE = 'C'
  6. LC_CTYPE = 'C'
  7. CONNECTION LIMIT = -1;
  8. GRANT ALL ON DATABASE osmgis TO public;
  9. GRANT ALL ON DATABASE osmgis TO "www-data";

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

[plain] view plain copy

  1. sudo su postgres -c "psql -dosmgis </usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql"
  2. sudo su postgres -c "psql -dosmgis </usr/share/postgresql/9.1/contrib/postgis-1.5/spatial_ref_sys.sql"
  3. sudo su postgres -c "psql -dosmgis </usr/share/postgresql/9.1/contrib/postgis_comments.sql"
  4. sudo su postgres
  5. psql -dosmgis
  6. 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

  1. shared_buffers = 256MB
  2. checkpoint_segments = 20
  3. maintenance_work_mem = 256MB
  4. autovacuum = off

小内存机器,不要设置太大。

[plain] view plain copy

  1. shared_buffers = 128MB


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

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

[plain] view plain copy

  1. sudo nano /etc/sysctl.conf


在尾部补上

[plain] view plain copy

  1. #128MB shared_buffer对应256MB shmmax
  2. kernel.shmmax=268435456
  3. #256MB shared_buffer对应512MB
  4. shmmax kernel.shmmax=536870912

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

至此,postgresql设置完毕。

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

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

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

(未完全实现)

[plain] view plain copy

  1. sudo apt-get install subversion git-core tar unzip wget bzip2
  2. sudo apt-get install build-essential autoconf libtool libxml2-dev libgeos-dev libbz2-dev
  3. sudo apt-get install proj libprotobuf-c0-dev protobuf-c-compiler
  4. sudo apt-get install libfreetype6-dev libpng12-dev libtiff4-dev libicu-dev libboost-all-dev
  5. 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

  1. mkdir ~/src
  2. mkdir ~/bin
  3. cd ~/bin
  4. 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

  1. cd osm2pgsql
  2. ./autogen.sh
  3. ./configure
  4. make
  5. sudo make install

就ok了

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

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

准备好后,直接运行

[plain] view plain copy

  1. ./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

转载于:https://www.cnblogs.com/BigFishFly/p/6337332.html

相关文章:

Java开发买低压本还是标压本_标压和低压,笔记本怎么选才最香?

华为最近发布了新款 MateBook 13/14 2020 锐龙版笔记本电脑&#xff0c;与之前的产品相比&#xff0c;它们都采用了 AMD 锐龙标压处理器。在体验这两款产品的同时&#xff0c;我一直在思考两个问题&#xff1a;它们与低压处理器相比强在哪里&#xff0c;以及是否值得购买。按照…

php mysql 备注_php,mysql备注信息1

/*---------------------------------------------------------------------------------------如何彻底地删除表?如果你不需要一个表了,你可以使用DROP.语法如下:DROP TABLE tablename例如:DROP TABLE employee_dataQuery OK,0 rows affected(0.01 sec);--------------------…

JSP和Servlet学习笔记1 - 访问配置

1. 访问 WebContent 目录下的 JSP 文件 在 WebContent 目录下的文件可以直接在浏览器中访问。新建一个 test.jsp 文件 <% page language"java" contentType"text/html; charsetISO-8859-1"pageEncoding"ISO-8859-1"%> <!DOCTYPE htm…

unity人物旋转移动代码_Unity3D研究院之脚本实现模型的平移与旋转(六)

123 说&#xff1a;雨松大大&#xff0c;有个问题想请教一下&#xff0c;我用UNET构建了个小场景&#xff0c;在电脑上可以客户端可以连接到服务器&#xff0c;Windows和Linux都可以&#xff0c;发布到安卓缺连不了&#xff0c;这是问什么呢说&#xff1a;求教一下&#xff0c;…

博客园的第一篇博文

以后所有技术相关的文章都记录在博客园啦&#xff0c;加油&#xff01;转载于:https://www.cnblogs.com/dabenniu/p/6337549.html

java后台分页插件怎么写_Java分页技术(从后台传json到前台解析显示)

0 这是一篇我在初学习过程中&#xff0c;遇到的动态数据分页显示的问题&#xff0c;前台采用Ajax传给后台&#xff0c;后台在访问数据库取出分页数据再转换为json格式传递给前台&#xff0c;前台再解析显示到表格中。在此写出我在做的过程中遇到的问题&#xff0c;可以让其他人…

c 应用程序mysql_MySQL C 语言应用程序接口开发教程

从数据库中取回数据在这个实例中我们从表中取回数据。步骤&#xff1a;(1)创建连接(2)执行查询(3)获取结果集(4)提取所有可用的记录(5)释放结果集实例程序打印 writers 表中所有的记录(姓名)。#include #include int main(int argc, char * argv[]){MYSQL * conn;MYSQL_RES * r…

GreenPlum学习笔记:基础知识

一、介绍 GreenPlum分布式数据仓库&#xff0c;大规模并行计算技术。 无共享/MPP核心架构Greenplum数据库软件将数据平均分布到系统的所有节点服务器上&#xff0c;所以节点存储每张表或表分区的部分行&#xff0c;所有数据加载和查询都是自动在各个节点服务器上并行运行&…

java 套接字关联的通道_Java 通道教程 – NIO 2.0

# Java 通道教程 – NIO 2.0> 原文&#xff1a; [https://howtodoinjava.com/java7/nio/java-nio-2-0-channels/](https://howtodoinjava.com/java7/nio/java-nio-2-0-channels/)通道是继[**缓冲区**](//howtodoinjava.com/java-7/nio/java-nio-2-0-working-with-buffers/ &…

虚拟机ubuntu14.04系统设置静态ip

ubuntu14.04 设置静态ip vim /etc/network/interfaces 原来只有 auto lo iface lo inet loopback 修改成如下&#xff1a; auto lo iface lo inet loopbackauto eth0 iface eth0 inet static #静态ip address 192.168.1.6 #要设置的ip gateway 192.168.1.1 #这…

高职信息安全比赛攻防思路_30.LNGZ2020-30:2020年辽宁省职业院校技能大赛(高职组)“信息安全管理与评估”赛项规程...

12020年辽宁省职业院校技能大赛(高职组)信息安全管理与评估赛项规程一、赛项名称赛项编号&#xff1a;LNGZ2020-30赛项名称&#xff1a;信息安全管理与评估英文名称&#xff1a;Information Security Management and Evaluation赛项组别&#xff1a;高职组赛项归属&#xff1a;…

oracle rac对心跳要求_关于心跳网络引起的Oracle RAC的节点驱逐(不是实例驱逐)...

关于心跳网络引起的Oracle RAC的节点驱逐(不是实例驱逐)问&#xff1a;假设如下场景&#xff1a;4个节点rac&#xff0c;心跳线走的是千m网络交换机&#xff0c;若是该千M网络交换机断电&#xff0c;我想知道crs的驱逐节点的算法是怎么样的&#xff1f;Oracle 大连 GCS 答复&am…

php 字符串数组转数组对象_php怎么将数组转成对象?

php将数组转成对象的方法&#xff1a;1、使用数据类型转换&#xff0c;在数组变量前添加“(Object)”来将数组转成对象。2、先使用json_encode()函数将数组转换为json字符串&#xff1b;然后使用json_decode()函数将json字符串转换成对象。php将数组转成对象有时候数组要转为对…

如何在Win7电脑上增加新磁盘分区?

我们在重装好系统Win7系统后有时会碰到需要新建磁盘分区的情况&#xff0c;这时我们再重装系统进行磁盘分区就有些过于麻烦了&#xff0c;其实我们可以利用Win7系统自身的磁盘管理功能来新建一个磁盘分区。下面好系统重装助手就来介绍一下好系统Win7系统电脑磁盘新建分区的方法…

WIn7下Ubuntu 14.04 安装

1. 在Windows下下载Ubuntu14.04的ISO镜像&#xff0c;解压 2. 打开wubi.exe&#xff0c;填写用户名&#xff0c;密码等相关信息&#xff0c;在这里需要注意的是&#xff0c;磁盘空间最好选到最大&#xff08;30G&#xff09;&#xff0c;执行安装 3. 按照提示&#xff0c;重启系…

cimiss数据_CIMISS,你太优秀了!

原标题&#xff1a;CIMISS&#xff0c;你太优秀了&#xff01;本周二的时候小据给大家带来了一位新朋友那便是CIMISS你真的了解它吗&#xff1f;一文读懂CIMISS(戳上面的链接进行回顾)今天我们继续了解一起探讨它能够为我们带来哪些好处天气业务“一站式”数据供给自2014年8月以…

python3 tkinter电子书_python3 tkinter实现添加图片和文本

本文在前面文章基础上介绍tkinter添加图片和文本&#xff0c;在这之前&#xff0c;我们需要安装一个图片库&#xff0c;叫Pillow&#xff0c;这个需要下载exe文件&#xff0c;根据下面图片下载和安装。下载完后直接双击安装exe&#xff0c;默认点击下一步&#xff0c;直到安装完…

序列化和反序列化实现

1. 什么是序列化&#xff1f; 程序员在编写应用程序的时候往往需要将程序的某些数据存储在内存中&#xff0c;然后将其写入文件或是将其传输到网络中的另一台计算机上以实现通讯。这个将程序数据转换成能被存储并传输的格式的过程被称为序列化&#xff08;serialization&#x…

linux source命令

source filename 与 sh filename 及./filename执行脚本的区别在那里呢&#xff1f;1.当shell脚本具有可执行权限时&#xff0c;用sh filename与./filename执行脚本是没有区别得。./filename是因为当前目录没有在PATH中&#xff0c;所有"."是用来表示当前目录的。2.sh…

centos7 nginx配置php7,centos7安装并配置nginx+php,centos7nginx

centos7安装并配置nginxphp&#xff0c;centos7nginxcentos7安装并配置nginxphp安装nginxyum install nginx设置nginx开启起动systemctl start nginx测试访问http://你的域名或IP/查看nginx安装位置whereis nginxnginx: /usr/sbin/nginx /etc/nginx /usr/share/nginx /usr/shar…

host ntrip 千寻rtk_什么是千寻知寸cors账号?它提供的定位服务精度如何?使用时需要注意哪些问题?...

千寻知寸cors账号FindCM&#xff1a;基于RTK技术的厘米级差分数据播发服务&#xff0c;终端设备收到差分数据后&#xff0c;结合自己的卫星观测数据进行高精度定位解算&#xff0c;在观测环境良好的情况下&#xff0c;统计精度可以达到水平2~5厘米&#xff0c;高程2~8厘米。由于…

python创建图片对应的csv格式_Python:如何从csv文件创建图形节点和边?

你可以用另一个COLATIC和COLATIC来建立一个COLATIC/COLATIC。然后将图“投影”到datetime节点上—如果两个datetime都链接到ColA/ColC节点&#xff0c;则在它们之间创建一个链接。在下面的代码展示了一种创建无向图的方法。我不明白你的例子里的指示是什么意思。在import csvim…

卡尺测量的最小范围_工厂车间里常用的测量仪器使用方法介绍,你都会用吗?...

一、测量器具的分类 测量器具是一种具有固定形态、用以复现或提供一个或多个已知量值的器具。按用途的不同量具可分为以下几类&#xff1a;1. 单值量具只能体现一个单一量值的量具。可用来校对和调整其它测量器具或作为标准量与被测量直接进行比较&#xff0c;如量块、角度量块…

codeblocks使用指南

文章目录目录创建c/c项目调试codeblocks快捷键目录 创建c/c项目 左上角File->new->project&#xff0c;然后在弹出的对话框中找到Console application点击Go,然后不断Next,中间的除了项目名和项目地址其他默认即可。 然后在左侧工程目录中点开main文件即可Coding了。&…

php变量 标签,html标签如何使用php中的变量

html标签中使用php变量&#xff0c;提示&#xff1a;Undefined index: uid in /var/www//list.php&#xff0c;list.php的具体代码如下&#xff1a;require redis.php;for ($i0; $i < ($redis->get("userid")) ; $i){$data[] $redis->hgetall("user:&…

Shell基础命令之echo

echo命令的功能是在显示器上显示一段文字&#xff0c;一般起到一个提示的作用。该命令的一般格式为&#xff1a; echo [ -n ] 字符串其中选项n表示输出文字后不换行&#xff1b;字符串能加引号&#xff0c;也能不加引号。用echo命令输出加引号的字符串时&#xff0c;将字符串原…

mysql中leave和_MySQL数据库之Mysql存储过程使用LEAVE实现MSSQL存储过程中return语法

本文主要向大家介绍了MySQL数据库之Mysql存储过程使用LEAVE实现MSSQL存储过程中return语法 &#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习MySQL数据库有所帮助。DELIMITER $$USE qrsoft_dyj_db$$DROP PROCEDURE IF EXISTS proc_withdraw_approve$$CREATE PR…

cron 工具 每分钟_计划任务 cron和crontab

很多时候&#xff0c;我们需要定时执行某个应用或者某段脚本&#xff0c;在linux上&#xff0c;可以使用cron服务&#xff0c;它有点类似于Windows上的任务计划程序。这篇文章将简单介绍cron的使用。1. crond和crontab首先需要分清楚两个概念&#xff1a;crond和crontab。crond…

Bootstrap学习记录-2.container和table

1. Container Bootstrap中容器类提供了2个类标识&#xff1a;container、container-fluid。 两者的区别在于&#xff1a;container&#xff1a;容器不止有15px的padding&#xff0c;还有一个随着浏览器宽度变化而变化的margin。container-fluid&#xff1a;只有固定的15px的pad…

java中super用来定义父类,Java中super的几种用法及与this的区别

综观目前的 Web 应用&#xff0c;多数应用都具备任务调度的功能。本文由浅入深介绍了几种任务调度的 Java 实现方法&#xff0c;包括 Timer&#xff0c;Scheduler, Quartz 以及 JCron Tab&#xff0c;并对其优缺点进行比较&#xff0c;目的在于给需要开发任务调度的程序员提供有…