基于PostGIS(Postgres)+Node.js实现的xyz瓦片地图服务器

背景介绍

前两天研究GeoServer发布存储在PostGIS中栅格数据,最终目的是想在PostGIS中存储金字塔瓦片,用GeoServer发布,但是最后经过研究不改GeoServer源码的情况下,好像只支持将大图tif存在PostGIS数据库中进行发布,金字塔存入数据库后由于PostGIS的raster类型只存了瓦片的scale没有存类似层级的东西,导致发布后所有的金字塔层级一起显示了(没有层级控制),导致了很多影像叠加到一起了,后来又想到在数据库新增一个level字段,然后使用sld来进行控制显示,最后发现sld读不到字段表,这个路径也就放弃了(也许是我没弄对,有大佬点拨一下的话万分感谢)。

今天灵感来了(自己弄着玩),想到直接把瓦片的编号以及原始数据存到数据库,然后写个网络接口按照xyz数据源的格式请求,接口里查询数据库返回一张image给客户端,是不是就相当于一个xyz的瓦片服务器了?最终经过测试是可行的,先上两张效果图。

QGIS加载效果:

c432545dfa224e2983d1b205f59a75ab.png

水经微图加载效果:

8e7123471c8a47f580e4696bcdefe3cf.png

下面就说一下实现的具体流程

数据准备

数据是wgs84的瓦片,xyz都是从0开始,从左上角开始逆时针编号,以下是瓦片本地存储示例:

组织结构最外层为z值,第二层为x值,图片名称为y值。

数据库表示例:

b9a129b65fe84e6190d35f0748fb899c.png

然后使用Qt将瓦片读入并写入数据库,相关代码如下:

#pragma once

#include <QString>
#include <QSqlDatabase>

class CImageUploader
{
public:
	CImageUploader();
	~CImageUploader();

	void Init();

	void CreateTable();

	void UploadTileImage(const QString& strTileDir);

private:

	QSqlDatabase m_db;
};

#include "ImageUploader.h"
#include <QDir
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值