• 如何在Ubuntu20.04上为OpenStreetMap设置Tegola Vector Tile服务器

    Tegola是OpenStreetMap的开源矢量平铺服务器。前面我们解释了使用mapnik和mod_tile(基于光栅的tile服务器)设置OSM tile服务器的过程。本教程将向您展示如何在Ubuntu20.04上设置Tegola vector tile服务器。 矢量瓷砖的好处 更高DPI设备的显示质量(视网膜显示) 小型高效格式(无需512*512图像) 更清晰易读的文本 用于平视显示的即时标签 独立的内容和样式,允许创建指向同一平铺堆栈的多个样式。 昼夜模式 矢量平铺格式 矢量图块有几种格式。 GeoJSON TopoJSON Mapbox矢量图块(MVT) 05m OpenScienceMap二进制文件 Arc GeoServices JSON Tegola使用Mapbox矢量平铺格式。 先决条件/硬件要求 所需的RAM和磁盘空间取决于要使用哪个国家的地图。例如 英国地图至少需要12G内存和100GB磁盘空间。 整个行星地图至少需要32G RAM和1TB SSD(固态驱动器)。用旋转硬盘来绘制整个地球地图是不可行的。 像整个地球一样,将大型地图数据导入PostgreSQL数据库需要很长时间。考虑添加更多的RAM,特别是使用SSD,而不是旋转硬盘来加速导入过程。 如果你打算主持整个世界地图,我建议你从康塔博购买超大VPS,康塔博以 10核CPU 60 GB内存 1.6 TB英特尔Optane SSD 每月只需26.99欧元。 第一步:升级软件 在服务器上进行任何主要工作之前,更新服务器软件始终是一种好的做法。通过SSH登录服务器并运行以下命令。 sudo-apt更新;sudo-apt升级 第2步:安装PostgreSQL数据库服务器和PostGIS扩展 我们将使用PostgreSQL存储地图数据。PostGIS是PostgreSQL的地理空间扩展。运行以下命令来安装它们。 sudo apt安装postgresql postgresql contrib postgis postgresql-12-postgis-3 PostgreSQL数据库服务器将自动启动并侦听127.0.0.1:5432。安装过程中将在操作系统上创建postgres用户。它是PostgreSQL数据库服务器的超级用户。默认情况下,该用户没有密码,也不需要设置密码,因为您可以使用sudo切换到postgres用户并登录到PostgreSQL server。 sudo-u postgres-i 现在可以创建PostgreSQL数据库用户osm。 createuser osm 为osm用户设置密码。 psql-c“使用密码'secret_PASSWORD'更改用户osm” 然后创建一个名为osm的数据库,同时使osm成为数据库的所有者-UTF8指定数据库中使用的字符编码方案为UTF8。 createdb-E UTF8-O osm osm 接下来,为osm数据库创建postgis和hstore扩展。 psql-c“创建扩展postgis-d osm psql-c“创建扩展存储-d osm 将osm设置为表所有者。 psql-c“将表空间参考系统所有者更改为osm-d osm 创建一个名为natural_earth的数据库,同时让osm成为该数据库的所有者。 createdb-E UTF8-O osm natural_earth 接下来,为natural_earth数据库创建postgis和hstore扩展。 psql-c“创建扩展postgis-d自然地球psql-c“创建扩展存储-d.自然地球 退出postgres用户。 出口 第3步:优化PostgreSQL Server性能 导入过程可能需要一些时间。为了加快这个过程,我们可以调整一些PostgreSQL server设置以提高性能。编辑PostgreSQL主配置文件。 sudo nano/etc/postgresql/12/main/postgresql。形态 首先,我们应该更改共享缓冲区的值。默认设置为: 共享缓冲区=128MB 这个太小了。经验法则是将其设置为总RAM的25%(不包括交换空间)。例如,我的VPS有60G RAM,所以我将其设置为: 共享缓冲区=15GB 找到下面这行。 #工作_内存=4MB#维护_工作_内存=64MB 同样,该值太小。我使用以下设置。 工作记忆=1GB维护记忆=8GB工作记忆=8GB 然后找到下面一行。 #有效缓存大小=4GB 如果你像我一样有很多RAM,你可以为有效的缓存大小设置一个更高的值,比如20G。 有效缓存大小=20GB 保存并关闭文件。重新启动PostgreSQL以使更改生效。 sudo systemctl重启postgresql 默认情况下,PostgreSQL会尝试在RAM中使用巨大的页面。然而,Linux默认情况下不会分配巨大的页面。检查PostgreSQL的进程ID。 sudo head-1/var/lib/postgresql/12/main/postmaster。pid 样本输出: 7031 然后检查该进程ID的峰值。 grep^VmPeak/proc/7031/status 样本输出: 峰值:16282784 kB 这是PostgreSQL将使用的峰值内存大小。现在检查Linux中巨大页面的大小。 cat/proc/meminfo | grep-i巨大 样本输出: AnonHugePages:0 kB ShmemHugePages:0 kB HugePages_总计:0 HugePages_免费:0 HugePages_Rsvd:0 HugePages_剩余:0 HugePages大小:2048 kB Hugetlb:0 kB 我们可以计算出我们需要多少巨大的页面。将VmPeak值除以巨大页面的大小:16282784KB/2048KB=7950。编辑/etc/sysctl。conf文件。 sudo nano/etc/sysctl。形态 添加以下行以分配7950个大页面。 虚拟机。nr_hugepages=7950 保存并关闭文件。然后应用更改。 sudo sysctl-p 如果你再次查看meminfo, cat/proc/meminfo | grep-i巨大 我们可以看到有7950个巨大的页面可用。 AnonHugePages:0 kB ShmemHugePages:0 kB HugePages_总计:7950 HugePages_免费:7950 HugePages_Rsvd:0 HugePages_supp:0 HugePages大小:2048 kB 重新启动PostgreSQL以使用大型页面。 sudo systemctl重启postgresql 在远程服务器上使用屏幕 由于导入过程可能需要很长时间,并且您的计算机可能已断开与Internet的连接,因此建议使用screen实用程序保持会话的活动状态。在Ubuntu 20.04服务器上安装屏幕: sudo apt安装屏幕 然后启动屏幕: 屏幕 第一次启动时,您将看到一个介绍文本,只需按Enter键即可结束。然后你就可以像往常一样运行命令了。 步骤4:将地图数据导入PostgreSQL 要导入地图数据,我们将使用Impom,它将OpenStreetMap数据转换为支持postGIS的PostgreSQL数据库。从Github下载。 wgethttps://github.com/omniscale/imposm3/releases/download/v0.11.1/imposm-0.11.1-linux-x86-64.tar.gz 提取档案。 tar xvf impom-0.11.1-linux-x86-64。焦油广州 将其移动到/opt/目录。 sudo mv impom-0.11.1-linux-x86-64/opt/impom 下载tegola osm脚本。 git克隆https://github.com/go-spatial/tegola-osm.git 将其移动到/opt/目录。 sudo mv tegola osm/opt/ 接下来,运行以下命令以PBF(ProtoBufBinary)格式下载整个行星(50G)的地图数据。 wget-chttp://planet.openstreetmap.org/pbf/planet-latest.osm.pbf 请注意openstreetmap的下载速度。org当前限制为2048kb/s。您可以从另一个镜像下载植物地图,如 wget-chttps://download.bbbike.org/osm/planet/planet-latest.osm.pbf 如果你想要一张各个国家/州/省/市的地图,请访问http://download.geofabrik.de.还有,自行车。org以不同的格式提供了全球200多个城市和地区的摘录。例如,使用以下命令下载英国地图数据(1.1G)。 wget-chttp://download.geofabrik.de/europe/great-britain-latest.osm.pbf 运行以下命令以导入地图数据。 /opt/imporm/imporm导入-连接postgis://osm:osm_password@localhost/osm-mapping/opt/tegola-osm/imposm3。json——阅读英国最新消息。奥斯曼。pbf-写入 现在,您可能不需要在服务器上执行其他操作。由于您使用的是Screen,所以可以按Ctrl+A,释放这些键,然后按D键从当前屏幕会话中分离。您将看到如下消息。 [与32113.pts-1.focal分离] 这告诉我之前的屏幕会话ID是32113。您可以从SSH会话中注销,甚至可以关闭计算机。别担心,OSM导入过程仍在运行。当需要返回并检查导入进度时,请将SSH连接到服务器并运行以下命令以获取上一个屏幕会话ID。 屏幕-ls 样本输出: 屏幕显示:32113。pts-1。focal(2020年5月19日03:45:29下午)(已分离)1个插座插入/运行/屏幕/S-linuxbabe。 然后可以重新连接到上一个屏幕会话。 屏幕-r 32113 这样你就能继续工作了。 导入地图数据后,运行以下命令将其部署到生产环境中。 /opt/imporm/imporm导入-连接postgis://osm:osm_password@localhost/osm-mapping/opt/tegola-osm/imposm3。json-部署生产 第5步:下载Tegola 转到Tegola Github页面并下载linux版本。您可以使用以下命令在终端中下载它。 wgethttps://github.com/go-spatial/tegola/releases/download/v0.13.0/tegola_linux_amd64.zip 解开它。 sudo apt安装解压解压tegola_linux_amd64。拉链 将二进制文件移动到/usr/local/bin/目录。 sudo mv tegola/usr/local/bin/ 步骤6:导入OSM土地和自然地球数据集 编辑/opt/tegola osm/osm_land。sh文件。 sudo nano/opt/tegola osm/osm_land。嘘 输入数据库详细信息。 #数据库连接变量DB_NAME=“osm”DB_HOST=“localhost”DB_PORT=“5432”DB_USER=“osm”DB_PW=“osm_password” 保存并关闭文件。安装gdal。 sudo-apt-install-gdal-bin 在gis数据库中生成关系图和多边形。 /opt/tegola osm/osm_土地。嘘 接下来,编辑/opt/tegola osm/natural_earth。sh文件。 sudo nano/opt/tegola osm/natural_earth。嘘 输入数据库详细信息。 #数据库连接变量DB_NAME=“natural_earth”DB_HOST=“localhost”DB_PORT=“5432”DB_USER=“osm”DB_PW=“osm_password” 保存并关闭文件。然后在natural_earth数据库中生成表。 /opt/tegola osm/natural_earth。嘘 运行postgis_helpers SQL脚本。 sudo-u postgres psql-d osm-a-f/opt/tegola osm/postgis_helpers。sql 运行postgis_索引。sql脚本向OSM表列添加索引以提高查询性能。 sudo-u postgres psql-d osm-a-f/opt/tegola osm/postgis_index。sql 第7步:启动Tegola 编辑配置文件。 sudo nano/opt/tegola osm/tegola。汤姆 按如下方式配置侦听端口、缓存类型和数据提供程序。 [webserver]port=“:8080”#Tegola提供三种磁贴缓存策略:“文件”、“redis”,以及“s3”[cache]type=“file”basepath=“/tmp/tegola cache”#OpenStreetMap(OSM)[providers]]name=“OSM”type=“postgis”host=“127.0.0.1”port=“5432”database=“OSM”user=“OSM”password=“OSM_password”#Natural Earth[[providers]]name=“ne”type=“postgis”host=“127.0.0.1”port=“5432”database=“Natural_Earth”user=“OSM”password=“OSM”password=“OSM# 找到下面这行。 中心=[-76.275329586789,39.153492567373,8.0]#可选中心值。TileJSON规范的一部分 可以为地图和默认缩放级别设置自定义中心位置(经度和纬度)。请注意,必须使用十进制值,不能使用整数值。 中心=[0.8,55.5,5.0]#可选中心值。TileJSON规范的一部分 保存并关闭文件。然后开始Tegola。 /usr/local/bin/tegola-service--config=/opt/tegola-osm/tegola。汤姆 现在Tegola正在监听端口8080。 步骤8:为Tegola创建Systemd服务 特戈拉正在前台跑步。为了在后台运行,我们可以创建一个systemd服务,它还允许Tegola在系统启动时自动启动。按Ctrl+C停止当前的Tegola进程,然后创建Tegola。服务文件。 sudo nano/etc/systemd/system/tegola。服务 将以下行添加到此文件。 [Unit]Description=Tegola Vector Tile Server[Service]Type=simple User=www data ExecStart=/usr/local/bin/Tegola-Service--config=/opt/Tegola osm/Tegola。toml Restart=on failure RestartSec=5[Install]WantedBy=multi-user。目标 保存并关闭文件。将www数据设为/tmp/tegola缓存/目录的所有者。 sudo chown www data:www data/tmp/tegola cache/-R 然后启用并启动此服务。 sudo systemctl启用tegola--现在 检查它的状态。确保它在运行。 系统控制状态tegola 然后在web浏览器地址栏中键入 您的服务器ip地址:8080 你应该看到矢量图。恭喜!您刚刚成功构建了自己的vector tile服务器。请注意,旧版本的Firefox无法显示这些矢量图块。您需要使用第三方库来显示基于矢量平铺的地图,本教程末尾将对此进行解释。 第9步:设置反向代理 要使用域名访问Tegola,我们可以使用Nginx或Apache为Tegola设置反向代理。这也将允许我们使用免费的Let's Encrypt证书启用HTTPS。 Nginx Nginx是非常流行的web服务器和反向代理。如果您更喜欢使用Nginx,请运行以下命令进行安装。 sudo apt安装nginx 然后为Tegola创建一个服务器块文件。 sudo nano/etc/nginx/conf.d/tegola。形态 将以下内容添加到此文件。更换瓷砖。实例使用你自己的域名。您还应该为此子域创建DNS记录。如果你没有一个真正的域名,我建议你去买一个便宜的域名。价格低廉,而且他们终身免费为whois提供隐私保护。 服务器{listen 80;listen[:]:80;server_name tile.example.com;access_log/var/log/nginx/tegola.access;error_log/var/log/nginx/tegola.error;location/{proxy_passhttp://127.0.0.1:8080; 代理设置头主机$Host;代理集头X-Real-IP$remoteu addr;proxy_set_header X-Forwarded-For$proxy_add_X_Forwarded_For;proxy_set_header X-Forwarded-Proto$方案;代理集头X转发协议$方案;proxy_set_header X-Forwarded-Host$http_Host;} 保存并关闭此文件。然后测试Nginx配置。 sudo nginx-t 如果测试成功,请重新加载Nginx以使更改生效。 sudo systemctl重新加载nginx 现在您可以通过tile访问Tegola。实例通用域名格式。 阿帕奇 如果您更喜欢Apache而不是Nginx,那么使用以下命令安装ApacheWeb服务器。 sudo apt安装apache2 要使用Apache作为反向代理,我们需要启用代理模块和头模块。 sudo a2enmod代理u http头 然后为Tegola创建一个虚拟主机文件。 sudo nano/etc/apache2/网站可用/tegola。形态 将以下配置放入该文件。更换瓷砖。实例com与您的实际域名。别忘了为这个子域创建DNS记录。如果你没有一个真正的域名,我建议你去买一个便宜的域名。价格低廉,而且他们终身免费为whois提供隐私保护。 <虚拟主机*:80>服务器名互动程序。实例com错误文件404/404。html#HTTP代理ProxyPass/http://127.0.0.1:8080/ProxyPassReverse/http://127.0.0.1:8080/ProxyHost On&lt/VirtualHost> 保存并关闭文件。然后启用这个虚拟主机。 苏多·艾森特·特戈拉。形态 重新启动Apache sudo systemctl重启apache2 现在,您可以使用域名磁贴访问Tegola。实例通用域名格式。 第10步:启用HTTPS 为了在您从外部访问Tegola服务器时加密HTTP流量,我们可以通过安装Let’s encrypt颁发的免费TLS证书来启用HTTPS。运行以下命令在Ubuntu 20.04上安装Let's Encrypt client(certbot)。 sudo apt安装certbot 如果您使用Nginx,那么您还需要安装Certbot Nginx插件。 sudo apt安装python3 certbot nginx 接下来,运行以下命令获取并安装TLS证书。 sudo certbot--nginx--agree tos--redirect--hsts--stype ocsp--email[email protected]-d tile。实例通用域名格式 如果使用Apache,则需要安装Certbot Apache插件。 sudo apt安装python3 certbot apache 接下来,运行以下命令获取并安装TLS证书。 sudo certbot--apache--agree tos--redirect--hsts--stype ocsp--uir--email[email protected]-d tile。实例通用域名格式 哪里: --nginx:使用nginx插件。 --apache:使用apache插件。 --同意:同意服务条款。 --重定向:通过301重定向强制HTTPS。 --hsts:为每个HTTP响应添加严格的传输安全头。强制浏览器始终对域使用TLS。防止SSL/TLS剥离。 --装订ocsp:启用ocsp装订。有效的OCSP响应被绑定到服务器在TLS期间提供的证书上。 --uir:升级不安全的请求。 现在应获得证书并自动安装。您可以通过HTTPS访问Tegola:https://tile.example.com. 建立一个示例地图 您需要使用第三方库来显示基于矢量平铺的地图。我以OpenLayer为例。创建一张地图。html文件,并输入以下代码。 <!doctype html&gt&书信电报;html lang=“en”&gt&书信电报;头&gt&书信电报;link rel=“stylesheet”href=”https://openlayers.org/en/v5.3.0/css/ol.css“type=“text/css”><style>#地图{高度:1000px;宽度:100%;背景色:#1C79B5;}&lt/风格&gt&书信电报;脚本src=”https://openlayers.org/en/v5.3.0/build/ol.js“type=“text/javascript”></script><title>OpenLayers示例</title></head><body><div id=“map”class=“map”></div><script type=“text/javascript”>var defaultStyle=new ol.style.style({fill:new ol.style.fill({color:[2342312221,1]})中风:新ol。风格笔划({color:[182177162,1],宽度:1});var waterStyle=新的ol。风格样式({fill:new ol.Style.fill({color:[28121181,1]}),笔划:new ol。风格笔划({color:[27107159,1],宽度:1});var streetStyle=新ol。风格样式({fill:new ol.Style.fill({color:[111,44173,1]}),笔划:new ol。风格笔划({颜色:[93,32150,1],宽度:1});函数样式函数(特征,分辨率){if(feature.get('type')='water'| | | feature.get('layer')='water| | | | feature.get('layer')='water| | featureif(feature.get('layer')='transport_lines'){return[streetStyle];}如果(feature.get('layer')='country_polygons'| |特征。get('layer')=='landuse_areas'){return null;//如果没有要应用的样式,则返回null}return[defaultStyle];}var map=新ol。Map({target:'Map',layers:[new ol.layer.VectorTile({source:new ol.source.VectorTile({format:new ol.format.MVT(),url:'https://tile.linuxbabe.com/maps/osm/{z} /{x}/{y}。pbf'}),style:styleFunction}),view:new-ol。视图({center:ol.proj.fromlont([0.5,54.5]),//地图将以最初的缩放为中心的坐标:6})&lt/脚本&gt&lt/车身&gt&lt/html> 保存并关闭文件。下面是它的样子。 结论 我希望本文能帮助你在Ubuntu20.04上安装Tegola Vector Tile服务器。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?

    2022.03.23 浏览:351