baremaps 部署

参考:https://baremaps.apache.org/documentation/

一、基础环境

1、安装 JDK

版本需要至少 Java 17

下载:https://www.oracle.com/cn/java/technologies/downloads/

tar -zxf jdk-17_linux-x64_bin.tar.gz -C /usr/local
cd /usr/local
mv jdk-17.0.11 jdk

vi /etc/profile
# 文件末尾添加
JAVA_HOME=/usr/local/jdk
CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME

2、安装 PostGIS

 为了插入和生成矢量图块,需要设置 PostGIS 数据库。该数据库将托管生成矢量图块所需的所有数据。

# docker镜像安装 PostGIS
docker run \
  --name baremaps \
  --publish 5432:5432 \
  -e POSTGRES_DB=baremaps \
  -e POSTGRES_USER=baremaps \
  -e POSTGRES_PASSWORD=baremaps \
  -d postgis/postgis:latest

3、安装 Maven

版本至少 3.xx

下载:https://maven.apache.org/download.cgi

cd /usr/local/
tar -zxvf apache-maven-3.9.6-bin.tar.gz
mv apache-maven-3.9.6 maven

vim /etc/profile
# 末尾新增
export PATH=$PATH:/usr/local/maven/bin

4、安装 gradle

下载:https://gradle.org/releases/

或者:https://services.gradle.org/distributions/

cd /usr/local/
unzip gradle-8.7-all.zip

vim /etc/profile
# 末尾新增
export PATH=$PATH:/usr/local/gradle/bin

source /etc/profile

gradle -v

二、使用 Maven 构建 Baremaps

下载:https://baremaps.apache.org/documentation/examples/

# 更新 hosts
vi /etc/hosts
# 新增
140.82.113.3    github.com

# 下载
git clone https://github.com/apache/incubator-baremaps.git

#构建
mv incubator-baremaps baremaps
cd baremaps/
./mvnw clean package -DskipTests

在这里插入图片描述

 上面输出红圈中指出了baremaps-cli二进制文件所在的位置。参考二进制baremaps-cli文件的位置,你可以运行以下命令来解压 Baremaps 并将其放入你的PATH

tar -xvf ./baremaps-cli/target/apache-baremaps-<version>-SNAPSHOT-incubating-bin.tar.gz -C target/
export PATH=$PATH:`pwd`/target/apache-baremaps-<version>-SNAPSHOT-incubating-bin/bin

三、将 OSM 数据导入 PostGIS

cd examples/openstreetmap
# 下载并导入示例 OSM 数据到 Postgres 中。
baremaps workflow execute --file workflow.json

https://raw.githubusercontent.com/apache/incubator-baremaps/main/examples/openstreetmap/workflow.json

在这里插入图片描述

四、预览和编辑带有示例配置文件的地图

参考:https://baremaps.apache.org/documentation/examples/serve-and-export-vector-tiles/

# 在命令后加 & 可以后台运行
baremaps map dev \
  --tileset 'tileset.json' \
  --style 'style.json'

本地开发服务器应该已经启动了。现在可以在浏览器中可视化矢量图片:http://localhost:9000
在这里插入图片描述

五、生成等值线

 等高线是地形图中的关键元素,因为它们使我们能够直观地看到某个区域的海拔。在本教程中,将展示如何从数字高程模型 (DEM) 创建等高线并使用矢量图块显示它们。

5.1、安装 gdal
sudo apt-get install gdal-bin
5.2、下载 DEM 数据

下载:https://search.earthdata.nasa.gov/search/granules?p=C1711961296-LPCLOUD&pg[0][v]=f&pg[0][gsk]=-start_date&q=aster%20v3&tl=1691157297!3!!

登录账户:liuxin666/Liu773528514.0

示例文件:ASTGTMV003_N03E008_dem.tif

5.3、重新投影 GeoTiff

 本教程中提供的 geotiff 文件已采用所需的投影 (WebMercator),但如果您想使用不同的 geotiff 文件,可以使用 gdalwarp 命令重新投影它。以下是如何执行此操作的示例:

gdalwarp -rc \
  -s_srs epsg:4326 -t_srs epsg:3857 \
  -dstnodata 0 -of GTiff -co tiled=yes \
  ASTGTMV003_N03E008_dem.tif \
  ASTGTMV003_N03E008_dem-3857.tif

参数解释:

  • -rc: 表示使用逐行分块(row-by-row)处理。
  • -s_srs epsg:4326: 指定输入文件的投影为 EPSG 4326。
  • -t_srs epsg:3857: 指定输出文件的投影为 EPSG 3857(WebMercator)。
  • -dstnodata 0: 指定输出文件中的无数据值为 0。
  • -of GTiff: 指定输出文件格式为 GeoTiff。
  • -co tiled=yes: 将输出 GeoTiff 文件设置为分块存储以提高效率。
  • ASTGTMV003_N03E008_dem.tif: 是输入 GeoTiff 文件的名称。
  • ASTGTMV003_N03E008_dem_3857.tif: 是输出重新投影后的 GeoTiff 文件的名称。
5.4、生成等值线

现在我们在所需的投影中有了 GeoTiff,我们可以使用 gdal_contour 命令来生成等高线。参数-a指定包含高程数据的列,-i参数指定应生成等值线的间隔(在本例中,我们使用 10 米),参数-nln命名将包含数据的表。

在名为 ASTGTMV003_N03E008_dem_3857.tif 的 GeoTiff 文件上生成等值线,等值线间隔为 10 米,并将结果存储到 PostgreSQL 数据库中:(数据库user和password注意不要错)

gdal_contour \
  -a elevation -nln aster_dem -i 10 \
  -f PostgreSQL \
  ASTGTMV003_N03E008_dem-3857.tif "PG:host=localhost user=baremaps password=baremaps dbname=baremaps"

参数解释:

  • -a elevation:指定包含高程数据的列名。
  • -nln aster_dem:指定表的名称,这里命名为 aster_dem。
  • -i 10:指定等值线的间隔为 10 米。
  • -f PostgreSQL:指定输出格式为 PostgreSQL。
  • reprojected_dem_utm33n.tif:输入的 GeoTiff 文件名。
  • "PG:host=localhost user=baremaps password=baremaps dbname=baremaps":PostgreSQL 数据库连接信息,包括主机、用户名、密码和数据库名。
5.5、使用索引提高性能

为了提高等高线的性能,可以在数据库中添加一些索引。以下是如何创建索引的示例SPGIST

docker exec -it [containerID or NAMES] psql -U baremaps -d baremaps

DROP INDEX IF EXISTS aster_dem_gix;
CREATE INDEX IF NOT EXISTS aster_dem_gix ON aster_dem USING SPGIST(wkb_geometry);
5.6、显示等高线

最后,我们可以使用 Baremaps 在 Web 浏览器中显示等高线。为此,请运行以下命令:

# 本命令用于执行一个名为 "dev" 的地图操作,并指定了一个瓦片集(tileset)文件和一个样式(style)文件
baremaps map dev \
  --tileset 'tileset.json' \
  --style 'style.json'
  
baremaps map dev --log-level DEBUG --tileset 'tileset.json' --style 'style.json'

# "tileset.json":瓦片集文件,该文件可能包含有关瓦片的配置信息,如瓦片的范围、缩放级别、瓦片格式等。
# "style.json":样式文件,该文件可能包含关于地图样式的信息,如图层样式、颜色、标签等。

这将启动图块服务器并在您进行更改时自动重新加载配置文件。然后您可以在 Web 浏览器中预览地图。

问题:执行命令后无法展示等值线。

原因:baremaps执行命令的时候,指定的瓦片集是OSM数据的瓦片集,不是生成等值线的瓦片集。从Github中查找生成等值线的瓦片集,下载之后替换添加到该目录下。如果遇到字段不存在问题根据输出信息修改SQL语句。

5.7、平滑轮廓线(可选)

如果要改善轮廓线的渲染,可以使用平滑函数,例如 ST_ChaikinSmoothing。此函数以几何图形作为输入,并返回该几何图形的平滑版本。以下是如何使用它的一个示例:

UPDATE aster_dem
SET wkb_geometry = ST_ChaikinSmoothing(wkb_geometry, 0.1)

请记住,此步骤是可选的,根据输入数据的质量,可能不是必需的。您可以尝试不同的平滑参数,以找到平滑度和保留原始特征之间的最佳平衡。

例子

1、将自然地球数据导入 PostGIS

使用 Baremaps 在 PostGIS 数据库中导入 Natural Earth 数据。

自然地球是公共领域地图数据集,比例尺为 1:10 米、1:50 米和 1:1.1 亿。

# 以下工作流程将下载 Natural Earth 数据、解压缩并最终将其导入数据库。
cd examples/naturalearth
baremaps workflow execute --file workflow.json

2、构建三维伦敦地图

在数据库中导入伦敦数据。

cd examples/extrusion
baremaps workflow execute --file workflow.json

tileset.json 中文件中,请注意与建筑层相关的 SQL 查询。这里,OSM 中存储的层数乘以 3,这大致相当于层的高度(以米为单位)。

...
select
	id,
	tags || jsonb_build_object('building:height',
	(case when tags ->> 'building:levels' ~ '^[0-9\\.]+$'
	then tags ->> 'building:levels'
	else '1' end)::real * 3),	-- OSM 中存储的层数乘以 3
	geom
from
	osm_ways
where
	tags ? 'building'

然后在 style.json 中使用此属性文件来挤压建筑物。

{
  ...
  "layers": [
    {
      "id": "building",
      "type": "fill-extrusion",
      "source": "baremaps",
      "source-layer": "building",
      "paint": {
        "fill-extrusion-color": "rgb(152, 174, 221)",
        "fill-extrusion-height": [
          "get",
          "building:height"
        ],
        "fill-extrusion-base": 0,
        "fill-extrusion-opacity": 0.9
      }
    }
  ],
  ...
}

要预览此示例,请启动图块查看器。此处,缓存指令是Caffeine 规范(在新标签页中打开) 用于 100MB 的瓦片缓存。

baremaps map dev \
  --tileset 'tileset.json' \
  --style 'style.json'

现在你的浏览器中应该会出现一张带有挤压建筑物的伦敦地图。http://localhost:9000
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/678163.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

centos安装vscode的教程

centos安装vscode的教程 步骤一&#xff1a;打开vscode官网找到历史版本 历史版本链接 步骤二&#xff1a;找到文件下载的位置 在命令行中输入&#xff08;稍等片刻即可打开&#xff09;&#xff1a; /usr/share/code/bin/code关闭vscode后&#xff0c;可在应用程序----编程…

商品最大价值-第13届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第77讲。 商品最大价值&…

在windows操作系统上安装MariaDB

最近收到关于数据库在哪里看的评论&#xff0c;所以就一不做二不休&#xff0c;把安装数据库的步骤写一篇文章吧。 这篇文章介绍如何在windows上完成MariaDB-10.6.5版本的安装&#xff0c;对应MySQL-8.x版本。 第一步&#xff1a;下载安装包 通过以下网盘链接下载MariaDB-10.6…

免杀基本知识,shellcode混淆免杀

一、shellcode分析及免杀的必要性 shellcode是一段十六进制的机器码&#xff0c;插入内存后会被翻译成为CPU的指令&#xff0c;用于执行相关操作。渗透中的shellcode的主要功能就是反弹shell。将shellcode编译成为exe文件后&#xff0c;执行文件主要进行以下三个操作&#xff…

若依:mybatis查询的结果未映射到实体类报null

开启驼峰命名转换&#xff1a; mapUnderscoreToCamelCase: true 我的是mtybatis配置开启驼峰命名转换不生效&#xff0c;还需要在MyBatisConfig中配置 // 配置mybatis自动转驼峰 生效 sessionFactory.getObject().getConfiguration().setMapUnderscoreToCamelCase(true)&#x…

2041:【例5.9】新矩阵

#include <iostream> using namespace std; int main(){const int N 21;//几行几列 int g[N][N] {};int n 0;cin >> n;for (int i 1; i < n; i){for (int j 1; j < n; j){// 输入到几行几列 cin >> g[i][j];if (i j || i j n 1){//如果是这种…

六西格玛绿带考试攻略:自学VS报班?一文帮你理清思路

近年来&#xff0c;六西格玛绿带作为质量管理领域的重要认证&#xff0c;已经成为许多企业和个人追求高质量、高效率的必备证书。然而&#xff0c;面对即将到来的六西格玛绿带考试&#xff0c;很多人都会陷入一个纠结的境地&#xff1a;究竟是选择自学备考&#xff0c;还是报名…

C++并发之线程(std::thread)

目录 1 概述2 使用实例3 接口使用3.1 construct3.2 assigns3.3 get_id3.4 joinable3.5 join3.6 detach3.7 swap3.8 hardware_concurrency 1 概述 Thread类来表示执行的各个线程。   执行线程是指可以在多线程环境中与其他此类序列同时执行的指令序列&#xff0c;同时共享相同…

Go 语言的函数详解:语法、用法与最佳实践

在 Go 语言的世界里&#xff0c;函数是构建和维护任何应用程序的基石。不仅因为它们提供了一种将大问题划分为更小、更易管理部分的方法&#xff0c;而且还因为它们在 Go 程序中扮演着至关重要的角色。从简单的工具函数到复杂的系统级调用&#xff0c;理解和利用 Go 的函数特性…

企业因未安全保存个人信息被罚:警示网络数据安全重要性

网络攻击的隐蔽性越来越强&#xff0c;对网络安全提出了更高的要求。在进行等保测试时&#xff0c;网络运营商能够对系统的安全保护状况有一个大致的认识&#xff0c;并对系统内部和外部都有可能出现的安全问题进行分析&#xff0c;并对其进行加固和修正&#xff0c;以此来增强…

GPT-4与GPT-4O的区别详解:面向小白用户

1. 模型介绍 在人工智能的语言模型领域&#xff0c;OpenAI的GPT-4和GPT-4O是最新的成员。这两个模型虽然来源于相同的基础技术&#xff0c;但在功能和应用上有着明显的区别。 GPT-4&#xff1a;这是一个通用型语言模型&#xff0c;可以理解和生成自然语言。无论是写作、对话还…

全新STC12C5A60S2单片机+LCD19264大屏万年历农历生肖节气节日显示+闹钟+温湿度+台灯

资料下载地址&#xff1a;全新STC12C5A60S2单片机LCD19264大屏万年历农历生肖节气节日显示闹钟温湿度台灯 这是旧版 退役拆解了 新版 与电路图所示 共设置4个按键 短按开关台灯 加减键调光 长按进入菜单 1.台灯 加入PCA PWM 调光 STC12C5A60S2的PCA PWM非常好用 设置简单无极…

文件夹突变解析:类型变文件的数据恢复与预防

在数字化时代&#xff0c;文件夹作为我们存储和组织数据的基本单元&#xff0c;其重要性不言而喻。然而&#xff0c;有时我们可能会遇到一种令人困惑的情况——文件夹的类型突然变为文件&#xff0c;导致无法正常访问其中的内容。这种现象不仅会影响我们的工作效率&#xff0c;…

如何把几个pdf文件合成在一个pdf文件

PDF合并&#xff0c;作为一种常见的文件处理方式&#xff0c;无论是在学术研究、工作汇报还是日常生活中&#xff0c;都有着广泛的应用。本文将详细介绍PDF合并的多种方法&#xff0c;帮助读者轻松掌握这一技能。 打开 “轻云处理pdf官网” 的网站&#xff0c;然后上传pdf。 pd…

dnf手游版游玩感悟

dnf手游于5月21号正式上线&#xff0c;作为一个dnf端游老玩家&#xff0c;并且偶尔上线ppk&#xff0c;自然下载了手游版&#xff0c;且玩了几天。 不得不说dnf手游的优化做到了极好的程度。 就玩法系统这块&#xff0c;因为dnf属于城镇地下城模式&#xff0c;相比…

神经网络是什么?有什么作用?

人工智能是当前的热门科技领域&#xff0c;在自动驾驶、金融服务、智能家居、零售和电商、工业制造、医疗领域、教育领域、交通领域、娱乐领域、能源管理、农业、航空航天等很多领域都有越来越多的应用。 发展人工智能&#xff0c;离不开算力&#xff08;芯片&#xff09;、算…

【Python】 Python装饰器的魔法:深入理解functools.wraps

基本原理 在Python中&#xff0c;装饰器是一种设计模式&#xff0c;用于修改或增强函数或方法的功能。functools.wraps是一个装饰器工厂&#xff0c;它用来帮助我们保持被装饰函数的元数据&#xff0c;比如函数的名字、文档字符串等。 当你创建一个装饰器时&#xff0c;你可能…

进口泰国榴莲注意事项 | 国际物流运输服务 | 箱讯科技

进口泰国榴莲&#xff0c;这个看似简单的行为背后其实隐藏着许多需要注意的细节和相关费用。下面小编带大家了解一下有哪些细节和费用需要注意。 01清关费用 进口泰国榴莲涉及的清关费用包括&#xff1a; 国外提货成本、港口服务费、报关手续费。 国际运输费&#xff0c;可能…

《幸福》期刊杂志投稿发表

《幸福》杂志是由国家新闻出版总署批准&#xff0c;武汉出版社主管&#xff0c;武汉市妇联和武汉出版社联合主办&#xff0c;面向全国发行的人文社科综合期刊。办刊宗旨&#xff1a;宣传普及科学知识及科学方法的研究&#xff1b;倡导新型的人际关系&#xff0c;推介健康的家庭…

Linux学习笔记8

介绍man命令 在Linux中&#xff0c;man命令用于查看系统手册页&#xff08;manual pages&#xff09;。系统手册页是关于各种Linux命令、函数库以及系统调用的详尽文档&#xff0c;能够提供关于命令的使用方法、参数说明、示例以及其他相关信息 可以利用man xxx的命令去查找某…