By Osma Ahvenlampi, SVP Engineering
Three weeks ago, when we announced the IndoorAtlas SDK 2.0 for Android and iOS, one of the major features we highlighted was its new ability to begin positioning automatically, without a pre-set venue or floor map initialization. In this post, we’ll go deeper to what that means, how it works, and how it can be best used in an application. We’ll also discuss some of the situations where this functionality can have surprising, or even undesirable behavior, and how can a developer work to avoid those if necessary.
If you’ve developed apps which use the Android or iOS platform location services, you’re probably quite used to simply being able to subscribe to location services from the operating systems’ location frameworks and and start receiving more or less accurate location information almost immediately. Well, apart from it not being all that accurate indoors, and sometimes taking quite a while to work because locking to a GPS signal can be a challenge. That’s why you’re looking at our technology, of course!
In the indoor space, being able to automatically locate a device is a bit more challenging. There is no global satellite signal, beacons are restricted by their identifiers to basically their owners only, cell tower signals aren’t all that precise for positioning, and wifi networks tend to move around. Our previous generation required the app to know ahead of time which venue and floor the positioning is performed in. This stood in way of offering the kind of experience we want to enable, so we had to find a way to overcome this.
This capability is built upon an array of technologies and large amounts of data. In every indoor map collected with our MapCreator tools, we have detailed collection of not just the foundational, magnetic field data which enables software-only, super-scalable and high accuracy device tracking, but also radio network, altitude and other data which can help provide a rough estimate of location. It is that rough estimate that is the first step towards an automated location service.
For you as a developer, this means a couple of things:
Quality & amount of mapped data
The quality of work done to survey the venue and create the positioning map is of paramount importance for good end user experience. It’s also important that you can rely on one good map – having lots of unfinished tests around will pollute your positioning experience. Today, your first tool in this should be our map accuracy analytics. We will be offering more tools in the near future to help you manage that selection of high-quality venue data.
Difference between Android and iOS
In the application, especially when working on the Android platform, you should be able to rely on the automation, but as with any technology sensitive to the environment it is running in, field testing with the final app in the end user locations is a priority. If you do encounter experience which can not be explained by map analytics, it’s time to dig deeper in the technology itself. This is also when it’s important to understand the difference between Android and iOS.
Those familiar with Apple policies will know that iOS places lots of limitations to apps’ abilities to sense what Apple considers to be privacy sensitive data regarding their environment. Unfortunately, this also limits us from using every possible source of data for the highest possible performance indoor positioning experience, and to reach the same level as we do on Android, sometimes app-level work-arounds come into play as well.
For example; if you’re working on an app intended for a limited number of venues known to you in advance, such as in-store navigation, you may have already experimented with deploying iBeacons or similar technology in the locations. It is possible to take advantage of this effort by signaling the beacons’ known coordinates to the IndoorAtlas SDK. On the roughest level, this can be to signal the floorplan, as is shown in our iOS Getting Started document. You can also go into more detailed position and even post a down-to-the-meter accurate on-time initialization coordinate to the SDK. This might be relevant, for example when a user passes a doorway which you can identify from a beacon signal.
Or perhaps your application has some destination information. When entering a building from an outdoor location, the phone’s own platform location estimate will be accurate enough that you don’t need to do anything, but let’s say you have mapped one store inside a larger venue, but the surrounding area is does not have an IndoorAtlas map yet. If your app has knowledge that the user is reaching that venue, again you can send a hint to the SDK about this.
Prioritization of different maps
Sometimes there may be several conflicting maps of the same venue made by different people, and these can produce surprising behavior. Naturally, a badly done map will not produce a great positioning experience. We’ve done a few things to help you manage this, and will be doing more:
If you’ve made a map yourself, and the app’s API key and the map belong to the same account, then we will prefer to use your own map. However, if the map is sparse or doesn’t cover the entire venue, it’s possible that the end user will enter or pass through an area missing from the map. In these cases, our platform will choose to use another, more complete map instead. When mapping locations, try cover the entire venue when possible to avoid these situations.
When testing in venues where you have not made the map yourself, it’s hard to be certain of the level of effort given for the map. We’re working on ways to improve visibility to this level of data without compromising data privacy, and will have updates on this at a later date. At this time, please be in touch with our customer support team if this affects you.
If you are unable to control the mapping effort, you can also compensate in the app. Every time IndoorAtlas positioning systems detect a switch from one map to another, which can also happen when moving across large venues or changing floors, the SDK will inform the app with a region exit/enter signal pair. You can watch for these signals and act in the app. For example, when getting a signal that positioning enters a region you don’t know about, it could be an indication that the user has exited the venue you’re interested in, and it might make sense to stop listening for position updates or switch to outdoor positioning by re-subscribing to the platform’s own location services.