由于项目中使用的数据库是mysql,为了保证数据同步,geoserver也需要使用mysql数据源。
(GIS服务引擎也是因为ArcGIS不支持mysql才转到geoserver的)
geoserver的开源性质,决定了他难免会有BUG,好在有源码,修复起来不算麻烦。
BUG 1:
配置的图层数据空间字段不能有空值,否则会抛出边界范围无法计算的错误。导致图层完全无法使用。
解决方案:
在表图层的空间字段上增加默认值属性。
视图则需要增加函数转换如:
create view V_POINTS AS SELECT COALESCE (pt.GEOM,ST_GEOMFROMTEXT (‘POINT(0 0)‘,4326)) as GEOM FROM POINTS
BUG 2:
分页搜索形同虚设,WFS查询中GEOSERVER独创的startIndex,maxFeatures分页搜索确实好用。但在mysql插件中则会出现数据查询结果不符或干脆为0条结果。
其根本原因是在做SQL映射时,未将过滤where条件写到查询语句中。修改方法也很简单,找到gt-jdbc-mysql-version.jar, 修改MySQLFilterToSQL.java源文件。估计是原作者的疏忽。只添加了空间查询过滤,而忽略了一般的DBMS sql过滤。
caps.addAll(SQLDialect.BASE_DBMS_CAPABILITIES)
@Override protected FilterCapabilities createFilterCapabilities() { //MySQL does not actually implement all of the special functions FilterCapabilities caps = super.createFilterCapabilities(); caps.addAll(SQLDialect.BASE_DBMS_CAPABILITIES); caps.addType(BBOX.class); caps.addType(Contains.class); //caps.addType(Crosses.class); caps.addType(Disjoint.class); caps.addType(Equals.class); caps.addType(Intersects.class); caps.addType(Overlaps.class); caps.addType(Touches.class); caps.addType(Within.class); caps.addType(Beyond.class); return caps; }
BUG 3:
多边形搜索结果变成了矩形搜索。导致多边形搜索名不副实。
解决方案:
这个应该属于MySQL自身的问题。据说新版本已经修复,还有待验证
原文地址:http://ccjava.blog.51cto.com/8646011/1695789