Add raster from file

View on GitHubSample viewer app

Create and use a raster layer made from a local raster file.

Image of add raster from file

Use case

Rasters can be digital aerial photographs, imagery from satellites, digital pictures, or even scanned maps. An end-user will frequently need to import raster files acquired through various data-collection methods into their map to view and analyze the data.

How to use the sample

When the sample starts, a raster will be loaded from a file and displayed in the map view.

How it works

  1. Create a Raster from a raster file.
  2. Create a RasterLayer from the raster.
  3. Add it as an operational layer with map.getOperationalLayers().add(rasterLayer).

Relevant API

  • Raster
  • RasterLayer

Additional information

See the topic What is raster data? in the ArcMap documentation for more information about raster images.

This sample uses the GeoView-Compose Toolkit module to be able to implement a composable MapView.

Tags

data, geoview-compose, image, import, layer, raster, toolkit, visualization

Sample Code

AddRasterFromFileViewModel.ktAddRasterFromFileViewModel.ktDownloadActivity.ktMainActivity.ktAddRasterFromFileScreen.kt
Use dark colors for code blocksCopy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/* Copyright 2024 Esri
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package com.esri.arcgismaps.sample.addrasterfromfile.components

import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.viewModelScope
import com.arcgismaps.mapping.ArcGISMap
import com.arcgismaps.mapping.BasemapStyle
import com.arcgismaps.mapping.layers.RasterLayer
import com.arcgismaps.raster.Raster
import com.arcgismaps.toolkit.geoviewcompose.MapViewProxy
import com.esri.arcgismaps.sample.addrasterfromfile.R
import com.esri.arcgismaps.sample.sampleslib.components.MessageDialogViewModel
import kotlinx.coroutines.launch
import java.io.File

class AddRasterFromFileViewModel(application: Application) : AndroidViewModel(application) {

    private val provisionPath: String by lazy { application.getExternalFilesDir(null)?.path.toString() +
            File.separator +
            application.getString(R.string.add_raster_from_file_app_name)
    }

    val mapViewProxy = MapViewProxy()

    // create a raster
    private val raster = Raster.createWithPath(provisionPath +
            File.separator + "raster-file" + File.separator + "Shasta.tif")

    // create a raster layer
    private val rasterLayer = RasterLayer(raster)

    val arcGISMap = ArcGISMap(BasemapStyle.ArcGISImagery).apply {
        operationalLayers.add(rasterLayer)
    }

    // Create a message dialog view model for handling error messages
    val messageDialogVM = MessageDialogViewModel()

    init {
        viewModelScope.launch {
            arcGISMap.load().onFailure { error ->
                messageDialogVM.showMessageDialog(
                    "Failed to load map",
                    error.message.toString()
                )
            }
            rasterLayer.load().onSuccess {
                // Set the viewpoint to the raster layer's extent
                val extent = rasterLayer.fullExtent
                if (extent != null) {
                    mapViewProxy.setViewpointGeometry(extent, paddingInDips = 20.0)
                }
            }.onFailure { error ->
                messageDialogVM.showMessageDialog(
                    "Failed to load raster layer",
                    error.message.toString()
                )
            }
        }
    }
}

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.