Solved! Go to Solution.
final String workspaceId = ""+count++; // an arbitrary unique string // create a local map service and enable dynamic layers LocalMapService localMapService = new LocalMapService( getPathSampleData() + "mpks" + FSP + "mpk_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. raster folder connection WorkspaceInfo workspaceInfo = WorkspaceInfo.CreateRasterFolderConnection( workspaceId, fileDir); // also: // --> WorkspaceInfo.CreateSDEConnection // --> WorkspaceInfo.CreateShapefileFolderConnection // --> WorkspaceInfo.CreateFileGeoDatabaseConnection // 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);
// create a Geoprocessor that points to the remote geoprocessing service. // initialize the input parameters. refer to help link in the geoprocessing service URL. Geoprocessor geoprocessor = new Geoprocessor(URL_GEOPROCESSING_SERVICE); geoprocessor.setProcessSR(srMap); geoprocessor.setOutSR(srMap); List<GPParameter> gpInputParams = new ArrayList<GPParameter>(); GPFeatureRecordSetLayer gpInputViewshedPoint = new GPFeatureRecordSetLayer("Input_Observation_Point"); gpInputViewshedPoint.setSpatialReference(srMap); gpInputViewshedPoint.addGraphic(viewshedPointGraphic); GPLinearUnit gpInputViewshedDistance = new GPLinearUnit("Viewshed_Distance"); gpInputViewshedDistance.setUnits("esriMiles"); gpInputViewshedDistance.setDistance(inputValue); gpInputParams.add(gpInputViewshedPoint); gpInputParams.add(gpInputViewshedDistance);
Of course, using online services, it is much easier. You can just create a new layer list and apply it again to the map in the order that you want.
final String workspaceId = ""+count++; // an arbitrary unique string // create a local map service and enable dynamic layers LocalMapService localMapService = new LocalMapService( getPathSampleData() + "mpks" + FSP + "mpk_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. raster folder connection WorkspaceInfo workspaceInfo = WorkspaceInfo.CreateRasterFolderConnection( workspaceId, fileDir); // also: // --> WorkspaceInfo.CreateSDEConnection // --> WorkspaceInfo.CreateShapefileFolderConnection // --> WorkspaceInfo.CreateFileGeoDatabaseConnection // 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);
// create a Geoprocessor that points to the remote geoprocessing service. // initialize the input parameters. refer to help link in the geoprocessing service URL. Geoprocessor geoprocessor = new Geoprocessor(URL_GEOPROCESSING_SERVICE); geoprocessor.setProcessSR(srMap); geoprocessor.setOutSR(srMap); List<GPParameter> gpInputParams = new ArrayList<GPParameter>(); GPFeatureRecordSetLayer gpInputViewshedPoint = new GPFeatureRecordSetLayer("Input_Observation_Point"); gpInputViewshedPoint.setSpatialReference(srMap); gpInputViewshedPoint.addGraphic(viewshedPointGraphic); GPLinearUnit gpInputViewshedDistance = new GPLinearUnit("Viewshed_Distance"); gpInputViewshedDistance.setUnits("esriMiles"); gpInputViewshedDistance.setDistance(inputValue); gpInputParams.add(gpInputViewshedPoint); gpInputParams.add(gpInputViewshedDistance);
... the best way to re-order a list of layers in Runtime is by having them added as layers on the map from separate mpk files instead of sublayers or LayerInfo's off the same mpk. On the other hand, I can't seem to make multiple dynamic layers point to different mosaic datasets off the same gdb.