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
在这里插入图片描述

  • 22
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值