0.Ubuntu16.04下OpenStreetMap安装指南

以下资料形成参考:http://blog.csdn.net/goldenhawking/article/details/7952303

GIS相关的开源软件和Ubuntu结合的更好,很多依赖都可以直接从源安装,在CentOS7上折腾确实是艰难的决定。
更进一步,OSGEO这个组织对Lubuntu16.04做了进一步的改造,直接推出安装几乎所有GIS相关软件的ISO镜像,真是我这种初学者的好福利啊。详情请看'http://www.osgeo.org/'

1.系统部署

绝大部分软件都已经是安装好的状态,少部分需要手动安装。

1.1 安装系统依赖

sudo apt-get update  
sudo apt-get dist-upgrade  
sudo apt-get install  libmapnik-dev libmapnik3.0 apache2-dev openssh-server lrzsz p7zip-full ttf-unifont

1.2 提升www-data权限

sudo vim /etc/passwd
改为/bin/bash

2.数据库配置

参考 Centos7部署PostGIS 部分

3.配置mapnik-style

3.1 下载mapnik-style

sudo mkdir /var/lib/mod_tile  
cd /var/lib/mod_tile  
sudo chown  www-data:www-data -R /var/lib/mod_tile
sudo su www-data
svn co http://svn.openstreetmap.org/applications/rendering/mapnik mapnik-style

注意:

vim mapnik-style/inc/fontset-settings.xml.inc.template

替换

unifont Medium 为 Unifont Medium

3.2下载世界,海岸线地图数据

以下五个文件从mapnik-style中get-coastlines.sh文件获取下载地址,可能有变化

http://tile.openstreetmap.org/world_boundaries-spherical.tgz
http://tile.openstreetmap.org/processed_p.tar.bz2
http://tile.openstreetmap.org/shoreline_300.tar.bz2
http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places.zip
http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_boundary_lines_land.zip

解压world_boundaries下载步骤中的五个文件,取出所有的文件,并放到world_boundaries中

sudo mv world_boundaries /usr/local/share/

3.3 生成OSM.XML

cd /mapnik-style  
./generate_xml.py --world_boundaries=/usr/local/share/world_boundaries --host=127.0.0.1 --port=5432 --user=osmgis --password=1 --dbname=osmgis

3.4测试渲染

./generate_image.py

保存后,直接执行,如果没错,就出现了 image.png

4.部署mod_tile

git clone https://github.com/openstreetmap/mod_tile

4.1 编译与安装

cd mod_tile  
./autogen.sh  
./configure  
make  
sudo make install  
sudo make install-mod_tile  
sudo ldconfig

4.2导入mod_tile

sudo vim /etc/apache2/mods-available/mod_tile.load

里面添加一行:

LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so 

生效

cd /etc/apache2/mods-enabled
sudo ln -s /etc/apache2/mods-available/mod_tile.load

5.配置瓦片渲染后台服务renderd

5.1创建文件夹

sudo mkdir /var/run/renderd  
sudo chown www-data /var/run/renderd 

5.2配置renderd

sudo vim /usr/local/etc/renderd.conf

做一下配置:

[renderd]  
;把socketname设置到刚才创建的文件夹里  
socketname=/var/run/renderd/renderd.sock  
num_threads=4  
tile_dir=/var/lib/mod_tile  
stats_file=/var/run/renderd/renderd.stats  

[mapnik]  
plugins_dir=/usr/lib/mapnik/3.0/input  
font_dir=/usr/share/fonts/truetype
font_dir_recurse=1  

[default]  
URI=/osm_tiles/  
XML=/var/lib/mod_tile/mapnik-style/osm.xml
HOST=localhost  
;HTCPHOST=proxy.openstreetmap.org

5.3 设置用户访问网页的入口点

sudo vim  /etc/apache2/sites-available/000-default.conf  

加入

 LoadTileConfigFile /usr/local/etc/renderd.conf
 ModTileRenderdSocketName /var/run/renderd/renderd.sock
 ModTileRequestTimeout 0
 ModTileMissingRequestTimeout 30 

5.4测试

cd  /var/lib/mod_tile  
sudo su www-data  
renderd -f -c /usr/local/etc/renderd.conf

网页打开:

http://192.168.15.137/osm_tiles/0/0/0.png

修改时间戳:

sudo touch /var/lib/mod_tile/planet-import-complete  
sudo chown www-data /var/lib/mod_tile/planet-import-complete

6.OpenLayer

wget http://www.openstreetmap.org/openlayers/OpenStreetMap.js    

6.1部署

sudo mv OpenStreetMap.js /var/www/html/openlayers
sudo chmod +r -R /var/www/html/openlayers

6.2html

sudo vim /var/www/html/map.html

写入

<html>  
<head>  
    <title>OSM Local Tiles</title>  
    <link rel="stylesheet" href="/openlayers/theme/default/style.css" type="text/css" />  
    <!-- bring in the OpenLayers javascript library  
         (here we bring it from the remote site, but you could  
         easily serve up this javascript yourself) -->  
    <script src="/openlayers/OpenLayers.js"></script>  
    <!-- bring in the OpenStreetMap OpenLayers layers.  
         Using this hosted file will make sure we are kept up  
         to date with any necessary changes -->  

    <script src="/openlayers/OpenStreetMap.js"></script>  

    <script type="text/javascript">  
// Start position for the map (hardcoded here for simplicity)  
        var lat=31.27386;  
        var lon=121.48132;  
        var zoom=7;  
        var map; //complex object of type OpenLayers.Map  

        //Initialise the 'map' object  
        function init() {  
            map = new OpenLayers.Map ("map", {  
                controls:[  
                    new OpenLayers.Control.Navigation(),  
                    new OpenLayers.Control.PanZoomBar(),  
                    //new OpenLayers.Control.PanZoom(),  
                    new OpenLayers.Control.Permalink(),  
                    new OpenLayers.Control.ScaleLine({geodesic: true}),  
                    new OpenLayers.Control.Permalink('permalink'),  
                    new OpenLayers.Control.KeyboardDefaults(),  
                    new OpenLayers.Control.NavToolbar(),  
                    new OpenLayers.Control.Attribution()],  
                maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),  
                maxResolution: 156543.0339,  
                numZoomLevels: 19,  
                units: 'm',  
                projection: new OpenLayers.Projection("EPSG:900913"),  
                displayProjection: new OpenLayers.Projection("EPSG:4326")  
            } );  

  
            // This is the layer that uses the locally stored tiles  
            var newLayer = new OpenLayers.Layer.OSM("Local Tiles", "/osm_tiles/${z}/${x}/${y}.png", {numZoomLevels: 19, transitionEffect: "resize"});  
            map.addLayer(newLayer);  
            var switcherControl = new OpenLayers.Control.LayerSwitcher();  
            map.addControl(switcherControl);  
            var vector_layer = new OpenLayers.Layer.Vector('Editable Vectors');  
            map.addControl(new OpenLayers.Control.EditingToolbar(vector_layer));  
            map.addLayer(vector_layer);  

            map.addControl(new OpenLayers.Control.Graticule({visible: false}));  
            var mousepos = new OpenLayers.Control.MousePosition({div: document.getElementById('mousepos_div')});  
            map.addControl(mousepos);  
            //mousepos.moveTo(new OpenLayers.Pixel(64,0));  

            map.addControl(new OpenLayers.Control.OverviewMap());  
             /*  
            var navigationT =    new OpenLayers.Control.TouchNavigation({  
                dragPanOptions:{  
                    enableKinetic: true  
                }  
            });  

            map.addControl(navigationT);  
            */  
            if( ! map.getCenter() ){  
                var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());  
                map.setCenter (lonLat, zoom);  
            }  
        }  
    </script>  

</head>  
<!-- body.onload is called once the page is loaded (call the 'init' function) -->  
<body onload="init();">  
    <!-- define a DIV into which the map will appear. Make it take up the whole window -->  
    <div style="width: 100%; height: 93%" id="map">  
    </div>  
    <P><a href='/index.html'>start screen</a></P>  
    <div style="width: 100%; height: 5%" id="mousepos_div">
    </div>  
</body>  
</html>  

6.3访问测试

http://192.168.15.137/map.html
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,563评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,713评论 6 342
  • 在公司避免不了会给电脑重装系统,小到几台大到几十上百台,如果就只有几台手动安装就可以了,那么如果几十上百台,手动安...
    jie0112阅读 2,363评论 0 4
  • 不知道为什么,我有点孤独和失落,来朋友家借宿,陌生感充斥着整个心灵,陌生的床,陌生的夜景,陌生的枕边人……突然很想...
    小动力if阅读 155评论 0 1
  • 我们很有效率,但是没有目标。我们笨鸟先飞,却不知所终。很多人,根本就没有认真地想过,自己的人生要怎么度过。 1.为...
    皇阿玛PLUS阅读 1,222评论 0 2