使用giscat-server服务,简单、高效、开放地支撑二维gis应用开发

简单


基于常用Java框架、以mapbox-gl所用接口为蓝本、以OGC为规范,学习成本极低。

高效


性能是geoserver的数倍:更高压缩率的数据结构、更合理的缓存利用、流传输等技术。

开放


层次化的模块结构,可以支持插件扩展,亦可单独提取某个模块作深度开发。

项目地址 https://doc.giscat.top/giscat-server/quickstart/

接口示例

giscat-server提供了把您的数据快速发布为GIS服务的能力,下面的示例中,我们先体验一下, 从阿里datav (opens new window)下载的全国各省份数据发布成的接口:

#查询名称为"云南省"的省:


curl'https://map.wowtools.org/giscat-server/DataSet/giscat_testdata_test_polygon/Query?properties=id,name&expression=%5B%22%3D%3D%22%2C%5B%22get%22%2C%22name%22%5D%2C%22%E4%BA%91%E5%8D%97%E7%9C%81%22%5D'

其中,expression参数是urlencode后的["==",["get","name"],"云南省"]

#查询距离点(101.5,20.4)最近的3个省:


curl'https://map.wowtools.org/giscat-server/DataSet/giscat_testdata_test_polygon/Nearest?properties=id,name&x=101.5&y=20.4&n=3'

#输入一条线,查询这条线穿过哪些省:


curl'https://map.wowtools.org/giscat-server/DataSet/giscat_testdata_test_polygon/Query?properties=id,name&expression=%5B%22geoIntersects%22%2C%22LINESTRING(100.2%2020.3%2C120.1%2030.4)%22%5D'

其中,expression参数是urlencode后的["geoIntersects","LINESTRING(100.2 20.3,120.1 30.4)"]

上述查询返回值均为geojson,形如:

{
	"type":"FeatureCollection",
	"features":[{
		"type":"Feature",
		"geometry":{
			"type":"MultiPolygon",
			"coordinates":[//....]
		},
		"properties":{
			"name":"浙江省",
			"id":11
		}
	},{
		"type":"Feature",
		"geometry":{
			"type":"MultiPolygon",
			"coordinates":[//....]
		},
		"properties":{
			"name":"安徽省",
			"id":12
		}
	}//...}

#构造一个矢量瓦片图层并在地图上显示:


在线演示地址 https://doc.giscat.top/assets/demo/mvttest.html


    mapboxgl.accessToken = 'pk.eyJ1IjoiaW1saXV5dSIsImEiOiJjbDM4aHM4eXowMDBpM2RvZGdxdGZjeWMxIn0.mYtay02E_Z4iYOsDx3IdoA';
    // 新建一个空白地图
    const map = new mapboxgl.Map({
        container: 'map',
        style: {
            "version": 8,
            "sources": {},
            "layers": []
        },
        refreshExpiredTiles: false,//瓦片过期后自动刷新,这里为了测试方便调整为false
        center: [102.712251, 25.040609],
        zoom: 4
    });
    map.on('load', function () {
        //添加刚才发布的mvt数据源
        map.addSource('tile', {
            "type": "vector",
            "tiles": [
                'https://map.wowtools.org/giscat-server/Map/test_map/VectorTile/{z}/{x}/{y}'
            ],
            "minZoom": 1,
            "maxZoom": 22
        })
        //添加各图层
        map.addLayer({
            "id": "polygons",
            "type": "fill",
            "source": "tile",// 上一步添加的数据源id
            "source-layer": "polygons",// source-layer和mvt服务中的图层名对应
            "layout": {"visibility": "visible"},
            "paint": {"fill-color": '#51bbd6', "fill-opacity": 0.3, "fill-outline-color": '#0000ff'}
        })

        // map.addLayer  ...

        //矢量瓦片图层可以被点击
        map.on('click', 'polygons', (e) => {
            console.log(e.features[0])
        })
    })

#小结


至此,我们已对giscat-server的能力有了大致的了解,它可以:

1、传入一个json格式的表达式查询数据,无论是属性查询还是空间过滤都可以,熟悉mapbox的小伙伴会发现,这个json表达式其实是mapbox expressions (opens new window),所以学习成本很低;

2、最邻近查询,同样可以用mapbox expressions表达式过滤;

3、生成矢量瓦片,矢量瓦片也是可以用mapbox expressions表达式过滤的。

另外,功能1、2中的返回结果可以指定参数f=pbf,使其返回ProtoFeature二进制格式,比默认的geojson格式具有更高的压缩率和更好的性能,对数据量较大的查询很有用处。 同时giscat配备了ProtoFeature字节码还原为json对象的java工具 (opens new window)以及js工具 (opens new window),方便大家快捷地在java和js中使用。

环境搭建

默认地,giscat-server需要postgis数据库和11及以上版本的jdk。 (其实,postgis数据库并不是必须的,您只需要一个关系型数据库来存储giscat-server的配置信息,oracle、mysql甚至sqlite都可以,然后再有一个数据集插件来获取您的gis数据即可,但是建议您对giscat-server有一定的了解后再考虑做这些事。)

#安装postgis


限于篇幅,本节使用docker安装,您也可以不用docker直接安装

mkdir-p /mydata/postgres/database_data

docker run --name postgis \-v /mydata/postgres/database_data:/var/lib/postgresql/data \-ePOSTGRES_PASSWORD=sde \-d--publish"0.0.0.0:5432:5432"\--privileged postgis/postgis:13-3.3 

这里,生成了一个用户名是postgres、密码是sde、端口是5432的postgis容器,并把容器内的pg数据存储目录映射到了宿主机的/mydata/postgres/database_data。

#导入示例配置和测试数据到postgis中


点击这里下载文件并解压,得到示例配置giscat_config.dump、测试数据giscat_testdata.dump。

拷贝dump到容器映射出来的路径,这样在容器内就能看到这两个dump

cp giscat_config.dump /mydata/postgres/database_data/
cp giscat_testdata.dump /mydata/postgres/database_data/

进入容器并切换至postgres用户

# 进入容器dockerexec-it postgis bash# 切换postgres用户su postgres
cd /var/lib/postgresql/data

进入psql命令行,新建数据库giscat_config、giscat_testdata

psql
create database giscat_config;
create database giscat_testdata;exit

建库命令运行结果如下:

postgres@b59bbdec8e03:~/data$ psql
psql (13.10(Debian 13.10-1.pgdg110+1))
Type "help"for help.

postgres=# create database giscat_config;
CREATE DATABASE
postgres=# create database giscat_testdata;
CREATE DATABASE
postgres=# exit
postgres@b59bbdec8e03:~/data$

导入dump

psql -h127.0.0.1  -p5432-U postgres giscat_config <./giscat_config.dump
psql -h127.0.0.1  -p5432-U postgres giscat_testdata <./giscat_testdata.dump

至此,数据准备完毕,一路exit退出到宿主机即可。

注意,如果您为postgis设置的用户名、密码等不是默认的,请参考下列语句修改data_connect表

# 进入psql
psql

# 切到giscat_config库\c giscat_config

# 执行update语句
UPDATE public.data_connect
SET config ='{
  "username": "postgres",
  "password": "xxx",
  "jdbcUrl": "jdbc:postgresql://localhost:5432/giscat_testdata",
  "driverClassName": "org.postgresql.Driver",
  "minimumIdle": 1,
  "maximumPoolSize": 20
}
'
WHERE id LIKE 'giscat_testdata' ESCAPE '#';

#安装jdk11


giscat-server需要11及以上版本的jdk才能运行,由于版权的原因,建议使用openjdk。

下载并解压缩openjdk11到指定目录

wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz
tar-zxvf openjdk-11.0.2_linux-x64_bin.tar.gz
mkdir-p /mydata/java
mv jdk-11.0.2 /mydata/java/

配置环境变量,这步是可选的,如果您由于安装了其它版本jdk等原因而不想配环境变量,只需在启动时指定jdk11 java的绝对路径即可,例如/mydata/java/jdk-11.0.2/bin/java -jar xxx

vi ~/.bashrc,添加以下变量,注意不要写在第一行

exportJAVA_HOME=/mydata/java/jdk-11.0.2/

exportJAVA_BIN=$JAVA_HOME/bin
exportJAVA_LIB=$JAVA_HOME/lib
exportCLASSPATH=.:$JAVA_LIB/tools.jar:$JAVA_LIB/dt.jar
exportPATH=$JAVA_BIN:$PATH

:wq source ~/.bashrc使得环境变量生效即可

#安装并启动giscat-server


前往 https://github.com/codingmiao/giscat-server/releases/ 下载最新版的giscat-server.zip并解压到指定目录

#下载zip文件,注意选择版本号
https://github.com/codingmiao/giscat-server/releases/download/1.0.0/giscat-server.zip
unzip giscat-server.zip
mkdir-p /mydata/japps
mv giscat-server /mydata/japps/
cd /mydata/japps/giscat-server/

启动

java-jar giscat-server-main-1.0.0-STABLE.jar

或直接后台运行,日志文件在logs目录下

nohupjava-jar giscat-server-main-1.0.0-STABLE.jar >/dev/null &

随便挑个接口curl测试一下是否能查出数据:

curl'http://localhost:12331/giscat-server/DataSet/giscat_testdata_test_polygon/Nearest?properties=id,name&x=101.5&y=20.4&n=3'

至此,本地环境已经跑起来了,下一节我们介绍如何导入数据、修改配置,这样我们就能在giscat-server中使用自己的业务数据生成的图层了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值