From: Weber, S. H. <ste...@si...> - 2011-05-19 14:21:37
|
OK, I found the solution. 2 Problems 1: Cluster strategy activation does nothing clustering only happens when you add features _after_ the control is activated. (from http://osgeo-org.1803224.n2.nabble.com/Cluster-strategy-activation-td5078623.html) 2: the VectorFeatures have to be added as an array (not separately) So here is the running code: ------------------------------------------- package com.siemens.test.client; import org.gwtopenmaps.openlayers.client.LonLat; import org.gwtopenmaps.openlayers.client.Map; import org.gwtopenmaps.openlayers.client.MapOptions; import org.gwtopenmaps.openlayers.client.MapWidget; import org.gwtopenmaps.openlayers.client.Style; import org.gwtopenmaps.openlayers.client.control.LayerSwitcher; import org.gwtopenmaps.openlayers.client.control.MousePosition; import org.gwtopenmaps.openlayers.client.control.NavToolbar; import org.gwtopenmaps.openlayers.client.control.PanZoomBar; import org.gwtopenmaps.openlayers.client.control.Scale; import org.gwtopenmaps.openlayers.client.feature.VectorFeature; import org.gwtopenmaps.openlayers.client.geometry.Point; import org.gwtopenmaps.openlayers.client.layer.Layer; import org.gwtopenmaps.openlayers.client.layer.OSM; import org.gwtopenmaps.openlayers.client.layer.Vector; import org.gwtopenmaps.openlayers.client.layer.VectorOptions; import org.gwtopenmaps.openlayers.client.strategy.Strategy; import org.gwtopenmaps.openlayers.client.util.JSObject; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.user.client.Random; import com.google.gwt.user.client.ui.RootPanel; /** * Entry point classes define <code>onModuleLoad()</code>. */ public class ClusterStrategy implements EntryPoint { private Map map; private Vector vectorLayer; private OSM osmLayer; private LonLat centerOfGermany = new LonLat(9.77, 51.16); /** * This is the entry point method. */ public void onModuleLoad() { MapOptions config = new MapOptions(); config.setNumZoomLevels(32); config.setProjection("EPSG:4326"); MapWidget mapWidget = new MapWidget("900px", "500px", config); map = mapWidget.getMap(); map.addControl(new PanZoomBar()); map.addControl(new NavToolbar()); map.addControl(new MousePosition()); map.addControl(new LayerSwitcher()); map.addControl(new Scale()); centerOfGermany.transform("EPSG:4326", "EPSG:900913"); osmLayer = OSM.Mapnik("OpenStreetMap"); vectorLayer = createLayer(); map.addLayers(new Layer[] { osmLayer, vectorLayer }); map.setCenter(centerOfGermany, 5); RootPanel.get("main").add(mapWidget); // Problem 1: add points after control is activated addSomePoints(vectorLayer); } private Vector createLayer() { // Create the vectorOptions VectorOptions vectorOptions = new VectorOptions(); vectorOptions.setStyle(createStyle()); Strategy st = new Strategy(createClusterStrategy()) { }; vectorOptions.setStrategies(new Strategy[] { st }); Vector layer = new Vector("Vector Layer", vectorOptions); return layer; } /** * @param layer */ private void addSomePoints(Vector layer) { // Problem 2: add points as array together VectorFeature[] features = new VectorFeature[500]; for (int i = 0; i < 500; i++) { double lon = 9 + Random.nextDouble()*5; double lat = 45 + Random.nextDouble()*5; LonLat lonlat = new LonLat(lon, lat); lonlat.transform("EPSG:4326", "EPSG:900913"); Point point = new Point(lonlat.lon(), lonlat.lat()); VectorFeature pointFeature = new VectorFeature(point); features[i] = pointFeature; } layer.addFeatures(features); } private Style createStyle() { Style style = new Style(); style.setStrokeColor("#000000"); style.setStrokeWidth(1); style.setFillColor("#FF0000"); style.setFillOpacity(0.5); style.setPointRadius(10); style.setStrokeOpacity(1.0); return style; } private static native JSObject createClusterStrategy() /*-{ var clusterStrategy = new $wnd.OpenLayers.Strategy.Cluster({ distance : 20, threshold : 1 }); return clusterStrategy; }-*/; } ------------------------------------------- Stefan -----Ursprüngliche Nachricht----- Von: Alexander Solovets [mailto:aso...@gm...] Gesendet: Donnerstag, 19. Mai 2011 13:50 An: Weber, Stefan Hagen Cc: gwt...@li... Betreff: Re: [Gwt-openlayers-users] Cluster Strategy Hello, Stefan! See JSNI explanation on GWT project page. Or you could just look at OL-GWT sources and do it similarly. |