In ArcGIS Runtime SDKs, geoelements are used to represent real-world objects on a map or scene. The two types of geoelement are features and graphics, each of which has a geometry representing its shape and location on the surface of the Earth. They can also contain a set of attributes that further describe the represented object.
You can add graphics to graphics overlays and add graphics overlays to either a map view or scene view. The way you add features and graphics to scenes follows the same steps required to add them to maps, with these additional considerations:
When to use features or graphics
Features and graphics are similar to one another in that they both have a geometry and may store a set of attributes. Both features and graphics can be:
- Displayed at a location above or below sea level or the surface layer (If the data includes z-values). See Surface placement modes.
- Extruded according to a chosen extrusion mode and expression. See 3D rendering properties.
- Rendered either statically or dynamically. See Rendering modes.
Features and graphics, however, are designed for different uses. While both can represent geographic elements, there are factors that may make one of them a better choice for specific tasks. See Features and graphics for more information.
Add features to a scene view when you want to:
- Display data with a common attribute schema (for example, census data)
- Display geographical data of a common geometry type (point, line, or polygon)
- Persist or store the data beyond the current app session
- You want to display temporary data, such as fast-changing, fast-moving data (for example, a fleet of airliners, or voluminous data).
- You want to display data that doesn't share a common geometry type (such as point, line, or polygon) and doesn't share a common set of attribute fields
- The data is required only for the current app session
Defining a memory limit
If your Android app needs to display a large number of features or geometry that is very complex, it might improve responsiveness to limit the amount of memory used by the scene view. You can control the amount of total memory used to render scene data by assigning a value (in bytes) to the SceneView.MemoryLimit property. You must provide a value for this setting before any SceneView instances are constructed.
If an explicit value isn't set, a default memory limit is determined as follows.
- If the approximate per-application memory class of the device is greater than 1 GB, that value is used as the limit.
- Otherwise, if
45% of total system memory is less than 1 GB, that value is used
as the memory limit.
- Otherwise, 1 GB is used as the memory limit.
- Otherwise, if 45% of total system memory is less than 1 GB, that value is used as the memory limit.
Add features to a scene view
Feature layers can contain any number of features of a single geometry type (point, polyline or polygon). Adding features to a scenes is the same as adding features to a map:
- Add features to a feature layer
- If you want to include features' attributes (to run queries, for example), make sure to use QueryFeatureFields.LoadAll if building your feature layer from a service feature table
- Add the feature layer to the scene's operational layers
Add graphics to a scene view
Adding graphics to scenes is the same as adding graphics to maps:
- Add graphics to a graphics overlay
- Set the graphic overlays surface placement, if you prefer a surface placement other than the default SurfacePlacement.Draped
- Add the graphics overlay to the scene view's graphic overlays
Any graphic you add to a scene view must be constructed from a geometry with a spatial reference.
For additional details on adding graphic overlays to a map or scene, see Add graphic overlays to your app. For details on adding graphics to a graphics overlay, see Add graphics and text to graphics overlays.
var sceneGraphicsOverlay = new GraphicsOverlay();
// ... set graphics overlay properties ...
Surface placement modes
For both feature layers and graphics overlays, you can specify a surface placement mode. These modes control how the z-value of your geometry is used when features and graphics are drawn.
- DrapedBillboarded—Ignore Z values and drape symbols onto the surface, billboarded to always face the camera.
- DrapedFlat—Ignore the Z values and drape on the surface.
- Absolute—Features and graphics are drawn at a height using the z-value referenced from above the globe skin (sea level).
- Relative—Features and graphics are drawn at a height using the z-value referenced from above the surface layer.
- RelativeToScene—Treat the Z values as relative to the scene altitude values.
- Draped—(obsolete) Use DrapedBillboarded or DrapedFlat instead.
The following code shows three points drawn in graphics overlays in the three different surface placement modes. The red graphic is draped on the surface, the blue graphic is drawn in absolute mode, and the green in relative mode
// create and add a new graphics overlay with Draped surface placement
var drapedOverlay = new GraphicsOverlay();
drapedOverlay.SceneProperties.SurfacePlacement = SurfacePlacement.DrapedBillboarded;
// create and add a new graphics overlay with Absolute surface placement
var absoluteOverlay = new GraphicsOverlay();
absoluteOverlay.SceneProperties.SurfacePlacement = SurfacePlacement.Absolute;
// create and add a new graphics overlay with Relative surface placement
var relativeOverlay = new GraphicsOverlay();
relativeOverlay.SceneProperties.SurfacePlacement = SurfacePlacement.Relative;
// create three marker symbols (red, green, and blue circles)
var redCircleSym = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.Circle, Color.Red, 10);
var greenCircleSym = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.Circle, Color.Green, 10);
var blueCircleSym = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.Circle, Color.Blue, 10);
// create a map point to display
var location = new MapPoint(-4.04, 53.06, 1000, SpatialReferences.Wgs84);
// create three graphics to display the location with different symbols
var redGraphic = new Graphic(location, redCircleSym);
var greenGraphic = new Graphic(location, greenCircleSym);
var blueGraphic = new Graphic(location, blueCircleSym);
// add each graphic to a different graphics overlay (different surface placement)
Graphics rendered at different heights, despite all having the same z-value.
3D rendering properties
When using renderers in 3D, you can set properties to define extrusion expressions for both features and graphics. For graphics you can also define a rotation expression. For more information and examples of using extrusion expressions with a renderer, see 3D renderer properties in the Symbolize data topic.
Extrusion is the process of stretching a flat 2D shape vertically to create a 3D object. This provides a simple method to create three-dimensional symbology from two-dimensional features. For example, you can extrude building polygons by a height value to create realistic building shapes. You can also use extrusion to illustrate relative values in your data. The three basic geometry types-points, lines, and polygons-all support extrusion
Extrusion may not work with some types of multilayer symbols, such as hatch fills.
The following image shows a graphics overlay of US counties extruded based on a population attribute.
Create 3D symbols
While you can use the same 2D symbols available for symbolizing graphics in a map view, ArcGIS Runtime provides some specialized symbols for displaying graphics in a scene view. You can display points and lines as 3D shapes or use models to realistically represent real-world objects (such as vehicles).
ArcGIS Runtime provides the following types of 3D-specific symbols. See 3D-specific symbols for more information.
- Simple marker scene symbols—Cone, Cube, Cylinder, Diamond, Sphere, and Tetrahedron
- Stroke symbol layer 3D line styles—Strip, Tube
- Model 3D symbols—Displays a 3D model file