概述
最近做东西用的数据库是MySQL8,Geoserver也升级到了2.25.2的版本,本文就分享一下在这个配置下发布服务遇到的坑和最后的解决方法。
环境信息
image.png
image.png
事件与解决
最近项目里面有一批数据要在地图上展示,由于数据量比较大,也为了图省事,就想着在geoserver里面直接发布成服务。于是就按照老经验,创建了一个geometry
字段,再用sql更新字段的值。
-- 创建表
CREATE TABLE layer_poi (
id INT NOT NULL,
geom geometry,
PRIMARY KEY (id)
);
-- 更新值
update layer_poi set geom = st_geomfromtext(
CONCAT('POINT(',lon,' ',lat,')')
)
where 1=1;
image.png
紧接着去Geoserver里面发布服务,可发布服务计算数据范围的时候发现经纬是反的。
image.png
于是就想到是不是MySQL里面经纬度反转导致的,于是就更新了一下sql
-- 指定经纬度顺序
update layer_poi set geom = st_geomfromtext(
CONCAT('POINT(',lon,' ',lat,')')
, 4326
,'axis-order=long-lat'
)
where 1=1;
再去发布服务发现还是反着的。
于是就翻了一下mysql的官方文档,发现了point
类,官方的解释如下:
A Point is a geometry that represents a single location in coordinate space.(翻译:点是表示坐标空间中单个位置的几何图形)
于是,就将创建表和更新表的sql进行了修改:
-- 创建表
CREATE TABLE layer_poi (
id INT NOT NULL,
geom point,
PRIMARY KEY (id)
);
-- 更新值
update layer_poi set geom = point(lon, lat)
where 1=1;
这个时候再去发布服务,计算图层范围的时候发现是对的。
image.png