Add OpenStreetMap as a basemap layer.
Use case
OpenStreetMap is a free community-edited map of the world.
How to use the sample
When the sample opens, it will automatically display the OpenStreetMap basemap. Pan and zoom to explore the basemap.
How it works
- Create an
OpenStreetMapLayer
, and set it as theArcGISMap
's basemap. - Set the map to a
MapView
.
Relevant API
- ArcGISMap
- MapView
- OpenStreetMapLayer
Additional information
The attribution text will be set to the required OpenStreetMap attribution automatically.
Apps that expect to make many requests to OpenStreetMap should consider using an alternative tile server via the WebTiledLayer
class.
Esri now hosts an OpenStreetMap vector layer on ArcGIS Online that uses recent OpenStreetMap data in conjunction with a style matching the default OpenStreetMap style. This layer is not subject to the tile access restrictions that apply to tiles fetched from OpenStreetMap.org.
Tags
basemap, layers, map, open, OpenStreetMap, OSM, street
Sample Code
/*
* Copyright 2018 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_street_map_layer;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import com.esri.arcgisruntime.layers.OpenStreetMapLayer;
import com.esri.arcgisruntime.loadable.LoadStatus;
import com.esri.arcgisruntime.mapping.ArcGISMap;
import com.esri.arcgisruntime.mapping.Basemap;
import com.esri.arcgisruntime.mapping.Viewpoint;
import com.esri.arcgisruntime.mapping.view.MapView;
public class OpenStreetMapLayerSample extends Application {
private MapView mapView;
@Override
public void start(Stage stage) {
try {
// 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 Street Map Layer Sample");
stage.setWidth(800);
stage.setHeight(700);
stage.setScene(scene);
stage.show();
// create an open street map layer (a layer that requests images from OpenStreetMap servers)
var openStreetMapLayer = new OpenStreetMapLayer();
// if the layer failed to load, display an alert
openStreetMapLayer.addDoneLoadingListener(() -> {
if (openStreetMapLayer.getLoadStatus() != LoadStatus.LOADED) {
new Alert(Alert.AlertType.INFORMATION, "Open Street Map Layer failed to load").show();
}
});
// create a map and set the open street map layer as its basemap
ArcGISMap map = new ArcGISMap();
map.setBasemap(new Basemap(openStreetMapLayer));
// create a map view and set the map to it
mapView = new MapView();
mapView.setMap(map);
// set a viewpoint on the map view
mapView.setViewpoint(new Viewpoint(34.056295, -117.195800, 577790));
// add the map view to stack pane
stackPane.getChildren().add(mapView);
} catch (Exception e) {
// on any error, display the stack trace.
e.printStackTrace();
}
}
/**
* 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);
}
}