最近在整cesium,碰到大量矢量数据加载,于是想用geoserver+mysql发布成图层服务。这里只是记录下遇到问题和解决方案
首先是mysql8.0数据库搭建。参考我的另一篇:https://www.cnblogs.com/smlPig/p/11026440.html
然后geoserver服务搭建,网上有教程,这里不赘述。对mysql支持需要下个jar包,网址:下载最新的就行,然后放到(你的geoserver安装路径)\GeoServer 2.15.1\webapps\geoserver\WEB-INF\lib路径下,打开geoserver出现
说明插件成功。向MySQL库里添加一个测试表geo_poi,添加测试数据。
insert into geo_poi(name,geo) VALUE('1',ST_GeomFromText('Point(116.52564653125002 39.99001174246744)',4326))
悲剧了,发现插不进去。一直报经度位置不在-90~90范围,后来查资料发现mysql8.0的空间录入时是纬经度,纬度在经度前。好吧,不要srid试下,哎~录进去了,很开心。于是开始向geoserver添加mysql的数据源,然后展示图层。额。。又杯具了
报geo.asWKB函数不存在,在mysql数据库里测试了一下。有哇。哎~~整不了(我怀疑是geoserver对8.0支持不太全,srid缺失导致的经纬度无法识别)。既然8.0不行就整个稳定的5.7呗。然后开始下mysql5.7,下完搭环境,发现net start mysql5.7无法启动,怀疑是之前的8.0的影响,于是先关掉之前的服务,还是不行。于是查资料,说要mysqld --initialize-insecure --user=mysql 说要这么一下。然后我就这么一下,结果报错了,说我的data文件不是空文件夹。然后我一看,我踏马连这个文件都没有,然后我就在bin的同目录下建了一个空文件夹,还是报这个错。一头迷雾,就搁置了下。、
后来觉得还是之前8.0影响的,删了吧,于是就删数据库,参考:https://lxzqz.iteye.com/blog/2432472。又是一顿操作(不过因为当时用的.zip文件夹安装的,所以注意的地方不是很多)。删完一运行,还是那个错。好吧,然后我就小崩溃。然后我就已经放弃治疗了,把8.0的安装包也删了,就好了!!!想想可能是由于之前的mysql服务有残余?data指向是8.0的data文件?
然后添加测试数据,在geoserver服务添加mysql数据源,发布服务通了。
最后是用cesium加载wms服务,在geoserver发布的服务右键,然后就能看见所需参数。
然后加载,geoserver的跨域问题解决参照:https://blog.csdn.net/wt346326775/article/details/80608340
let layers = viewer.imageryLayers; let layerPoi = new Cesium.WebMapServiceImageryProvider({ url: "http://localhost:8080/geoserver/lslSelf/wms?", layers: 'lslSelf:geo_poi2', parameters: { service : 'WMS', format: 'image/png', srs:'EPSG:4326', transparent: true//是否透明 } }); layers.addImageryProvider(layerPoi);
ok,成功展示