Select to view content in your preferred language

Get elevtion at point on the screen of the scene

885
2
Jump to solution
01-28-2021 11:50 AM
VanyaIvanov
Regular Contributor

How can i get elevation at some point on the screen of the scene using Java SDK? 

0 Kudos
1 Solution

Accepted Solutions
MarkBaird
Esri Regular Contributor

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?

View solution in original post

2 Replies
VanyaIvanov
Regular Contributor

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.*;

 

0 Kudos
MarkBaird
Esri Regular Contributor

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?