/**
* Set up shapefile workspace
*/
private void addShapefile(final String fileName, final String fileDir) {
final String workspaceId = ""+count++; // an arbitrary unique string
// create a local map service and enable dynamic layers
LocalMapService localMapService = new LocalMapService(URL_BLANK_MPK);
localMapService.setEnableDynamicLayers(true);
// get dynamic workspaces from service
WorkspaceInfoSet workspaceInfoSet = localMapService.getDynamicWorkspaces();
// create a workspace info via the static method according to data type
// e.g. shapefile folder connection
WorkspaceInfo workspaceInfo = WorkspaceInfo.CreateShapefileFolderConnection(workspaceId, fileDir);
// set dynamic workspaces for our local map service
workspaceInfoSet.add(workspaceInfo);
localMapService.setDynamicWorkspaces(workspaceInfoSet);
// now start service...
localMapService.start();
// set up a local dynamic layer
final ArcGISDynamicMapServiceLayer localDynamicLayer =
new ArcGISDynamicMapServiceLayer(localMapService.getUrlMapService());
// add the layer to the map
map.getLayers().add(localDynamicLayer);
localDynamicLayer.addLayerInitializeCompleteListener(new LayerInitializeCompleteListener()
{
@Override
public void layerInitializeComplete(LayerInitializeCompleteEvent arg0)
{
DynamicLayerInfoCollection layerInfos = localDynamicLayer.getDynamicLayerInfos();
DynamicLayerInfo layerInfo = layerInfos.get(0);
// Apply a renderer for vector layers.
// QUESTION : HOW CAN WE DETERMINE THE GEOMETRY TYPE BEFORE,
// IN ORDER TO DEFINE THE RIGHT SYMBOL HERE ??
DrawingInfo drawingInfo = new DrawingInfo(simpleRenderer, TRANSPARENCY);
layerInfo.setDrawingInfo(drawingInfo);
// Create the data source
TableDataSource dataSource = new TableDataSource();
dataSource.setWorkspaceId(workspaceId);
dataSource.setDataSourceName(fileName);
// Set the data source
LayerDataSource layerDataSource = new LayerDataSource();
layerDataSource.setDataSource(dataSource);
layerInfo.setLayerSource(layerDataSource);
localDynamicLayer.refresh();
}
});
}private Symbol getSymbolForGeometryType(GraphicsLayer layer) {
// Here: If I replace parameter by "DynamicLayer layer", then getNumberOfGraphics() is not available !
as dynamic layers doesn't manage Graphics...
Symbol symbol = new SimpleMarkerSymbol(Color.BLACK, 10, Style.SQUARE);
Geometry geometry = null;
if(layer.getNumberOfGraphics() > 0) {
int id = layer.getGraphicIDs()[0];
geometry = layer.getGraphic(id).getGeometry();
}
if(geometry != null){
switch(geometry.getType()){
case POINT:
case MULTIPOINT:
symbol = new SimpleMarkerSymbol(Color.ORANGE, 10, Style.CIRCLE);
break;
case LINE:
case POLYLINE:
symbol = new SimpleLineSymbol(Color.RED, 2.0f);
break;
case POLYGON:
Color polyFillColor = new Color(0, 255, 255, 125);
symbol = new SimpleFillSymbol(polyFillColor, new SimpleLineSymbol(Color.ORANGE, 2.0f));
break;
case ENVELOPE:
break;
case UNKNOWN:
break;
default:
break;
}
}
return symbol;
}
Solved! Go to Solution.
DynamicLayerInfoCollection layerInfos = localDynamicLayer.getDynamicLayerInfos(); DynamicLayerInfo layerInfo = layerInfos.get(0); // Create the data source TableDataSource dataSource = new TableDataSource(); dataSource.setWorkspaceId(workspaceId); dataSource.setDataSourceName(fileName); // Set the data source LayerDataSource layerDataSource = new LayerDataSource(); layerDataSource.setDataSource(dataSource); layerInfo.setLayerSource(layerDataSource); // NEW STUFF HERE LayerInfo li = new LayerInfo(0, layerDataSource); String layerParam = null; String geometryType = null; try { layerParam = li.toJson(); // make an http request, e.g. this code adapted from http://www.vogella.com/articles/ApacheHttpClient/article.html HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(localMapService.getUrlMapService() + "/dynamicLayer?"); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); nameValuePairs.add(new BasicNameValuePair("layer", layerParam)); post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = client.execute(post); BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); String line = ""; while ((line = rd.readLine()) != null) { // can get the geometry type from the response line, for example... String regexp = "esriGeometry(\\w+)"; Pattern pattern = Pattern.compile(regexp); Matcher matcher = pattern.matcher(line); matcher.find(); geometryType = matcher.group().replaceAll(regexp, "$1"); System.out.println(geometryType); } } catch (Exception e) { e.printStackTrace(); } // END NEW STUFF // create renderer based on geometry, etc. DrawingInfo drawingInfo = new DrawingInfo(myRenderer, myTransparency); layerInfo.setDrawingInfo(drawingInfo); localDynamicLayer.refresh(); DynamicLayerInfoCollection layerInfos = localDynamicLayer.getDynamicLayerInfos(); DynamicLayerInfo layerInfo = layerInfos.get(0); // Create the data source TableDataSource dataSource = new TableDataSource(); dataSource.setWorkspaceId(workspaceId); dataSource.setDataSourceName(fileName); // Set the data source LayerDataSource layerDataSource = new LayerDataSource(); layerDataSource.setDataSource(dataSource); layerInfo.setLayerSource(layerDataSource); // NEW STUFF HERE LayerInfo li = new LayerInfo(0, layerDataSource); String layerParam = null; String geometryType = null; try { layerParam = li.toJson(); // make an http request, e.g. this code adapted from http://www.vogella.com/articles/ApacheHttpClient/article.html HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(localMapService.getUrlMapService() + "/dynamicLayer?"); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); nameValuePairs.add(new BasicNameValuePair("layer", layerParam)); post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = client.execute(post); BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); String line = ""; while ((line = rd.readLine()) != null) { // can get the geometry type from the response line, for example... String regexp = "esriGeometry(\\w+)"; Pattern pattern = Pattern.compile(regexp); Matcher matcher = pattern.matcher(line); matcher.find(); geometryType = matcher.group().replaceAll(regexp, "$1"); System.out.println(geometryType); } } catch (Exception e) { e.printStackTrace(); } // END NEW STUFF // create renderer based on geometry, etc. DrawingInfo drawingInfo = new DrawingInfo(myRenderer, myTransparency); layerInfo.setDrawingInfo(drawingInfo); localDynamicLayer.refresh();