当前位置: 首页 > 工具软件 > TileMill > 使用案例 >

【GIS部署系列】3、CentOS 7下载OpenStreetMap并导入PostgreSQL(ArcGIS、Mapnik、geoserver、osm2pgsql、TileMill)

萧和同
2023-12-01
1、下载地图

到OpenStreetMap官网下载地图数据
中国地图下载链接: http://download.geofabrik.de/asia/china.html
我下载“china-latest.osm.pbf”这文件,存为:/tmp/china-latest.osm.pbf

2、安装osm2pgsql


先安装依赖库

sudo yum -y install epel-release
sudo yum install -y postgresql10-devel
sudo yum install -y cmake make gcc-c++ boost-devel expat-devel zlib-devel bzip2-devel proj-devel proj-epsg lua-devel

拉取源码


进入osm2pgsql 目录,执行下面指令:

mkdir build && cd build
cmake ..
make
sudo make install

上面“cmake ..”如果报“Could NOT find PostgreSQL (missing: PostgreSQL_LIBRARY_DIRS”之类的,
则把“cmake ..”换成下面语句:(参见: https://github.com/eulerto/pgquarrel/issues/27

cmake .. -DCMAKE_PREFIX_PATH=/usr/pgsql-10

(上面 “/usr/pgsql-10” 换成你的实际路径)


3、导入地图数据

创建数据库chinaosm

# su postgres
createdb chinaosm

启用一些扩展

psql -d chinaosm -c 'CREATE EXTENSION postgis; CREATE EXTENSION postgis_topology; CREATE EXTENSION ogr_fdw; CREATE EXTENSION hstore;'

导入数据到chinaosm库

osm2pgsql --create --database chinaosm /tmp/china-latest.osm.pbf

上面语句出现错误“Node cache size is too small to fit all nodes. Please increase cache size”,
则添加“-C”参数,例如:

osm2pgsql --create --database chinaosm -C 5000  /tmp/china-latest.osm.pbf

导入过程可能比较久,我开着电脑一晚上,应该导入成功了,下面是执行过程信息:

bash-4.2$ osm2pgsql --create --database chinaosm -C 5000 /tmp/china-latest.osm.pbf
osm2pgsql version 0.96.0 (64 bit id space)

Using built-in tag processing pipeline
Using projection SRS 3857 (Spherical Mercator)
Setting up table: planet_osm_point
Setting up table: planet_osm_line
Setting up table: planet_osm_polygon
Setting up table: planet_osm_roads
Allocating memory for dense node cache
Allocating dense node cache in one big chunk
Allocating memory for sparse node cache
Sharing dense sparse
Node-cache: cache=5000MB, maxblocks=80000*65536, allocation method=3

Reading in file: /tmp/china-latest.osm.pbf
Using PBF parser.
Processing: Node(57980k 2520.9k/s) Way(4236k 17.36k/s) Relation(48000 46.02/s)  parse time: 1311s
Node stats: total(57980764), max(5734941590) in 23s
Way stats: total(4236740), max(604382393) in 244s
Relation stats: total(48052), max(8423110) in 1044s
Committing transaction for planet_osm_point
Committing transaction for planet_osm_line
Committing transaction for planet_osm_polygon
Committing transaction for planet_osm_roads
Using built-in tag processing pipeline

Going over pending ways...
    1709004 ways are pending

Using 1 helper-processes
Finished processing 1709004 ways in 916 s

1709004 Pending ways took 916s at a rate of 1865.72/s
Committing transaction for planet_osm_point
Committing transaction for planet_osm_line
Committing transaction for planet_osm_polygon
Committing transaction for planet_osm_roads

Going over pending relations...
    0 relations are pending

Using 1 helper-processes
Finished processing 0 relations in 0 s

Committing transaction for planet_osm_point
警告:  没有事物在运行中
Committing transaction for planet_osm_line
警告:  没有事物在运行中
Committing transaction for planet_osm_polygon
警告:  没有事物在运行中
Committing transaction for planet_osm_roads
警告:  没有事物在运行中
Sorting data and creating indexes for planet_osm_point
node cache: stored: 57980764(100.00%), storage efficiency: 50.42% (dense blocks: 438, sparse nodes: 55701723), hit rate: 100.00%
Copying planet_osm_point to cluster by geometry finished
Creating geometry index on planet_osm_point
Creating indexes on planet_osm_point finished
All indexes on planet_osm_point created in 64s
Completed planet_osm_point
Sorting data and creating indexes for planet_osm_line
Copying planet_osm_line to cluster by geometry finished
Creating geometry index on planet_osm_line
Creating indexes on planet_osm_line finished
All indexes on planet_osm_line created in 451s
Completed planet_osm_line
Sorting data and creating indexes for planet_osm_polygon
注意:  Self-intersection at or near point 13317174.283909315 3548338.7420334821
注意:  Self-intersection at or near point 11985875.572086383 4115611.18050856
Copying planet_osm_polygon to cluster by geometry finished
Creating geometry index on planet_osm_polygon
Creating indexes on planet_osm_polygon finished
All indexes on planet_osm_polygon created in 252s
Completed planet_osm_polygon
Sorting data and creating indexes for planet_osm_roads
Copying planet_osm_roads to cluster by geometry finished
Creating geometry index on planet_osm_roads
Creating indexes on planet_osm_roads finished
All indexes on planet_osm_roads created in 125s
Completed planet_osm_roads

Osm2pgsql took 3861s overall
bash-4.2$


4、导入OpenStreetMap-Carto样式

上面步骤做完后,地图数据已经完成导入了,这个Carto样式可以不用导入!

下载后解压,然后进入目录,比如我的是:/tmp/openstreetmap-carto-4.12.1,接着执行下面语句:

osm2pgsql -G --hstore --style openstreetmap-carto.style --tag-transform-script openstreetmap-carto.lua -d chinaosm -C 5000 /tmp/china-latest.osm.pbf

提示:当我做这一步的时候,发现它是又重新导入china-latest.osm.pdf数据,等了半天。。。


(完)



 类似资料: