How can i get elevation at some point on the screen of the scene using Java SDK?
Solved! Go to Solution.
Yes this is possible and I can think of a couple of options depending on if you are working on a 2D map (MapView), or a 3D scene (SceneView).
Both approaches will need some sort of elevation data which often comes in a raster format (DEM data) where the raster cell values are set to a value related to height instead of a color map.
You can perform an identify operation on your layer which contains the elevation data to get the result.
There is a sample which shows a raster identify operation on a mouse move here:
https://github.com/Esri/arcgis-runtime-samples-java/tree/master/raster/identify-raster-cell
The data here I don't believe is DEM data, but it shows you how it works.
If you are writing a 3D scene based application, there are specific methods for getting the elevation of a surface. This sample demonstrates this nicely:
https://github.com/Esri/arcgis-runtime-samples-java/tree/master/scene/get-elevation-at-a-point
If you take a look at the getElevationAsync method in the sample you will see where the elevation is obtained.
Does this help?
Java arcgis docs returns 404 error! and i didn't find java code examples
If somebody is interested in how to get elevation and coordinates by mouse click on the scene(map)
@Override
public void start(Stage stage) {
StackPane stackPane = new StackPane();
Scene scene = new Scene(stackPane);
stage.setTitle("Map");
stage.setWidth(600);
stage.setHeight(350);
stage.setScene(scene);
stage.show();
sceneView = new SceneView();
setupScene();
addTrailheadsLayer();
addElevationData();
sceneView.setInteractionListener(new DefaultInteractionListener(sceneView)
{
public void onMousePressed(javafx.scene.input.MouseEvent e)
{
javafx.geometry.Point2D screenPoint = new javafx.geometry.Point2D(Math.round(e.getX()),
Math.round(e.getY()));
com.esri.arcgisruntime.geometry.Point surfacePoint = sceneView.screenToBaseSurface(screenPoint);
JOptionPane.showMessageDialog(null, "Elevation: "+surfacePoint.getZ()+" Longitude: "+surfacePoint.getX()+" Latitude: "+surfacePoint.getY());
}
});
stackPane.getChildren().add(sceneView);
}
all libraries i used:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.*;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import java.util.Arrays;
import java.awt.*;
import java.awt.Point;
import java.util.ArrayList;
import java.util.concurrent.ExecutionException;
import java.lang.*;
import javax.swing.JOptionPane;
import com.esri.arcgisruntime.concurrent.ListenableFuture;
import com.esri.arcgisruntime.data.ServiceFeatureTable;
import com.esri.arcgisruntime.layers.FeatureLayer;
import com.esri.arcgisruntime.mapping.ArcGISScene;
import com.esri.arcgisruntime.mapping.ArcGISTiledElevationSource;
import com.esri.arcgisruntime.mapping.Basemap;
import com.esri.arcgisruntime.mapping.view.Camera;
import com.esri.arcgisruntime.mapping.view.SceneView;
import com.esri.arcgisruntime.mapping.view.SceneView.DefaultInteractionListener;
import com.esri.arcgisruntime.layers.ArcGISTiledLayer;
import com.esri.arcgisruntime.data.TileCache;
import com.esri.arcgisruntime.mapping.Surface;
import com.esri.arcgisruntime.mapping.RasterElevationSource;
import com.esri.arcgisruntime.geometry.*;
Yes this is possible and I can think of a couple of options depending on if you are working on a 2D map (MapView), or a 3D scene (SceneView).
Both approaches will need some sort of elevation data which often comes in a raster format (DEM data) where the raster cell values are set to a value related to height instead of a color map.
You can perform an identify operation on your layer which contains the elevation data to get the result.
There is a sample which shows a raster identify operation on a mouse move here:
https://github.com/Esri/arcgis-runtime-samples-java/tree/master/raster/identify-raster-cell
The data here I don't believe is DEM data, but it shows you how it works.
If you are writing a 3D scene based application, there are specific methods for getting the elevation of a surface. This sample demonstrates this nicely:
https://github.com/Esri/arcgis-runtime-samples-java/tree/master/scene/get-elevation-at-a-point
If you take a look at the getElevationAsync method in the sample you will see where the elevation is obtained.
Does this help?