Learn how to create and display a map from a web map stored in ArcGIS.
A web map contains the definition of a map. Web maps are created interactively in the Map Viewer or in ArcGIS Pro and are used to share maps in ArcGIS. Applications and APIs can read, write, and display web maps. All web maps are stored in ArcGIS as an item with an item ID.
In this tutorial, you use a web map's item ID to display a map of trails, trailheads and parks in the Santa Monica Mountains. The web map is hosted in ArcGIS Online.
Prerequisites
The following are required for this tutorial:
An ArcGIS account to access API keys. If you don't have an account, sign up for free.
To start this tutorial, complete the Display a map tutorial, or download and unzip the solution in a new folder.
Modify the old project for use in this new tutorial. Expand More info for instructions.
On your file system, delete the .idea folder, if present, at the top level of your project.
In the Android tool window, open app > res > values > strings.xml.
In the <string name="app_name"> element, change the text content to Display a web map.
strings.xml
Change line
1
2
3
<resources><stringname="app_name">Add a point, line, and polygon</string></resources>
In the Android tool window, open Gradle Scripts > settings.gradle.
Change the value of rootProject.name to "Display a web map".
settings.gradle
Change line
1
2
include':app'rootProject.name = "Add a point, line, and polygon"
Click File > Sync Project with Gradle files. Android Studio will recognize your changes and create a new .idea folder.
If you downloaded the solution project, set your API key.
An API Key enables access to services, web maps, and web scenes hosted in ArcGIS Online.
Go to your developer dashboard to get your API key.
For these tutorials, use your default API key. It is scoped to include all of the services demonstrated in the tutorials.
In Android Studio: in the Android tool window, open app > java > com.example.app > MainActivity.
In the setupMap function, set the apiKey property on the ArcGISRuntimeEnvironment with your API key.
/*
* Copyright 2020 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
*
* https://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.example.app
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.esri.arcgisruntime.ArcGISRuntimeEnvironment
import com.esri.arcgisruntime.mapping.ArcGISMap
import com.esri.arcgisruntime.mapping.BasemapStyle
import com.esri.arcgisruntime.mapping.Viewpoint
import com.esri.arcgisruntime.mapping.view.MapView
import com.example.app.databinding.ActivityMainBinding
classMainActivity : AppCompatActivity() {
privateval activityMainBinding by lazy {
ActivityMainBinding.inflate(layoutInflater)
}
privateval mapView: MapView by lazy {
activityMainBinding.mapView
}
overridefunonCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(activityMainBinding.root)
setupMap()
}
overridefunonPause() {
mapView.pause()
super.onPause()
}
overridefunonResume() {
super.onResume()
mapView.resume()
}
overridefunonDestroy() {
mapView.dispose()
super.onDestroy()
}
// set up your map here. You will call this method from onCreate()privatefunsetupMap() {
// set your API key// Note: it is not best practice to store API keys in source code. The API key is referenced// here for the convenience of this tutorial. ArcGISRuntimeEnvironment.setApiKey("YOUR_API_KEY")
// create a map with the BasemapStyle streetsval map = ArcGISMap(BasemapStyle.ARCGIS_TOPOGRAPHIC)
// set the map to be displayed in the layout's MapView mapView.map = map
// set the viewpoint, Viewpoint(latitude, longitude, scale) mapView.setViewpoint(Viewpoint(34.0270, -118.8050, 72000.0))
}
}
Get the web map item ID
You can use ArcGIS tools to create and view web maps. Use the Map Viewer to identify the web map item ID. This item ID will be used later in the tutorial.
Go to the LA Trails and Parks web map in the Map Viewer in ArcGIS Online. This web map displays trails, trailheads and parks in the Santa Monica Mountains.
Make a note of the item ID at the end of the browser's URL. The item ID should be 41281c51f9de45edaf1c8ed44bb10e30
Add import statements
Add import statements to reference the additional ArcGIS Runtime API classes needed for this tutorial.
/*
* Copyright 2020 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
*
* https://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.example.app
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.esri.arcgisruntime.ArcGISRuntimeEnvironment
import com.esri.arcgisruntime.mapping.ArcGISMap
import com.esri.arcgisruntime.mapping.view.MapView
import com.esri.arcgisruntime.portal.Portal
import com.esri.arcgisruntime.portal.PortalItem
import com.example.app.databinding.ActivityMainBinding
classMainActivity : AppCompatActivity() {
privateval activityMainBinding: ActivityMainBinding by lazy {
ActivityMainBinding.inflate(layoutInflater)
}
privateval mapView: MapView by lazy {
activityMainBinding.mapView
}
overridefunonCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(activityMainBinding.root)
setupMap()
}
overridefunonPause() {
super.onPause()
mapView.pause()
}
overridefunonResume() {
super.onResume()
mapView.resume()
}
overridefunonDestroy() {
super.onDestroy()
mapView.dispose()
}
// set up your map here. You will call this method from onCreate()privatefunsetupMap(){
// set your API key// Note: it is not best practice to store API keys in source code. The API key is referenced// here for the convenience of this tutorial. ArcGISRuntimeEnvironment.setApiKey("YOUR_API_KEY")
val portal = Portal("https://www.arcgis.com", false)
val itemId = "41281c51f9de45edaf1c8ed44bb10e30"val portalItem = PortalItem(portal, itemId)
val map = ArcGISMap(portalItem)
mapView.map = map
}
}
Display the web map
You can create a map from a web map using the web map's item ID. Use the PortalItem class to access the web map, and the ArcGISMap class to create and display a map from it.
In the setupMap method, delete the lines after ArcGISRuntimeEnvironment.setApiKey("YOUR_API_KEY"). Those lines come from the Display a map tutorial and do not apply here.
MainActivity.kt
Remove lineRemove lineRemove lineRemove lineRemove lineRemove lineRemove line
/*
* Copyright 2020 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
*
* https://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.example.app
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.esri.arcgisruntime.ArcGISRuntimeEnvironment
import com.esri.arcgisruntime.mapping.ArcGISMap
import com.esri.arcgisruntime.mapping.BasemapStyle
import com.esri.arcgisruntime.mapping.Viewpoint
import com.esri.arcgisruntime.mapping.view.MapView
import com.example.app.databinding.ActivityMainBinding
classMainActivity : AppCompatActivity() {
privateval activityMainBinding by lazy {
ActivityMainBinding.inflate(layoutInflater)
}
privateval mapView: MapView by lazy {
activityMainBinding.mapView
}
overridefunonCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(activityMainBinding.root)
setupMap()
}
overridefunonPause() {
mapView.pause()
super.onPause()
}
overridefunonResume() {
super.onResume()
mapView.resume()
}
overridefunonDestroy() {
mapView.dispose()
super.onDestroy()
}
// set up your map here. You will call this method from onCreate()privatefunsetupMap() {
// set your API key// Note: it is not best practice to store API keys in source code. The API key is referenced// here for the convenience of this tutorial. ArcGISRuntimeEnvironment.setApiKey("YOUR_API_KEY")
// create a map with the BasemapStyle streetsval map = ArcGISMap(BasemapStyle.ARCGIS_TOPOGRAPHIC)
// set the map to be displayed in the layout's MapView mapView.map = map
// set the viewpoint, Viewpoint(latitude, longitude, scale) mapView.setViewpoint(Viewpoint(34.0270, -118.8050, 72000.0))
}
}
Create a new Portal referencing ArcGIS Online as the portalUrl parameter and false for the loginRequired parameter.
/*
* Copyright 2020 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
*
* https://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.example.app
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.esri.arcgisruntime.ArcGISRuntimeEnvironment
import com.esri.arcgisruntime.mapping.ArcGISMap
import com.esri.arcgisruntime.mapping.view.MapView
import com.esri.arcgisruntime.portal.Portal
import com.esri.arcgisruntime.portal.PortalItem
import com.example.app.databinding.ActivityMainBinding
classMainActivity : AppCompatActivity() {
privateval activityMainBinding: ActivityMainBinding by lazy {
ActivityMainBinding.inflate(layoutInflater)
}
privateval mapView: MapView by lazy {
activityMainBinding.mapView
}
overridefunonCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(activityMainBinding.root)
setupMap()
}
overridefunonPause() {
super.onPause()
mapView.pause()
}
overridefunonResume() {
super.onResume()
mapView.resume()
}
overridefunonDestroy() {
super.onDestroy()
mapView.dispose()
}
// set up your map here. You will call this method from onCreate()privatefunsetupMap(){
// set your API key// Note: it is not best practice to store API keys in source code. The API key is referenced// here for the convenience of this tutorial. ArcGISRuntimeEnvironment.setApiKey("YOUR_API_KEY")
val portal = Portal("https://www.arcgis.com", false)
val itemId = "41281c51f9de45edaf1c8ed44bb10e30"val portalItem = PortalItem(portal, itemId)
val map = ArcGISMap(portalItem)
mapView.map = map
}
}
Create a PortalItem for the web map, by passing the portal and the web map's item ID as parameters.
Create an ArcGISMap using the portalItem as the constructor parameter.
/*
* Copyright 2020 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
*
* https://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.example.app
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.esri.arcgisruntime.ArcGISRuntimeEnvironment
import com.esri.arcgisruntime.mapping.ArcGISMap
import com.esri.arcgisruntime.mapping.view.MapView
import com.esri.arcgisruntime.portal.Portal
import com.esri.arcgisruntime.portal.PortalItem
import com.example.app.databinding.ActivityMainBinding
classMainActivity : AppCompatActivity() {
privateval activityMainBinding: ActivityMainBinding by lazy {
ActivityMainBinding.inflate(layoutInflater)
}
privateval mapView: MapView by lazy {
activityMainBinding.mapView
}
overridefunonCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(activityMainBinding.root)
setupMap()
}
overridefunonPause() {
super.onPause()
mapView.pause()
}
overridefunonResume() {
super.onResume()
mapView.resume()
}
overridefunonDestroy() {
super.onDestroy()
mapView.dispose()
}
// set up your map here. You will call this method from onCreate()privatefunsetupMap(){
// set your API key// Note: it is not best practice to store API keys in source code. The API key is referenced// here for the convenience of this tutorial. ArcGISRuntimeEnvironment.setApiKey("YOUR_API_KEY")
val portal = Portal("https://www.arcgis.com", false)
val itemId = "41281c51f9de45edaf1c8ed44bb10e30"val portalItem = PortalItem(portal, itemId)
val map = ArcGISMap(portalItem)
mapView.map = map
}
}
Set the map property of mapView to the ArcGISMap you just created.
/*
* Copyright 2020 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
*
* https://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.example.app
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.esri.arcgisruntime.ArcGISRuntimeEnvironment
import com.esri.arcgisruntime.mapping.ArcGISMap
import com.esri.arcgisruntime.mapping.view.MapView
import com.esri.arcgisruntime.portal.Portal
import com.esri.arcgisruntime.portal.PortalItem
import com.example.app.databinding.ActivityMainBinding
classMainActivity : AppCompatActivity() {
privateval activityMainBinding: ActivityMainBinding by lazy {
ActivityMainBinding.inflate(layoutInflater)
}
privateval mapView: MapView by lazy {
activityMainBinding.mapView
}
overridefunonCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(activityMainBinding.root)
setupMap()
}
overridefunonPause() {
super.onPause()
mapView.pause()
}
overridefunonResume() {
super.onResume()
mapView.resume()
}
overridefunonDestroy() {
super.onDestroy()
mapView.dispose()
}
// set up your map here. You will call this method from onCreate()privatefunsetupMap(){
// set your API key// Note: it is not best practice to store API keys in source code. The API key is referenced// here for the convenience of this tutorial. ArcGISRuntimeEnvironment.setApiKey("YOUR_API_KEY")
val portal = Portal("https://www.arcgis.com", false)
val itemId = "41281c51f9de45edaf1c8ed44bb10e30"val portalItem = PortalItem(portal, itemId)
val map = ArcGISMap(portalItem)
mapView.map = map
}
}
Click Run > Run > app to run the app.
You should see a map of trails, trailheads and parks in the Santa Monica Mountains. Drag, swipe, or pinch on the map view to explore the map.