ArcGIS Runtime SDK for iOS and macOS: Building Apps

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
welcome to the session I hope you're having a good conference so far I'm Sylvania bhaskaran and this is my colleague Devesh Coyle and today we'll see how you can build apps using ArcGIS runtime SDKs for iOS and Mac OS before we begin how many of you are I always developers ok about half have any of you worked with version 100 of runtime SDKs ok ok this session is aimed at anyone interested in taking ArcGIS platform to iOS and Mac and we hope to give you a good starting point whether you are a developer or any other stakeholder here's our agenda we'll start off with what ArcGIS run timers introduce the next generation of runtime SDKs and show available resources then we'll dive right into the core components of the SDK specifically we will look at four sections in detail depending on how your users might want to interact with their of GIS content first we will see how you can display map content and build an app from scratch next we will talk about searching for content in your ArcGIS services followed by a section on analysis then we will talk about editing content and finally conclude by talking about some licensing ok let's get started what is ArcGIS runtime runtime consists of a conceptual model and a common set of core GIS functionalities that have been implemented using C++ and a new common C API different SDKs that are native to a number of different platforms have been built using runtime as their foundation this really gives a win-win for all of us with the platform independence of C++ and C we are able to effectively build and ship many great products for all the while harnessing the GPU acceleration capabilities of the device for you as a developer or project stakeholder this brings powerful GIS capabilities to your native apps while also maintaining the look and feel of your target platform the runtime facilitates easy multi-platform development with specific products for it and the api's are intuitive to learn once you are familiar with one of them because they share a common design as many of you know we released the next generation of runtime SDKs version 100 past November this was made possible by this new runtime architecture with the C++ runtime layer we already had we have introduced a new comment C API layer while the mapping and GIS services are still provided by the C++ core most of the SDK functionalities have been implemented at the C API this has enabled us to provide you with a consistent design API and behavior for all these different SDKs that wrap the C API it has also enabled us to scale up our developmental efforts and have synchronized release of functionality next let's talk about the SDKs the iOS SDK supports iPod Touch iPhone and iPad devices and the Mac OS supports MacBooks and IMAX the two platforms are very much similar in the way in which you build them with respect to programming language design patterns and development tools so if you are familiar with one of them your transition to the other should be similar if not you learn one and you can build apps for both iOS SDK requires that you have a minimum iOS version of nine and the Mac OS it's ten eleven that's elcapitan Xcode is the IDE that you use to design and develop your iOS and Mac apps and the programming languages you can use our Objective C and Swift next let's take a look at where you can get more information about the SDKs it's the arcgis developer's website you may find yourself referring to this site frequently as you build your apps let's look at it now so this is the arcgis developer's website and this section here would be your gateway for the different web runtime and scripting api's before we go into the iOS section i'd like to quickly point out the develops that we introduced last week the aim of develops is to provide you with simple step by step tutorial in the data design and developmental phases of your app the develop tab here has labs for different web and runtime SDKs including iOS and Mac OS let's go to iOS there are a few labs here the first one here is to really set up a basic project and display a map and each lab has some overview the exact steps that you need to do and a challenge towards the end do check this out now back to the developers page let's go into the iOS SDK page you can download and install the SDK from here or you can use cocoapods while the develops helps you with a step by step tutorial the guide section here provides you with a conceptual number of conceptual articles both about the SDK and the ArcGIS platform let's take one of the examples here displaying a map this shows how you can open a map how you can your map can come from a portal item or a mobile map package etc and the code for all of these articles are available in both Objective C and Swift going back to the table of contents here there are other categories that help you work with 3d display information searching let's look at edit features this has a good overview of editing and tark's in high at high level about online offline workflows etc so the that's the guide section the developers website also has an API of doc you can search for any class and this class for instance has some information about it and it has description for its properties and methods next I'd like to talk about the samples you get access to a plethora of samples using the runtime SDKs in fact we have released at samples app that you can download from App Store the samples are also hosted in github let's take a look at that as you see there are different categories and each category has a number of samples under them let's take a sample for example create and save a map it has some basic information on how to use the sample some useful screenshots and also the expected behavior of the sample similarly for Mac OS also the samples are hosted in a series github page coming back to the developers page finally I'd like to point you to our user forum GeoNet you can post your questions and issues here and get them answered by fellow developers or ESRI staff so that's the developers website you get access to develops guide dogs a Pierre of dogs samples and user forums it's extremely useful and I urge you to check it out yeah I think we've upgraded to updated all the samples to use with three the guide documentation still uses so if 2.3 we're in the process of upgrade okay with that I'll hand it over to the wish now to get us started with the core capabilities of the SDK thanks Agana let's go and talk about our first section which is displaying content you know this is obviously probably the most important section where everybody wants to display some geographic content in their apps and you'll see that it's actually quite easy to do so when you start off you have choice of what type of content you want to show and generally there's two broad categories you're either displaying two dimensional maps or three dimensional scenes and the rjs platform supports both of them the mac supports both 2d and 3d but iOS had this release only supports 2d we hope to have ad support for 3d in the next release which is in a few months so it's really close we actually have a beta of it out there in the current release that you can play with and see how it works but we still have a little more work to do regardless of the type of content you choose the structure and organization of this data is basically the same you have operation layers that are displayed on top and these layers really are unique to your map or your application and are of particular interest to the user because many times this is the layer that enables those user workflows examples of an operation layer may be a utility network for an asset management application or the burn area for a firefighting app below the operational layers is your base map and the base map just provides some geographic context for all the layers on top so it's some common data like roads or administrative boundaries or satellite imagery and it doesn't change much and it's usually common between a lot of maps and applications now if you're using 3d scene then you may also have another type of content which is called a surface and this surface below the base map and the base map is draped on top of it to give it some depth so you can appreciate the topography of the geographic area that you're looking at now that's a structure of a map or a scene but really what it's composed of is layers layers in the base map and layers in the operation layers and we have a number of different layer types in runtime for you to choose from depending on what the data is and what your application needs to do with it so for example we provide tile layers that fetch precache tiles from the service and then assemble those tiles on screen and these layers are really good for displaying static data very quickly because those tiles are already pre cached and just assembling them on-screen and we have two layers for this the RGS tile layer and the vector tile layer because there are two tile formats one is this raster or pixel based tiles which is really good for things like satellite imagery and then we have vector tiles which are really good for vector data that can be restyled or customized but they both work the same way and these layers can work with services that provide those tiles or they can work with local content like tile packages that have those the same data well sometimes you know even if your data is not changing frequently your clients may want to customize the display of that data so turn off or on some layers with tiles you really cannot do that because all of that data is already burnt in that's where the next layer the map image layer comes into play is it it can allow it still generates an image from the service but that image is generated on demand so the client can specify what layers they want or what symbology they're going to use and this is really good if you have vast amounts of data that you don't want to bring to the client you can just bring an image of it which is really small and efficient offline definitely we understand you need to take your base maps offline so those tile layers are available in an offline mode with either vector tiles package or tile package map image layers on the other hand can't work offline because they rely on the server to do the crunching and give you an image at this point we don't provide those capabilities what we're going to allow you to do is customize the symbology of those layers so and that is in the future we don't allow that today with local vector tiles we allow that for online vector tiles where you can publish a style file that and then in that style file you can then choose to say certain colors are transparent and that way you turn off the layers but no real way of because it doesn't keep a categorization of layers it just knows this is the data and this is the symbols I need to interact with moving on there's a feature layer that the runtime provides and this is this works differently from the tile and map image layer where the actual features are brought on to the device into the application they're held in the application by an object that we call a feature table and this table allows you to do crud operations on it like querying creating deleting things like that and this table works hand-in-hand with a layer then that that's responsible for visualizing those features on the map so this is this is typically what you will use with your operation layers that you want to query your edit and again that table could contain data that's come from a service like a map service or a feature service or it could contain data that's coming from a local geo database on disk so it can work in both online and offline modes depending on what your application needs to do with it and then we have introduced this raster layers also which are currently in beta on iOS but they're available in final form on Mac and we'll be releasing them for final in the next version of the iOS SDK and they're really good for pixel based data sort of like elevations or temperature where you can apply raster functions on-the-fly to sort of do analysis and generate new products and we support a number of different laughs raster formats like details mosaic data sets geo toughs pngs and these raster files can be sitting locally on the device so it's really efficient in displaying them in the coming release will be adding support for rosters coming through image services so those are all the different types of layers that you have in your Maps and scenes but your Maps and scenes can live in a variety of different places for instance they might live on the portal as web Maps or web scenes we've now made it possible for you to take the whole map offline using mobile map packages and sometimes you may not be using a pre authored map either in the portal or in the package you may just create the map programmatically by mashing up a number of different layers in your application that's perfectly fine as well so all of that was about the map and scene which constitutes the model component in an MVC architecture so if you want to display those data sources on your device you need to use something from the view component of that architecture and for that we provide things like a map view and a scene view so map you were to the map a scene view go to the scene and that's the way you can take the 2d and 3d content and create 2d and 3d visualization and not only does it display it on screen but it also handles all the user interaction with it in response to gesture so users can pinch to zoom rotate use the keyboard all of that and these components extend the platform view component it's like UI view on iOS and nsv on Mac so you can treat them like any other view components like a button or a slider that the platform provides you can add them to storyboards you can use auto layout things like that so it just worked like any other view that you're used to using in your applications now new it the version 100 is that the map view and scene view also provide this concept of graphic overlays where you can add content on top of the map and seen in the past we used to provide graphics layers that could be interleaved with your content but now we've changed that paradigm to make sure that the graphics overlays always stay on top and this makes it really easy for if you want to like switch out your map you don't lose your graphics you don't have to do anything special as a developer to keep your graphics on top they'll stay with the map view of the scene view and the map and scene could change on top of the map in the scene on top of the whole map the operation layers the base map the surface on top of the whole map or the whole scene over yes you can have more than one overlays and each overlay can contain more than one type of geometry we typically ask you to put one type of geometry in an overlay so you can use a renderer with an overlay to symbolize it and a renderer can only work with one type of geometry at a time but if you're just assigning symbols directly to the graphics you can add different types of geometries to the same overlay that's okay and then we provide conveniences on the map view and geo view in terms of the identify operations where you could give pass in a map point or a 3d point and it'll tell you all the features and graphics at that location so that makes it really easy for you for you to implement identify type of functionality changing the viewpoint of the geo view is very easy we allow you to change the viewpoint based and extend Center and scale and if you're using 3d content you can use a camera where you can specify heading altitude pitch and roll so so with that let me go ahead and jump into a quick demo and what I have here is a playground have any of you use playgrounds before some of you have yeah so those you who haven't playgrounds really this live coding environment that apple provides its following the repple model where it's a read evaluate print loop as you type code it can show you the results of that code and what I've done in the playground is just created a map view and in this case I'm creating it programmatically I'm not using storyboards because that's not supporting playgrounds yet I'm giving it a frame saying it needs to be 350 by 350 and I create a map object I set a base map on it this time using imagery with labels and I assign that map to the map view and that's it and then I set up I just create a location which is centered in Palm Springs using this point geometry and I set the view point of the map view by passing in that location as a center and telling it to zoom to a scale of 10,000 so if I go ahead and just hit play and it's running sometimes playground takes a while if you leave it open for long yes we have a document that shows how you can use playgrounds in them we have some code snippets what you should have seen was the map where you can see it's executing but for some reason the map view isn't showing up you know you could it be yeah let me go and kill this and start up Xcode again and I think we might see something there we go so playground is a great place to experiment with code including the runtime where you don't have to build an application you could just write a bunch of code now the runtime uses a lot of asynchronous methods behind the scene so what is important is that you need to set your playground to say it needs indefinite execution because the map you need to fetch you know content display it animate and your playground would finish before it's ready to display so that's an example of using maps and I can actually make one really small change instead of creating my map and setting based map and you know setting up the contents in code I can go ahead and change it to use a web map and if I go ahead and quit that if I go ahead and switch to my browser I have this web map and I'll go ahead and open it up again because I just quitted by mistake I'll go and paste in the URL of that web map save and play you'll see this time I get a completely different map and this one has some feature layers on top showing some points of interest in Palm Springs so that was just a simple change to use an existing map on a portal so that is about working with playgrounds and maps and I just want to show you another application really quickly that's built for the Mac and you'll see I have a window in which I've added a scene view and I'm using auto layout and interface builder to set the scene view when I add the scene when I had a view to this to this UI I changed its class to be the scene view that's how it knows it's a scene view and in the app delegate I have an outlet to that scene view and I create a scene just set some base map on it and add an elevation source to my base service so that it's draped nicely base map is draped nicely on it if I go and run this here that's that's a swift thing it's it's trying to unwrap the URL because the URL constructor can can sometimes fail not give you a URL for your URLs not formed correctly so when you put a bang at the end of it it'll unwrap it and make and it could if if my URL was bad that could crash but since I know I'm using the right URL I've taken a shortcut and just said unwrap it so if I go ahead and so there's my scene that's working on a Mac if I go ahead and zoom in a little bit and then use my keyboard and option key and hold down drag you can see I'm starting to get a sense of the elevation so that's just a really quick demo of how you can easily display maps and scenes in your application now I just want to point you to a few other sessions that we'll touch upon and actually take what I said today and dive into a little deeper and that's working with maps online and offline it's a little later in the day today building 3d applications on Friday just talks about all the types of 3d data you can use in symbology and then if you want to know more about drafters we have a session on Thursday that talks about using the raster API is in run time so that was about map view and scene view now the views also have some other capabilities something that we call accessories that you can use the really convenient things for instance you can put a grid on top of your map or scene content that shows lines of latitude and longitude so your users have a sense of what they're looking at we support many different formats like MGR s us and G UTM the view as a magnifier you can tap and hold and it'll blow up the contents under the finger it's got a sketch editor that allows you to interactively sketch on the map and create geometries or modify existing geometries you can change the background of the views so where you have holes in your data and you're seeing below the map or the scene you can change the color of the background so it matches the base map a little better you can show call-out and talk if you want to call the users attention to a specific feature location and we provide a location display that shows the device location on the map and has different modes depending on if you want to use the compass sensor to orient the map or if you're in navigation mode and all of those are can be seen easily using the sample viewer apps that we've built so to give you an example here's the just so this is the sample viewer it's got all these categories of samples you can go ahead and pick one of the categories say sketch on the map and then if I start tapping and see I can create a line and I can even take bring up the magnifier move the vortex and I can undo and redo create polygons so all of this is using the map view sketch editor and the app even look allows me to look at the cord so if I want to show you the code that was important for that it's basically this geometry value change function where every time the user picks a new type of geometry we start the sketch editor with the right type of creation mode and then it handles all the user interaction you can change symbology and things like that we give you those options but that's an example show call call-out if you just happen the map will show call-out with the location that you tapped on and things like that so I encourage you to explore explore this app and look at all the samples we have available the source code is on github it's linked to from our developers page yeah scenes is on there so it's it's in beta it works but we haven't done anything extensive with it like adding scene layers and things like that yeah [Music] okay okay next let's look at searching for content using iOS SDK searching could mean different things depending on the nature of your app your users could be searching for places they could be tourists trying to find points of interests or technicians trying to locate an address or they could be they may want to search for features from within their ArcGIS services your app could use one or both of these and first let's look at searching for places searching for places is done using either an online geo coder service or a local locator file on disk you can perform geocoding which is getting an location from an address or reverse geocoding which is getting an address from a location let's look at geocoding geocoding in the SDK is exposed through an Aegis locator task you first need to initialize the locator task using either an online geo coder service or a local locator next you can set a bunch of input parameters this code snippet for instance sets a preferred search location by which results that are 50 kilometers from this location are boosted up in rank you can also limit the maximum results the geo coder returns and you can also eliminate the ones that are ranked lower by setting a minimum match score next you would execute the geo coder with the search text which is the address geocoding is an async operation and it returns you a bunch of geo code result objects from which you can construct graphics and maybe display them on the map so this is the basic workflow you initialize the geo coder set parameters executed and handled results however in many cases users might want to see suggestions as this type in the search text field the SDK supports this workflow also so for this you first need to define some suggest parameters like categories or such area where to suggest then you would execute the suggest operation as the user is typing in the text field note that the results of suggest are different from geocoding results so when the user actually picks a suggestion from the list you would need to call geocoding with the chosen suggestion and get the geocoding results with that let's see a quick demo of geocoding I'm going to be using the same app that the veche showed let's go to the search category and pick the first one which is find address this geo coder uses this sample uses ESRI swirl geo coder and allows me to perform searches in a number of different formats I can say look up a country like I need internet connection because I'm using the online geo coder and Wi-Fi zone pause on okay let's see if this folks know it go back and come back in yeah okay I can also search for cities like New Delhi the geo coder of course allows me to search for addresses as well so that's his real head quarters in Redlands I don't have to know an address I can just even type a point of interest like the Taj Mahal so that's geocoding let's look at another sample now which provides suggestion as the user types let's say I want to find Starbucks close to our current location so I start typing and the suggest operation executes and provides me with a list of suggestions first of which is Starbucks and I don't think this sample uses a category or the search area like I showed that's why it's showing such suggestions from all over the place but let's just pick Starbucks which is the relevant one and such so now geo coder executes and brings me the Starbucks closer to us so that's geocoding if the wish could switch back to yeah yes you can it would be of the format dot LOC and you can create that using our desktop applications like arcmap or pro right it's all driven by the attributes of the data that but that are used in your locator so depending on what type of locator you have it will be driven based on yeah and it could be at different levels it could be at the world level like I have or it could be just specific to your region or city you can yeah and in a mobile map package as well yeah yes yeah suggest operations are available offline so let's switch back to the slides now five so similar to the locator tasks we just saw for geocoding there are other tasks and runtime that fit into the same pattern so the general pattern would be you would construct the task and load it it could either be from an online service or a local file you would set a bunch of input parameters you would execute the tasks which is and which it's mostly an async operation and you get the results back like we did with the locator tasks sometimes you get a job back in which case you would listen jobs are basically async operations that run on server and they are generally longer running so you would wait for the job to complete before getting the results we would take a closer look at jobs more in the upcoming sessions sections so with that let's move on and talk about searching for features now you can do this in a couple of ways you may want to find features from a specific feature table which is querying or you may want to find all features at a specific map point which is identifying first is querying query operations are executed on the feature table and the operation itself can either be online or local depending on its the nature of its backing feature table whether it's a service feature table in which case it's online or if it's a geo database feature table it's offline and it also depends on whether or not the features are already cached locally query operation requires query parameters you can search for specific features by passing in object IDs your query parameters could be attribute based or you can also specify spatial query parameters that take in a geometry and a spatial relationship next you would execute the query on the feature table with the query parameters query result has a feature enumerator which can be ight rated over to get the result features next is identifying features the mesh talked about it a little bit basically identify allows you to discover features at a given map location you can explore features from a given layer or all layers in your map similarly if you have graphics added to overlays you can explore those as well the results of identify operation contain the features or graphics at that particular given location so let's really quickly see an couple of demos for that so first for querying let me go into features and feature layer query so here I have a map showing the states of United States and let me search for a state like Maine so what happens is a query parameter based and based on an attribute from this service is created so one of the attributes here is state name so that query parameter is used to execute the query operation and the results are then selected and highlighted on the map and think this we also have an identify layers sample so this sample shows just it's a very simple sample it just shows how many features are there at a given map location let's just tap on a point and it gives me the count and if I tap on a point where my layers intersect I get results from both the layers from one single operation so that's identified and with that I will pass it on to the - for analysis so let's briefly talk about analysis that you can do in your application one of the most common one is doing analysis on transportation networks things like finding routes currently we have a route task available in the SDK but in the next release of the SDKs will add closest facility and service area tasks to help you find those things as well current with currently with the route tasks you can compute point-to-point or multi point routes and you can optimize your route based and the distance traveled or the time taken you can even ask for it reorder stops to find the best sequence to optimize those criteria and you can specify advanced restrictions like time windows and barriers to customize or out and the route task works with the online route service that's hosted on RJ's online provides a traffic data for a hundred plus countries and it requires subscription so it's going to consume credits you need to be aware of that if you have your own route service running on your on-premise portals or services the routers can work with that as well and many times you might have your own custom data for instance private road networks are not part of the public domain so you might have your own route service if you want to do routing offline the runtime supports that too through the use of mobile map packages so you can package your transportation network along with your map and then you can use the route task against the Mac package I won't get into too much detail of how to do that there's a whole section or whole session there was a whole session yesterday that talked about building a routing application so for those of you have a time machine you can go back and see no not yet for the four other mere mortals like as we can watch it on the website when they put the recordings up in a couple of weeks the other type of analysis that you might only do is use a geoprocessing tool or a service and geoprocessing tasks is is very versatile because the type of analysis you do really depends upon the type of service you have and the type of tools and models it uses you can use a whole variety of one online services that help you summarize data and find patterns but you can create your own models to predict the path of wildfires for example of find hot spots and crime locations and just a note about the geoprocessing task is some of these some of these computations require a lot of time on the server and that's where this concept of jobs come in tasks are single one short operation you perform it you get a result in a few seconds and it's done but with jobs it could run for a longer period of time so the client requires is required to pull the job to see its status on the server and then when it's done invoke its completion handler so we model these differently in the sdk if something's long-running it's a job for instance geoprocessing is a job downloading data from a tile service sort of feature service is a job because it could take time and you find it based on you know the hierarchy of the classes you're working with so apart from spatial analysis you can also do very simplistic geometric operations using runtime the high performance native geometry engine that's implemented complete locally so you don't need access to any service and it's incredibly fast and you can perform you know a simple tuple of topological operations like simplifying geometries densifying them or buffering them or you can find relationships between geometries like which ones intersect or which ones overlap and you can even measure areas and distances using the geometry engine it's very powerful and speaking of geometry is just another new pattern that I want to point out with the latest has decays that geometries are immutable so things like point multipoint envelope polyline polygons once they're created they cannot be modified and this is done so that these objects are thread safe which leads to a lot of performance in the Cole runtime where we can guarantee that things won't change so we can catch them but if you want to modify geometries we provide separate paradigm known as builders where we have geometry builders for each type of geometry and you create a geometry builder either you you know if you want to start from scratch you create an empty geometry builder or if you want to modify an existing geometry you pass in that geometry to the Builder and then the build has got methods to help you add vertices remove vertices and over time it'll allow you to work with curves as well and when you're done you can tell the Builder to give you the final geometry and you get it so just something worth mentioning and to give you an example of that let me go and launch this the Mac OS samples are similar to the iOS sample viewer we have a Mac sample viewer it's on github already so you can download and build it for were in the process of adding it to the App Store so you can get it from there in a few weeks and here's an example of a sample that uses a geoprocessing service to find hot spots in in 911 so I can go ahead and hit apply and I should get back a heat map showing where 9-1-1 calls were more common in this area there you can see the red areas where there were more calls an example of another geoprocessing sample is this one that helps me find viewsheds so if I click on the map it's going to try and find all the areas and them on this map which are visible from that location taking into account the topography and those areas are highlighted here in orange and you know create using geoprocessing is really simple you create a geo processing task with a URL to the service so this is the service we're using with the sample and then you create some geo processing parameters on the tasks you ask to get the geoprocessing job and you start the job with the status handler and a completion handler the status handler gets updated every time it pulls the service to see what the status of the job is and when it's finally done the completion handler gets called with the results so that's some example of geoprocessing we have some a geometry sample that shows the different spatial operations you can perform so if I have two geometries like this I can find the Union which is highlighted in red or the difference or the intersection and we have some route and navigation samples as well with that I will switch it back to souvenir to talk about editing briefly yes okay okay next let's talk about editing using iOS and Mac OS SDKs just like querying editing features is also done on the feature table either a service feature table in case of online workflows or a geodatabase feature table in case of offline workflows but geodatabases can also be present in local runtime content like mobile math packages that are created from desktop applications currently we do not support editing them so in order to edit geodatabases they need to be downloaded from a feature service using a sync task so with that let me quickly talk about the sync tasks in a general user workflow the first step would be to create a sync task using a sync enabled feature service you can specify parameters like the layers you want to include in your geo database the area of interest whether or not you want attachments so on then you download the geo database from the server using the generate geo database job and when the job is complete you get the geo database and you can access the feature tables in it you can edit the tables and when it is time to sync changes with the server you use another job called sync geo database job sometimes in a data collection workflow a geo database is downloaded once using the generate geo database job but copies of it are given to and given and put into different users devices in such cases the in the copies each of the copies have to be registered with the original feature service the first geo database was created with this way the edits in the tables can be synced with the correct service so that was sync task but when it comes to actual editing workflows it doesn't really matter whether your users are an online or disconnected mode the methods are the same so first add operation the text in bold represents the classes and the text underneath them are the actual operations performed on those classes so to add a new feature is created on the table and attributes geometry and attachments can be then set on the feature this code snippet for example shows an overload of the create feature which takes in some attributes and geometry so this creation process is all done in memory and you need to add the feature to the table in order to commit it for update operation you first need to get hold of the feature either by query or identify then you would update the attributes geometry attachments then call update feature on the table to actually update it deleting is simpler in that you get hold of the feature and simply delete it on the table so with all these operations being common between online and offline the difference between them comes when you want to send local edits to the server in online mode the local edits are applied through an applied it's method and in offline mode as I discussed earlier local changes are synced to the service through the sync job and updates on the server can also be optionally brought down at this stage so that's editing but you would notice that all this we have just shown code the SDK also provides other classes and tools that can help you with interactive editing let's quickly look at a couple of them the first one is a sketch auditor Devesh already showed a demo of it so it basically allows your users to create and edit geometries as you go so to use it you initialize it you set it to the map view and for new geometries you can give it a creation mode which can be any of the geometry types or even freehand sketching for existing geometry you give the existing features geometry to it and you simply stop when you are done sketching as I said supports freehand sketching you can move the entire geometry it supports undo redo operation you can customize the symbols of the default sketch editor you can choose to receive notification whenever the sketch changes and so on the SDK also provides a default pop-ups pop-ups are UI components that are used to edit feature information which can be attributes or attachments and you can edit geometry by linking the pop-up to a valid sketch head etre and pop up enforces data validation and platform capabilities of the service like ownership based access control etc and the pop-up has a number of delegate methods for just about all events when the editing starts when the user cancels editing when they are done and so on you can also customize the popups appearance in a number of different ways and pop-ups are a big topic by themselves in fact we have a demo theater on them this afternoon do stop by and we also have another runtime text session on editing your data online and offline and that is tomorrow and creates you to attend them and with that I will pass it on to the wish now we are mostly out of time so I just want to point you to some of the other sessions that are coming is a couple of sessions for runtime that are common like the road ahead where they'll talk about some of the new capabilities coming in the next release and the other sessions on Friday where you can ask any questions you have about the runtime it's an open forum and then Suganya mentioned we have a session or demo theater on pop-ups we have an other demo theater talking about authentication and security accessing your data using in iOS apps so check these out also I want to remind you to you know take our survey let us know how we did and what type of content you'd like to see next time with that I'll just open it up for questions yeah this question is has anybody tried implementing the SDK with react native I think somebody with a strong stomach tried that a year ago it didn't get too far my understanding was they needed some bridging headers to be created for a lot of the SDK classes to make them available in the react environment but that was the end of their excursion so no we I can't say that I can't speak intelligently about that question is that the runtime support real-time data through Steam stream layers or stream services no we don't currently support it it's on our roadmap to support question so you're saying how do we communicate information from the field back to the organization you know if if this is geographic information that you're collecting and you want to communicate the simplest way is to use our API is to edit the map data and add them as features in the service unless here often yeah it does use a sequel light in the back end so the do database you get back is a sequel light you can include geodatabases in mobile map packages as well yeah but you can't edit them once I remove my package not it so currently you meet the advantage of using the sink job is that you can edit that data and synchronize changes back to the server and get more changes from the server into your into the client so you can keep the client data in sync with the server with the mobile map package workflow that sort of falls apart because once you create the package that's the state of it if your data and the backend changes you now need to find ways to distribute create a new mobile map package and send it back so more my package is an end state at this point whereas with the sync workflow it's a continuous state where you can keep the client and server in sync we say you you know I did yes will it support both local scenes and global scenes by local you mean a small fish tank sort of an area yeah yes it supports both with the next few months I think when we release the next update yes so if you download the current release of iOS SDK it has some api's and there are some classes which are marked beta and so you can use them but then you can't deploy an app that's using those api's and there's no separate download for the beta it's part of that SDK and the Mac SDK has those same api's and final so you should be able to do that on the Mac already yes each class mentions whether it's in beta or not that's something we're thinking about that brings with it challenges where then we have to make sure that the data that's in the map package came from a service because if you make an edit you need to be able to send it back to the service and sometimes you can create my packages with data sitting on your desk not coming from the service so we haven't figured all of that out so I want to say it's a distant goal not an immediate goal it's something that is coming up is taking your entire map offline that would be coming up in the next few months so if you have a map with a base map and a bunch of operational layers you could technically download the whole thing as an offline map all right thanks so much guys [Applause]
Info
Channel: Esri Events
Views: 1,482
Rating: 4.5555553 out of 5
Keywords: Esri, ArcGIS, GIS, Esri Events, interactive mapping application, SDK, patterns and practices
Id: RQf1fi4mP7g
Channel Id: undefined
Length: 63min 44sec (3824 seconds)
Published: Wed Mar 29 2017
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.