最近在整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,成功展示