Building Applications with ArcGIS Runtime SDK for iOS - Part I Divesh Goyal Mark Dostal
Agenda
•
The ArcGIS System
•
Using the Runtime SDK for iOS
•
-
Display Maps
-
Perform Analysis
-
Visualize Results
Q&A
Help make this session better, remember to turn in your surveys.
ArcGIS
ArcGIS - A Complete Geographic Information System
Use Serve
Author
ArcGIS Server
ArcGIS Desktop
. . . For Authoring, Serving & Using Geographic Knowledge
ArcGIS for Web & Mobile
Web APIs Flex
JavaScript
Silverlight
REST
Runtime SDKs
ArcGIS Server
Native Applications and Runtime SDKs Configurable COTS applications and Native ArcGIS Runtime SDKs
iOS
Applications •
ArcGIS
Runtime SDK •
Objective C
Android
Applications •
ArcGIS
Runtime SDK •
Java
Windows Mobile
Windows Phone Applications •
ArcGIS
Runtime SDK •
Silverlight
Applications •
ArcGIS
Runtime SDK •
.NET
Windows
Applications •
ArcGIS Explorer*
Runtime SDK •
WPF, Java
Linux
Applications •
None
Runtime SDK •
Qt, Java
ArcGIS Runtime SDK for iOS Formerly known as ArcGIS API for iOS
ArcGIS Runtime SDK for iOS •
Build native applications using Objective-C -
iPhone 3GS / 4 / 4S, iPod Touch, iPad 1 / 2
-
Must be running iOS 4 or higher
Web or Native applications?
•
ESRI supports both
•
Advantages of native applications -
Tighter integration with other native apps
-
Access to resources -
-
•
Contacts, calendar events, photos
Marketing/Hosting/Reporting via AppStore
Disadvantages -
Dedicated effort to write and maintain
Before you can begin.. •
You need an Intel-based Mac running OSX 10.6 (Snow Leopard) or 10.7 (Lion)
•
Join iOS Developer Program
•
-
Standard : AppStore distribution
-
Enterprise : In-House distribution
Download iOS SDK (4.2.x) & Xcode IDE (4.x)
Before you can begin..
•
ArcGIS Runtime SDK for iOS -
v2.2 : Download from the Resource Center
•
Conceptual Help
•
API Reference
•
Developer Samples
•
Deployment
•
User Forum
Developing Applications
What you can do with the API •
Display maps
•
Perform analysis
•
Visualize results
•
Collect data
•
Access Online content -
Using ArcGIS Portal REST API
-
New at v2.2
Built using the SDK
DEMO
Displaying a Map •
UI Component AGSMapView
-
Responds to gestures
-
Displays device location, heading, and bearing
-
Wrap-around dateline
Displaying a Map •
Add AGSMapView to the UI using Interface Builder
•
Or, programmatically through code
Adding Content to AGSMapView
•
Mashup basemap & operational layers -
ArcGIS Server, WMS
-
Bing, Open Street Map
-
Graphics
-
Local Tile Packages
//create the layer AGSLocalTiledLayer* myLayer = [AGSLocalTiledLayer localTiledLayerWithName:@"WildlifeHabitat"]; //add to map [self.mapView addMapLayer:myLayer withName:@”MyLayer1"];
Adding Content to AGSMapView
•
Open web maps -
ArcGIS.com
-
Portal for ArcGIS
//create the web map AGSWebMap* webmap = [AGSWebMap webMap withItemId:@"e229d715f7ca4fa980308549fb288165" credential:nil]; //open into mapview [webmap openIntoMapView:self.mapView];
Respond to events through Delegates Map Delegates •
•
•
Layer Events -
Map loaded, failed to load
-
Layer loaded, failed to load
Touch Events -
Tap, Tap and Hold
-
Move Tap and Hold
Callout Events -
Did Show Callout, Should Show Callout
-
Did Click Accessory Button
Responding to Map Touch events 1. Adopt the Delegate protocol @interface MyController: UIViewController { }
2. Implement the protocol methods @implementation MyController - (void) mapView:(AGSMapView*) mapView didClickAtPoint:(CGPoint) screen mapPoint:(AGSPoint*) mappoint graphics:(NSDictionary*) graphics { //handle touch event }
3. Set Delegate self.mapView.touchDelegate = self;
DEMO Displaying a map
Performing Analysis Using Tasks
•
Query, Find, Identify Task -
•
Geoprocessing Task -
•
Search for features In the map
Spatial analysis using GP tools and models
Locator -
Geocode and reverse geocode addresses
Performing Analysis Using Tasks (Contd.)
•
Geometry Engine -
•
native, high performance engine for performing geometric operations on the device
Network Analysis -
Point-to-point and multipoint routes
-
Service Areas based on drive times
-
Closest facility for an incident
Common Pattern for using Tasks 1. Adopt the Task Delegate protocol @interface MyController: UIViewController { }
2. Implement the protocol methods - (void)locator:(AGSLocator*)locator operation:(NSOperation*)op didFindLocationsForAddress:(NSArray*)candidates { //todo } - (void)locator:(AGSLocator*)locator operation:(NSOperation*)op didFailLocationsForAddress:(NSError*)error { //todo }
Common Pattern for using Tasks 3. Instantiate the task self.locator = [AGSLocator locatorWithURL:[NSURL URLWithString:kGeoLocatorURL]];
4. Set Delegate self.locator.delegate = self;
5. Perform operation NSOperation* op = [self.locator locationsForAddress:addresses returnFields:outFields];
Visualizing Results •
Graphics Layer -
•
Collection of Graphics
Graphic
=
Geometry
+
Symbol
Polyline
Line Marker Polygon
Point
Picture
Fill Text
Composite
Visualizing Results Contd.
•
Graphic can optionally contain -
Attributes -
-
Information about the graphic
Info Template -
Which attributes to display in a Callout
Visualizing Results Contd.
//create the symbol AGSPictureMarkerSymbol *marker = [AGSPictureMarkerSymbol pictureMarkerSymbolWithImageNamed:@"BluePushpin.png"]; //create the graphic AGSGraphic *graphic = [AGSGraphic graphicWithGeometry:point symbol:marker attributes:dictionary //add the graphic to the graphics layer [self.graphicsLayer addGraphic:graphic];
Visualizing Results Contd.
•
Callout -
•
Displayed when user taps on a graphic
Content -
Title & Detail
-
Image
-
Accessory button
-
Custom UI View
Specifying Content for the Callout 1. Adopt the Delegate Protocol @interface MyController: UIViewController { }
2. Implement the protocol methods @implementation MyController - (NSString *) titleForGraphic:(AGSGraphic*)graphic screenPoint:(CGPoint)screen mapPoint:(AGSPoint*)map { //todo } - (NSString *) detailForGraphic:(AGSGraphic*)graphic screenPoint:(CGPoint)screen mapPoint:(AGSPoint*)map { //todo }
3. Set the delegate on the graphic AGSGraphic *graphic = ... graphic.infoTemplateDelegate = self;
Responding to the Callout’s Accessory button 1. Adopt the Delegate Protocol @interface MyController: UIViewController { }
2. Implement the protocol methods @implementation MyController - (void) mapView:(AGSMapView*) mapView didClickCalloutAccessoryButtonForGraphic:(AGSGraphic*) graphic { //todo }
3. Set the delegate self.mapView.calloutDelegate = self;
DEMO Using Tasks and Visualizing Results
Related Sessions
•
Building Applications with ArcGIS Runtime SDK for iOS – Part II -
Today, 1 PM, Here
More Resources •
•
•
ArcGIS Resource Center -
http://resources.arcgis.com
-
Conceptual help, API Reference
-
Samples, Blog, Forums
Web Courses -
http://training.esri.com
-
Getting Started with the ArcGIS API for iOS
-
Creating Data Collection Applications using ArcGIS API for iOS
Apple iOS Dev Center -
http://developer.apple.com
Q&A
Thank You Please fill out the surveys