由于项目中使用的数据库是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自身的问题。据说新版本已经修复,还有待验证