Display a web map.
Use case
For displaying web maps stored on ArcGIS Online.
How to use the sample
A web map can be selected from the drop-down list. On selection the web map displays in the map view.
How it works
- Create a
Portal
. - Create a
PortalItem
using the Portal and the web map ID:new PortalItem(portal, ID)
. - Create a
ArcGISMap
using the portal item. - Set the map to the
MapView
.
Relevant API
- ArcGISMap
- MapView
- Portal
- PortalItem
About the data
The web maps accessed by this sample show Recent Hurricanes, Cyclones and Typhoons and Geology for United States.
Tags
portal item, web map
Sample Code
OpenMapURLSample.java
/*
* Copyright 2017 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.samples.open_map_url;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ListCell;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.util.StringConverter;
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;
public class OpenMapURLSample extends Application {
private MapView mapView;
private List<ArcGISMap> webMaps; // keep loadable in scope to avoid garbage collection
private static final String[] portalItemIDs = new String[] {
"92ad152b9da94dee89b9e387dfe21acd", "064f2e898b094a17b84e4a4cd5e5f549"
};
@Override
public void start(Stage stage) {
// create stack pane and application scene
StackPane stackPane = new StackPane();
Scene scene = new Scene(stackPane);
// set title, size, and add scene to stage
stage.setTitle("Open Map URL Sample");
stage.setWidth(800);
stage.setHeight(700);
stage.setScene(scene);
stage.show();
// create a map view
mapView = new MapView();
// create a combo box to list maps
ComboBox<ArcGISMap> webMapComboBox = new ComboBox<>();
// create maps using portal item IDs
Portal portal = new Portal("http://www.arcgis.com/");
webMaps = Stream.of(portalItemIDs)
.map(id -> new PortalItem(portal, id))
.map(ArcGISMap::new)
.collect(Collectors.toList());
// load maps and add to combo box
webMaps.forEach(map -> {
map.getItem().loadAsync();
map.getItem().addDoneLoadingListener(() -> webMapComboBox.getItems().add(map));
});
// listener to switch the map when the selected map changes
webMapComboBox.getSelectionModel().selectedItemProperty().addListener(e -> {
ArcGISMap webMap = webMapComboBox.getSelectionModel().getSelectedItem();
mapView.setMap(webMap);
});
// show the name of the map in the combo box
webMapComboBox.setConverter(new StringConverter<>() {
@Override
public String toString(ArcGISMap map) {
return map != null ? map.getItem().getTitle() : "";
}
@Override
public ArcGISMap fromString(String string) {
return null; //not needed
}
});
webMapComboBox.setCellFactory(comboBox -> new ListCell<>() {
@Override
protected void updateItem(ArcGISMap map, boolean empty) {
super.updateItem(map, empty);
setText(empty ? "" : map.getItem().getTitle());
}
});
// select the web map loaded first
webMaps.get(0).getItem().addDoneLoadingListener(() -> webMapComboBox.getSelectionModel().select(0));
// add the map view and flow panel to stack pane
stackPane.getChildren().addAll(mapView, webMapComboBox);
StackPane.setAlignment(webMapComboBox, Pos.TOP_LEFT);
StackPane.setMargin(webMapComboBox, new Insets(10, 0, 0, 10));
}
/**
* Stops and releases all resources used in application.
*/
@Override
public void stop() {
if (mapView != null) {
mapView.dispose();
}
}
/**
* Opens and runs application.
*
* @param args arguments passed to this application
*/
public static void main(String[] args) {
Application.launch(args);
}
}