[GIS] Developing Geoserver Extension

extensionsgeoserver

I want to develop geoserver extension that intercepts wms request, checks specific url parameter, builds clusters of points and generate the response image with clusters.

I've studied a little the geoserver code. And I'm planning now to replace "FeatureLayer" in "mapContent" by my class. The class replaces real points by clusters of points.

The problem is I don't know how to inject my extension code into wms processing.

Best Answer

You have eclipse workspace as it shown in Geoserver Developers Quick Start.

Create new java project. Create new class:

package org.geoserver.wms.cluster;

import org.geoserver.wms.GetMapCallback;
import org.geoserver.wms.GetMapCallbackAdapter;
import org.geoserver.wms.GetMapRequest;
import org.geoserver.wms.WMSMapContent;

public class ClusterGetMapCallbackAdapter extends GetMapCallbackAdapter
        implements GetMapCallback {

    public ClusterGetMapCallbackAdapter() {
    }
    @Override
    public GetMapRequest initRequest(GetMapRequest request) {       
        return request;
    }
    @Override
    public void initMapContent(WMSMapContent mapContent) {    
    }
    @Override
    public WMSMapContent beforeRender(WMSMapContent mapContent) {
        return mapContent;
    }
}

Add file applicationContext.xml to META-INF directory:

<?xml version="1.0" encoding="UTF-8"?>
<beans>
    <bean id="getMapCallback" class="org.geoserver.wms.cluster.ClusterGetMapCallbackAdapter">
    </bean>
</beans>

Append new project to the dependencies of "gs-wms" project. Build solution. Set breakpoints at your code. Start geoserver. Create WMS layer. Browse to GetMap request. See breakpoints hitting.

Related Question