/** * 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();