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
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 LOAD_ALL 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 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.
//add a graphics overlay to the scene view
@property (nonatomic, strong) AGSGraphicsOverlay *graphicsOverlay;
self.graphicsOverlay = [[AGSGraphicsOverlay alloc] init];
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.
- AGSSurfacePlacementDrapedBillboarded—Ignore Z values and drape symbols onto the surface, billboarded to always face the camera.
- AGSSurfacePlacementDrapedFlat—Ignore the Z values and drape on the surface.
- AGSSurfacePlacementAbsolute—Features and graphics are drawn at a height using the z-value referenced from above the globe skin (sea level).
- AGSSurfacePlacementRelative—Features and graphics are drawn at a height using the z-value referenced from above the surface layer.
- AGSSurfacePlacementRelativeToScene—Treat the Z values as relative to the scene altitude values.
- AGSSurfacePlacementDraped—(obsolete) Use AGSSurfacePlacementDrapedBillboarded or AGSSurfacePlacementDrapedFlat 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 a draped graphics overlay
self.drapedGraphicsOverlay = [[AGSGraphicsOverlay alloc] init];
self.drapedGraphicsOverlay.sceneProperties.surfacePlacement = AGSSurfacePlacementDraped;
// create a absolute graphics overlay
self.absoluteGraphicsOverlay = [[AGSGraphicsOverlay alloc] init];
self.absoluteGraphicsOverlay.sceneProperties.surfacePlacement = AGSSurfacePlacementAbsolute;
// create a relative graphics overlay
self.relativeGraphicsOverlay = [[AGSGraphicsOverlay alloc] init];
self.relativeGraphicsOverlay.sceneProperties.surfacePlacement = AGSSurfacePlacementRelative;
//create a point and markers
AGSPoint *point = AGSPointMake3D(-4.04, 53.06, 1000, 0, self.sceneView.spatialReference);
AGSSimpleMarkerSymbol *greenMarker = [[AGSSimpleMarkerSymbol alloc] initWithStyle:AGSSimpleMarkerSymbolStyleCircle color:UIColor.greenColor size:10];
AGSSimpleMarkerSymbol *redMarker = [[AGSSimpleMarkerSymbol alloc] initWithStyle:AGSSimpleMarkerSymbolStyleCircle color:UIColor.redColor size:10];
AGSSimpleMarkerSymbol *blueMarker = [[AGSSimpleMarkerSymbol alloc] initWithStyle:AGSSimpleMarkerSymbolStyleCircle color:UIColor.blueColor size:10];
//add the graphics in the different overlays
AGSGraphic *drapedGraphic = [[AGSGraphic alloc] initWithGeometry:point symbol:redMarker];
AGSGraphic *absoluteGraphic = [[AGSGraphic alloc] initWithGeometry:point symbol:blueMarker];
AGSGraphic *relativeGraphic = [[AGSGraphic alloc] initWithGeometry:point symbol:greenMarker];
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