Hi,
I'm new to ArcGIS runtime sdk for java.
I need my app to open my own base map that represented by about 6-7 .ecw files (including of course matching .aux files).
How do I add a layer from .ecw file to JMap?
I tried:
JMap map = new JMap(); ... String rasterPath = "k5521.ecw"; //the file is in the folder of the project
FileRasterSource rasterSource;
try {
rasterSource = new FileRasterSource(rasterPath);
RasterLayer rasterLayer = new RasterLayer(rasterSource);
map.getLayers().add(rasterLayer);
} catch (IllegalArgumentException iex) {
// handle exception
} catch (FileNotFoundException fe) {
// handle exception
} catch (RuntimeException re) { // handle exception }
and also:
FileRasterSource rasterSource = new FileRasterSource("k5521.ecw");
rasterSource.project(map.getSpatialReference());
RasterLayer rasterLayer = new RasterLayer(rasterSource);
map.getLayers().add(rasterLayer);
what am I doing wrong?
ido zoar So it turns out the .ecw is not supported with Java API. You can instead use the approach to add local Raster files to a Local Map service created from a blank mpk. The only drawback there is that for Raster local server doesn't support Renderers.
Below is a small code snippet. You can make modifications as per your requirements
| final String workspaceId = ""+count++; // an arbitrary unique string |
| // create a local map service and enable dynamic layers | |
| LocalMapService localMapService = new LocalMapService("C:\\mpk_blank.mpk"); |
| if(!localMapService.getEnableDynamicLayers()) { | |
| localMapService.setEnableDynamicLayers(true); | |
| } |
| if(localMapService.getStatus() == LocalServiceStatus.STARTED) { | |
| localMapService.stop(); | |
| } |
| // 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); | |
| // also: | |
| // --> WorkspaceInfo.CreateSDEConnection | |
| // --> WorkspaceInfo.CreateRasterFolderConnection | |
| // --> 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 | |
| jMap.getLayers().add(localDynamicLayer); |
| localDynamicLayer.addLayerInitializeCompleteListener(new LayerInitializeCompleteListener() | |
| { | |
| @Override | |
| public void layerInitializeComplete(LayerInitializeCompleteEvent arg0) | |
| { |
| DynamicLayerInfoCollection layerInfos = localDynamicLayer.getDynamicLayerInfos(); | |
| DynamicLayerInfo layerInfo = layerInfos.get(0); |
| 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(); | |
| } | |
}); |