Situm is able to provide Indoor Positions within any building where Situm technology has been configured. Situm provides three methods (mutually exclusive) for computing this indoor geolocation: Situm Indoor, Calibrated Indoor GPS, Uncalibrated Indoor GPS. 


You may refer to this article for a thourough explanation on this modes. We also recommend that you try each of these modes using our Situm Mapping Tool application: this will help you get a better understanding on how they work and what you can expect from them.


In any of this methods, there may be times when Situm will not be able to provide a valid Indoor Location, usually because the signals do not match with what is expected in a given building. In this case, Situm will inform that the user is not in any known building.


Mode #1: Situm Indoor


This method determines the user’s position in the calibrated areas of a building by matching WiFi/BLE signals received with the calibrations. This is the default mode and therefore the default LocationRequest will be enough to configure it.  


The LocationRequest.Builder().useGps method controls whether or not you are in this mode. 

  1. If it's set to false, GPS will not be used to compute Indoor Locations and therefore the Situm Indoor method will be used. This is the default value and therefore Situm Indoor will be the default mode.
  2. If it's set to true, the GPS will be used to compute Indoor Locations. In this case, Situm may use the Calibrated or Uncalibrated GPS Indoor modes (see next section).  


//useGPS is false by default, therefore the default LocationRequest will configure the Situm Indoor mode
LocationRequest locationRequest = new LocationRequest.Builder().build();

...
//You may also set useGPS to false explicitly. The result will be the same as before.  
LocationRequest locationRequest = new LocationRequest.Builder().useGps(false).build();


You may try it yourself by replacing the LocationRequest in this this example. Build & run the app, and the first log lines will look like this:  


....

2021-02-08 14:58:09.539 9200-9200/com.example.androidtestapp I/MainActivity: onLocationChanged() called with: location = [Location{provider='SITUM_PROVIDER', deviceId=356655406358, timestamp=1612792689525, position=Point{buildingIdentifier='-1', floorIdentifier='-1', cartesianCoordinate=CartesianCoordinate{x=0,00, y=0,00}, coordinate=Coordinate{latitude=43,356431, longitude=-8,413453}, isOutdoor=true}, quality=HIGH, accuracy=19.535, cartesianBearing=Angle{radians=0.00, degrees=0.00}, bearing=Angle{radians=0.00, degrees=0.00}, bearingQuality=HIGH, customFields={}}]

Note that at first Situm is providing Outdoor Locations only, which indicates that so far Situm has not detected the building where you are. After a while, Situm will detect it and the Situm Indoor mode will start producing Indoor Locations. At this point, log lines will look like this:


...

2021-02-08 14:58:11.550 9200-9200/com.example.androidtestapp I/MainActivity: onLocationChanged() called with: location = [Location{provider='SITUM_PROVIDER', deviceId=356655406358, timestamp=1612792690843, position=Point{buildingIdentifier='6543', floorIdentifier='13485', cartesianCoordinate=CartesianCoordinate{x=36,30, y=37,04}, coordinate=Coordinate{latitude=43,356352, longitude=-8,413734}, isOutdoor=false}, quality=LOW, accuracy=1.098107, cartesianBearing=Angle{radians=4.35, degrees=249.25}, bearing=Angle{radians=3.50, degrees=200.75}, bearingQuality=LOW, customFields={}}]

For a thourough explanation of these log lines, read this article


Mode #2: Calibrated Indoor GPS


This mode is recommended if your building has a mix of indoor/outdoor zones where there are areas with good GPS coverage.  In essence, Situm will mix the WiFi/BLE + the GPS signals within all the calibrated areas. Therefore, when you are within areas with good WiFi/BLE coverage, Situm will work as in the Situm Indoor mode. Additionally, if you calibrated outdoor areas of your building that may have poor WiFi/BLE coverage, but good GPS coverage (e.g. a parking lot), Situm will make the most of the GPS signal and keep providing an steady Indoor Location.


If you want to use the Calibrated GPS Indoor mode, just set to true the LocationRequest.Builder().useGps method:

LocationRequest locationRequest = new LocationRequest.Builder().useGps(true).build();

The behaviour will be similar to the one described for the Situm Indoor mode. At first Situm will produce Outdoor Locations, but after it detects the building where the user is Indoor Locations will be produced in that building.


In the case of Calibreted GPS Indoor mode, the difference is that GPS will be used within the outdoor calibrated areas, enhancing Situm performance in them.



Mode #3: Uncalibrated Indoor GPS


This mode works just as the Calibrated GPS Indoor mode, but can also use the GPS signal within outdoor uncalibrated areas of your building. This can help you avoid the effort of calibrating big outdoor areas while still having the benefits of using the GPS signal in them.  This article explains how this works in detail. 


To enable this mode, first  you will have to configure geofences with a specific configuration in all the outdoor areas where you want Situm to use the GPS information.  Then,  you have to set to true the LocationRequest.Builder().useGps method:


LocationRequest locationRequest = new LocationRequest.Builder().useGps(true).build();


The behaviour will be similar to the one described for the Situm Indoor mode. At first Situm will produce Outdoor Locations, but after it detects the building where the user is Indoor Locations will be produced in that building.


In the case of Uncalibreted GPS Indoor mode, the difference is that GPS will be used within the outdoor areas delimited by the geofences previously configured (see above), enhancing Situm performance in them.