Category Archives: InformME

Screen shot resized

Android – Running an ArcGIS Map Offline

Many people know how to run ArcGIS on a desktop computer, and ESRI provides many tools to do so.  But what about workers in the field that need to see a map with specific objects?  Running offline maps on an Android device is an extremely useful tool and can help workers do a wide variety of things that before could only be done while sitting in an office.  Creating an offline map app on an Android device is something that is possible with the ESRI mobile API, but it can be tricky. So I will go over how to do two fundamental functions on an Android device: 1) Loading the offline map, and 2) querying at a specific location.

Required:

  • An Android Device (or emulator, I recommend GenyMotion if you go this way)
  • Android Studios (the latest version)
  • A file geodatabase, created using ArcGIS for desktop (with the desired layers that you want in the map loaded into it).
  1. Store the .geodatabase file on the physical device, remembering the folder hierarchy where it is stored.  The .geodatabase file is stored on the physical device in order to make it easier to sync/update the information. If the GIS data was stored inside of the actual application, it would be a much more lengthy process to update and change when your mapping data was changed. (Example path: /sdcard/Geodatabase/basemap.geodatabase)
  2. Create a new Android project in Android Studios, import the ArcGIS libraries and edit the build.gradle file accordingly (See: https://developers.arcgis.com/android/guide/install-and-set-up.htm for more information on how to get your Android app ready for ArcGIS maps).
  3. Place a MapView in your main layout. Match_parent for both width and height (We’ll call it mMapView)
  4. Because loading all of the layers from the .geodatabase file can take a hefty load on the device, it is good practice to run that on a separate background thread. To do this create a private class that extends AsyncTask and create a skeleton doInBackground method within it. (See bottom for full code)
  5. Instantiate an object of that private class in the onCreate method and call .execute() on it.
    
     MapView mMapView;
     Geodatabase geodatabase;
     private GeodatabaseFeatureTable geodatabaseFeatureTable;
     private FeatureLayer featureLayer;
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
    
          mMapView = (MapView) findViewById(R.id.map); //Instantiates the MapView object
          LoadMap mLoadMap = new LoadMap(); //Runs the LoadMap class on another thread
          mLoadMap.execute(); //Calls the background thread
    
     }
    
    

     

  6. Remember where you put the .geodatabasefile on the device? We’re going to use that now.  To add the layers to the MapView, we need to do it one by one. First, we will find the .geodatabasefile and loop through each of the layers that are contained therein, adding them one by one to the MapView. NOTE: the extent of the map will be determined by the first layer that is added on, so keep that in mind when creating your .geodatabase file and adding layers on, due to how our file was constructed, I add them on starting from the back, to get the full extent of the map.
    private class LoadMap extends AsyncTask<Void, Void, Void> {
    
            @Override
            protected Void doInBackground(Void... params) {
    
                try { //Opens up the basemap.geodatabase file from it's location on the physical device
                    geodatabase = new Geodatabase("/sdcard/Geodatabase/basemap.geodatabase");
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } finally { //Takes each layer one by one from the Geodatabase and adds it to the MapView
                    for (int i = (geodatabase.getGeodatabaseTables().size()) - 1; i >= 0; i--) {
                        geodatabaseFeatureTable = geodatabase.getGeodatabaseFeatureTableByLayerId(i);
                        featureLayer = new FeatureLayer(geodatabaseFeatureTable);
                        mMapView.addLayer(featureLayer);
                    }
                }
                return null;
            }
        }
    
  7. Once that is set up, run the app on the device that has the .geodatabase and it will loop through the layers, adding them to the view one by one. Your output should be to this:

Screenshot_2015-02-17-11-03-22

It is a very simple, but necessary, first step to getting a complicated, interactive custom ArcGIS application running on your Android device, free of any WiFi connection!  In my next blog post I will detail how to interact with the map, showing how to query objects at a point tapped on the map. Stay tuned!


 

 

ActiveG InformME Wins IBM Tivoli Best of Show Award

AIBM Business Partner Award - Best of ShowctiveG won the IBM Tivoli Best of Show Award for its InformME product on March 2, 2013 at the IBM Pulse Convention in Las Vegas, NV.  ActiveG displayed InformME’s ability to create and manage work orders and assets visually, in a mobile environment.

During the competition involving 10 other IBM Business Partner solutions, ActiveG’s team demonstrated how InformME, built on the Interloc Mobile Informer platform, helps mobile users organize work based on location in disconnected GIS environment.  The judges were impressed with InformME’s ability to create and update linear work orders by drawing on the mobile map to mark the areas of work, and then see that information replicated in core Maximo.

activeG_receives_best_of_show

ActiveG Supreme Commander, Don Anderson, accepts the 2013 IBM Tivoli Best of Show award from IBM’s Mark Register.

For more information on how ActiveG InformME can help your company improve its mobility solutions with map-based visualization in connected and disconnected environments, see the InformME page, or contact ActiveG today.

SoCalGas chooses ActiveG InformME

Southern California Gas Co. (SoCalGas) has chosen ActiveG InformME to improve its activeG InformMEmobile Maximo experience for field personnel.  InformME will be used to gather metering and other asset information in the field for critical gas storage inspection processes in SoCalGas’s southern California operations.

ActiveG InformME is a user-friendly, map-based mobile application for Maximo, providing disconnected or connected work order creation/update capabilities via an intuitive  map-based interface.

For more information on how InformME can improve your mobile Maximo experience, contact ActiveG today.

About SoCalGas

Southern California Gas Company (SoCalGas) has been delivering clean, safe and reliable natural gas to its customers for more than 140 years. It is the nation’s largest natural gas distribution utility, providing safe and reliable energy to 20.9 million consumers through 5.8 million meters in more than 500 communities. The company’s service territory encompasses approximately 20,000 square miles in diverse terrain throughout Central and Southern California, from Visalia to the Mexican border.

SoCalGas is a regulated subsidiary of Sempra Energy (NYSE: SRE). Sempra Energy, based in San Diego, is a Fortune 500 energy services holding company.

About ActiveG

ActiveG provides innovative, advanced spatial software solutions for companies running IBM Maximo, delivering complete integration of your Enterprise Geographic Information System (GIS) with the Maximo product line, via its MapEngine™ and InformME™ solutions.