Can FileGDB SDK be made to support custom coordinate systems?

Can FileGDB SDK be made to support custom coordinate systems?

In May 2012, a question was asked about File Geodatabase (*.gdb) support in QGIS?

In the comments there, it was pointed out by @MattWilkie that the FileGDB SDK does not support custom coordinate systems.

Has there been a workaround developed for custom coordinate systems?

You can use alternative GDAL driver "OpenFileGDB" which supports also other projections

Display custom coordinate system (local projection) in ArcGIS Explorer?

Hi, I'm wondering if anyone has successfully displayed a custom coordinate system in AGX. I'm trying to display a local projection, which is slightly modified from MGA94 zone 56, one of the "core projections" in ArcGIS, but don't know how or whether it is possbile.

I noticed I can choose map projection from Display->Coordinate Systems but it only has the core projections. I'm wondering if there's a way to modify it to include my local projection? Any suggestion will be appriciated!!

There's no way to do this in the application, but you can do this with the SDK. There's a blog post describing it:
Some notes for this - it's not a custom 'projection', but I think it still may be what you're after - using a coordinate system based on one of the pre-defined coordinate systems supported in Explorer, but with some of the parameters slightly modified, known as a custom coordinate system. Also note the bottom line which says that custom coordinate systems don't save along with the map (as just the WKID is saved for a coordinate system in the map), so you'd need to reapply this when you re-open the map. (If you have the SDK anyway, then an Extension could be written to do this on startup if you needed to).

I have made a quick add-in Button and attached it here where you can edit the PRJ string (shows the current 2D coordinate system as a PRJ string for editing), and then re-apply it back to the 2D view. I included a compiled EAZ file in case you are not a programmer, and the source in case you are. I tried using the default Web Mercator coordinate system and editing the Central Meridian, and it works fine (note that works for Projected coordinate systems, but it does not work for Geographic coordinate systems).

Get Routes

The HERE SDK supports the following route types:

  • Online car route directions.
  • Online taxi route directions.
  • Online pedestrian route directions.
  • Online truck route directions with highly customizable truck options.
  • Online scooter route directions.
  • Online routes for electric vehicles to find the nearest charging stations (based on the calculated energy consumption and battery specifications).

Each route type is determined by one of the available route options: CarOptions , TaxiOptions , PedestrianOptions , TruckOptions , ScooterOptions , EVCarOptions and EVTruckOptions . These options can be set to the available overloads of the route engine's calculateRoute() method.

Start your trip by creating the route engine in this manner:

Creating a new RoutingEngine instance can throw an error that we have to handle as shown above. For example, such an error can happen when the HERE SDK initialization failed beforehand.

Note: It is not possible to initialize this engine during the Application 's onCreate() method. Any other point in time is fine. For example, a good place to initialize this engine may be in an Activity 's onCreate() -method.

As a next step, you can calculate the route based on two waypoints - a starting location and a destination (both of type Waypoint that holds a GeoCoordinates instance). Below we set default CarOptions to calculate a route that is optimized for cars:

You can call calculateRoute() multiple times. For example, call it to calculate routes with different routing options in parallel.

Each route calculation will be performed asynchronously. You will get a Route list or a RoutingError that holds a possible error when completed. If all goes well, RoutingError is null. In case of an error, the route list is null. For example, the engine cannot calculate routes if a route is not feasible for the specified mode of transportation.

If there is no error, the route list will contain only one result. By specifying the number of route alternatives via the route options, you can request additional route variants. By default, a route will be calculated with no route alternatives.

The showRouteDetails() -method from the code snippet above is used to show more route details including maneuver instructions. You can find the full source code in the accompanying example app. Maneuver instructions are also explained in greater detail below. The showRouteOnMap() -method contains an example, how to render a route on the map. We will explain this shortly in the section below.

Note: Important

A route may contain a list of NoticeCode values that describe potential issues after a route was calculated. For example, when a route should avoid tunnels and the only possible route needs to pass a tunnel, the Route contains a notice that the requested avoidance of tunnels was violated.

  • It is recommended to always check a calculated Route for possible violations.
  • The NoticeCode is part of a Notice object. A list of possible Notice objects can be accessed per Section of a Route .
  • The list will be empty, when no violation occurred.
  • If any possible violation is not desired, it is recommended to skip routes that contain at least one violation.

However, an implementation may judge case by case depending on the requested route options and the actual list of NoticeCode values. More about route options can be found in the next section. Important: For the sake of simplicity, the code snippets in this guide do not evaluate the possible enum values of a notice.

You can detect possible route notices with the following method:

Can FileGDB SDK be made to support custom coordinate systems? - Geographic Information Systems

Built-in atmosphere visualization solution:

  • 3D volumetric clouds
  • Multiple cloud layers
  • Different types of clouds
  • Shadows from clouds
  • Realistic atmosphere rendering with light scattering
  • Sun shafts and volumetric lighting
  • Regional weather
  • Weather effects, including wind affecting objects, rain, fog, lightning, and snow
  • Dynamic LUT-based time-of-day model
  • Sun and Moon, stars map

Built-in water visualization solution:

  • 3D Geometric waves
  • Full spectrum of sea states (Beaufort scale 0-12)
  • Procedural foam and white caps
  • Shoreline simulation
  • Ship wake waves (bow, stern)
  • Seamless underwater transition
  • Subsurface light scattering
  • Local volume subtraction (removal of water from hulls)
  • Local fluid simulation physics
  • Decal projection on water surface
  • Global and local water basins
  • Access to the wave shape info on CPU side
  • Proprietary core technology:
    • Handles up to petabytes of data
    • VRAM-efficient (better than MegaTexture approach)
    • Smart detail caching
    • Optimized for multi-core systems
    • Hundreds of kilometers
    • Binocular/scope support (up to x20 / down to 1 degree FOV)
    • Seamless experience
    • Up to 1 cm / pixel input data resolution
    • Better than 1 mm / pixel detailed resolution
    • Adaptive hardware tessellation
    • Up to 1024 detail materials
    • High-density geometry displacement
    • Geomorphing support
    • Asynchronous data streaming
    • Precise control via fine-tuning parameters
    • Adaptive fetch algorithms (occlusion, camera settings, etc.)
    • Different blending operations between layers
    • Non-destructive edits
    • Mixing layers with different data density (local insets)
    • Unlimited size of layers
    • Unlimited number of layers
    • Storing layers in separate files (VCS-friendly for team collaboration)
    • Runtime modification support
    • Simultaneous iterating on manual edits and procedurally generated data
    • Arbitrary shape
    • Blending with meshes for caves and tunnels
    • Per-pixel details
    • Replacing terrain geometry with arbitrary meshes (useful for digging)
    • Asynchronous mode
    • Forced mode
    • Full control: heights, albedo, masks, opacity
    • A choice between CPU-side and GPU-side APIs
    • Asynchronous data update
    • Undo support
    • Native tilesets import

    Proprietary physics system:

    • Collision detection
    • Raycasting (intersection checking)
    • Comprehensive set of geometric primitives (box, sphere, capsule, cylinder, convex hull)
    • Rigid body physics
    • Various joints, motors and springs
    • Dynamic destruction of objects
    • Vehicle physics
    • Particle system physics
    • Cloth physics
    • Rope physics
    • Ragdoll physics
    • Force fields
    • Fluid buoyancy and interaction
    • Time reverse support
    • Multi-threaded core

    High-level objects available out of the box:

    • Light sources (world, omni-directional, projected, environment probe)
    • Static, animated and dynamic meshes
    • Sky
    • Water (global, mesh)
    • Terrain
    • Grass
    • Particle systems
    • Billboards
    • Decals (mesh, ortho, projected)
    • Performance-optimized clusters
    • Clutter system
    • Volumetrics (box, omni, sphere, projected)
    • Fields (animation, spacer, shoreline)
    • Players: 1st person, 3rd person
    • 3D text
    • Sound sources and reverberation zones
    • Navigation meshes and obstacles
    • Geodetic pivot
    • Support for multiple 3D sound sources
    • Streaming of sounds
    • HRTF (Head-Related Transfer Function), binaural audio simulation
    • Doppler effect
    • Sound occlusion
    • Different types of attenuation
    • Multiple reverberation zones

    Proprietary Graphical User Interface, works inside of the application window.

    • Library of widgets
    • Skin customization
    • Support for localization
    • Support for projection onto 3D surfaces
    • Pathfinding (navigation meshes, obstacles)
    • Spatial triggers
    • Per-surface logical property system
    • WYSIWYG (What You See Is What You Get)
    • Industry standard navigation with customizable controls layout
    • Asset management system
    • Advanced world-building tools
    • Multiple snapping options
    • Nested references
    • Multi-selection operations
    • Component System integration
    • Support for collaborative teamwork
    • Scene hierarchy control
    • Materials/property/component editors
    • Flexible UI
    • Tracker tool (timeline-based animation sequencer)
    • Spline Graph editor (tool for creating roads and ropes)
    • Impostor Creator (generation of far-distance LOD's)
    • Image-processing utilities
    • Cleaner (cleaning of unused assets)
    • Build tool (project assembly based on the asset dependency graph and a list of arbitrary files)
    • Video grabber (creating high-quality screenshots and video sequences)

    C++ API compatible with up to C++14 standard: MS VS 2015 / 2017 / 2019, gcc 4.8+

    Proprietary scripting language

    • HLSL (DirectX shaders)
    • GLSL (OpenGL shaders)
    • UUSL (Unified UNIGINE Shader Language)

    Performance-optimized system for placing very large amounts of objects in the scene.

    By default, game engines use a single-precision floating-point format to store the transformation of an object in the virtual scene (32 bit per axis).

    Float precision limitations are noticeable on scenes larger than 10x10 km (from a first-person perspective) due to the accumulation of positioning errors, so double-precision (64 bit per axis) should be used for anything larger to maintain accuracy.

    The maximum double-precision coordinate values are effectively 536,870,912 times larger than for the 32-bit float precision. This can be very useful when you need to calculate very large numbers (e.g. the distances in space), or, conversely, very small numbers (e.g. the distances in microcosm).

    UNIGINE features a 64-bit double-precision floating-point format (instead of the 32-bit single-precision one) to define coordinates of objects in the virtual scene. Therefore, it is possible to create highly detailed virtually unlimited worlds.

    Global terrain is a virtually limitless terrain representing a certain fragment of Earth's surface. It can be generated on the basis of ordinary raster images and/or GIS data. In case of using GIS data, appearance of the global terrain object is determined by the accuracy and availability of geospatial data. It should be noted that there are areas of Earth's surface with only low-resolution data available or even no geospatial data at all.

    This type of terrain can be successfully used for flight simulators: most of the time the plane remains at a very high altitude and low-resolution data is sufficient. High-resolution data is necessary only around landing and take-off areas.


    A beacon is a Bluetooth low energy device that is physically placed in a location. Each beacon broadcasts an identifier to the area around it using a low-power radio. When a mobile device is near a beacon, the mobile device receives the identifier and detects that the device is near the beacon. Location administrators add beacons to sites and zones to define areas where the presence of mobile devices are detected.

    Acoustic Campaign supports iBeacons. When you configure an iBeacon in d evice location awareness , you specify a Proximity UUID, major number, and minor number that mobile devices use to identify the beacon.

    Global Mapper and LiDAR Module SDK v19.1 Now Available with New 3D Mesh Generation Capabilities

    Hallowell, Maine – March 20, 2017 – Blue Marble Geographics ( is pleased to announce the immediate availability of version 19.1 of the Global Mapper Software Development Kit (SDK) along with the accompanying LiDAR Module SDK. Incorporating many of the enhancements that were introduced in the recently released desktop version of the software, this powerful developer’s toolkit provides software engineers with the means to embed the latest geospatial technology into their custom applications. Among the highlights of the version 19.1 release are the addition of a script command for generating a point cloud, orthoimage, or 3D mesh from overlapping UAV images support for importing and exporting AutoCAD 2018 DWG files and a new option to spatially sort poorly organized LiDAR files.

    For over two decades, Blue Marble’s affordable, user-friendly GIS software has been meeting the needs of hundreds of thousands of satisfied customers throughout the world. Users come from all industries including software, oil and gas, mining, civil engineering, surveying, and technology companies, as well as government departments and academic institutions.

    Global Mapper is an affordable and easy-to-use GIS application capable of displaying, converting, and analyzing virtually any type of geospatial data. The Global Mapper SDK and LiDAR Module SDK provide software developers with a toolkit for accessing much of this functionality from within an existing or custom-built application. The SDK also enables the creation of custom toolbars and extensions to enhance the data processing and analysis functionality of the standard version of Global Mapper. This capability allows in-house developers to create a unique version of the software to meet their specific needs and requirements.

    The 19.1 version of the SDK expands on improvements made in preceding releases with many new and updated features and functions. These improvements include several advanced LiDAR and point cloud processing tools, such as automatic spatial point cloud sorting that results in faster rendering and analysis support for reading and writing LAZ (LasZip) files with the LAS 1.4 fields and, mirroring the functionality of the software’s new Pixels-to-Points tool, a new option to create a script for generating a point cloud, orthoimage, or 3D mesh from overlapping UAV images.

    Also added for this release is the option to import and export AutoCAD 2018 DWG files support for several new UK online data services and performance improvements in the GM_DrawLayerList process with multiple threads called simultaneously rather than one thread at a time.

    “Global Mapper is redefining GIS software by offering the perfect balance of utility and affordability,” stated Patrick Cunningham, Blue Marble President. “Software developers are quickly learning that the powerful data processing capabilities of the application can be easily integrated into a custom desktop or cloud-based development project. The Global Mapper SDK offers unmatched data format support, analysis capability, interoperability, and usability in a truly low-cost package.”

    For a complete list of new features and enhancements or to download the Global Mapper SDK today, visit:

    About Blue Marble Geographics: Celebrating its 25th anniversary in 2018, Blue Marble Geographics is a pioneer in the development of powerful and innovative geospatial software. Widely regarded for its expertise in coordinate conversion and file format support, Blue Marble’s products include Geographic Calculator, the paradigm for highly accurate spatial data conversion and advanced projection management Global Mapper, a fully-functional and affordable GIS application and the Global Mapper LiDAR Module, a suite of powerful point cloud processing tools.

    Mulesoft HERE Geocoding Assets

    Click the plus sign on the right side of the HTTP Listener to connect it to a new component in the flow. Filter the list to see only the HERE geocoding assets:

    Although our example project uses more than one HERE asset, let’s focus on the HERE Geocoder API - Forward method:

    We now connect this asset at the end of the HTTP Listener, within the geocode flow.

    The HERE Geocoder API - Forward asset configuration is a bit more complicated than the one for the HTTP Listener. But, even so, we’re just providing the minimal set of parameters so this service can run our request. Notice in the images below how we filled in the configuration parameters:

    Format tells Anypoint to return the result in JSON format.

    App Id and App Code are my secret HERE app identification codes. You can get yours after you register as a new developer on the HERE Developer website.

    Searchtext was set to attributes.queryParams.query . This is an expression that takes the value within the query string in the HTTP request made by the client.

    The API pipeline first passes the HTTP Listener payload data to the HERE Geocoder asset. The HERE component makes a request to HERE Location Services, which returns JSON code like the following:

    If the HERE Geocoder asset is the last component in your flow, this JSON code is what your client app will receive once your MuleSoft API call returns.

    Handling eventually consistent data

    Geo-redundant storage works by replicating transactions from the primary to the secondary region. This replication process guarantees that the data in the secondary region is eventually consistent. This means that all the transactions in the primary region will eventually appear in the secondary region, but that there may be a lag before they appear, and that there is no guarantee the transactions arrive in the secondary region in the same order as that in which they were originally applied in the primary region. If your transactions arrive in the secondary region out of order, you may consider your data in the secondary region to be in an inconsistent state until the service catches up.

    The following table shows an example of what might happen when you update the details of an employee to make them a member of the administrators role. For the sake of this example, this requires you update the employee entity and update an administrator role entity with a count of the total number of administrators. Notice how the updates are applied out of order in the secondary region.

    Time Transaction Replication Last Sync Time Result
    T0 Transaction A:
    Insert employee
    entity in primary
    Transaction A inserted to primary,
    not replicated yet.
    T1 Transaction A
    replicated to
    T1 Transaction A replicated to secondary.
    Last Sync Time updated.
    T2 Transaction B:
    employee entity
    in primary
    T1 Transaction B written to primary,
    not replicated yet.
    T3 Transaction C:
    role entity in
    T1 Transaction C written to primary,
    not replicated yet.
    T4 Transaction C
    replicated to
    T1 Transaction C replicated to secondary.
    LastSyncTime not updated because
    transaction B has not been replicated yet.
    T5 Read entities
    from secondary
    T1 You get the stale value for employee
    entity because transaction B hasn't
    replicated yet. You get the new value for
    administrator role entity because C has
    replicated. Last Sync Time still hasn't
    been updated because transaction B
    hasn't replicated. You can tell the
    administrator role entity is inconsistent
    because the entity date/time is after
    the Last Sync Time.
    T6 Transaction B
    replicated to
    T6 T6 – All transactions through C have
    been replicated, Last Sync Time
    is updated.

    In this example, assume the client switches to reading from the secondary region at T5. It can successfully read the administrator role entity at this time, but the entity contains a value for the count of administrators that is not consistent with the number of employee entities that are marked as administrators in the secondary region at this time. Your client could simply display this value, with the risk that it is inconsistent information. Alternatively, the client could attempt to determine that the administrator role is in a potentially inconsistent state because the updates have happened out of order, and then inform the user of this fact.

    To recognize that it has potentially inconsistent data, the client can use the value of the Last Sync Time that you can get at any time by querying a storage service. This tells you the time when the data in the secondary region was last consistent and when the service had applied all the transactions prior to that point in time. In the example shown above, after the service inserts the employee entity in the secondary region, the last sync time is set to T1. It remains at T1 until the service updates the employee entity in the secondary region when it is set to T6. If the client retrieves the last sync time when it reads the entity at T5, it can compare it with the timestamp on the entity. If the timestamp on the entity is later than the last sync time, then the entity is in a potentially inconsistent state, and you can take whatever is the appropriate action for your application. Using this field requires that you know when the last update to the primary was completed.

    Legion Data Store Application Programmer Interface (API)

    Legion provides a simple Object-Oriented API to the Data Store, allowing applications to interface with the framework while shielding the application from the details of double buffering. Large numbers of entities can be simulated without concern for locking or synchronization issues. Implementing the Legion API does not, however, impose a requirement that the application use multi-threading. Even applications that are not multi-threaded can use the framework. Single-threaded applications will just not get the full performance benefit of this part of the Legion architecture.

    SuperGIS Mobile Engine – Mobile GIS Developer Objects

    March 19, 2009 - PRLog -- SuperGIS Mobile Engine is a Software Developer Kit (SDK) based on .NET Compact Framework (.NET CF). It allows programmers and developers to rapidly create diversified mobile GIS applications which can be operated in any hand-held devices that support .NET CF. During the operating procedure, developers can employ Visual Studio .NET, Delphi 2005 or other development environments which support .NET CF to design and create the mobile GIS applications that fit users’ personal needs. In addition, SuperGIS Mobile Engine offers many objects and controls in order to fulfill various demands of the developers. Developers can utilize not only all the libraries built in .NET CF but also the objects and controls within SuperGIS Mobile Engine to develop the applications.
    In the designing stage, SuperGIS Mobile Engine provides a simple and user-friendly developing process for the developers. The basic map browsing functions can be produced quickly by means of this setting, in which all developers need to do is to drag the controls to the forms and set related functions during the designing stage. This process will reduce inconvenience and hassles when developers have to directly write the codes. With this setting, developers can deploy the applications to hand-held devices and operate them in a simple way. Take Visual Studio .NET for example. Firstly, the developers have to establish a smart device application project in Visual Studio .NET. Then, the controls as well as objects built in SuperGIS Mobile Engine need to be added to the form. After the related references and settings are created in the project, the various functions can be established in the application easily.

    The core assemblies of SuperGIS Mobile Engine
    SuperGIS Mobile Engine provides 13 core assemblies. The developers can flexibly increase suitable functions to develop mobile GIS applications according to their specific demands.
    1. GeneralMap: this assembly allows feature layers, raster layers, and map elements to be added on the map. The users can hence record map data by means of map layers and also make additional changes on the map display.
    2. Symbol: the assembly controls feature display and includes 6 types. They are SimplePointSymbol, SimpleLineSymbol, SimpleFillSymbol, SimpleTextSymbol, PictirePointSymbol, and PictureFillSymbol.
    3. Annotator: the annotations can be written on the map through this assembly. These explanatory notes can be designed to various shapes, be rotated to different angles, and also be overlapped and duplicated.
    4. Element: the assembly supports the user to add map elements, such as Compass, ScaleLine, and AlternatingScaleBar, on the map.
    5. FeatureClass: attributes of layers can be stored and retrieved by this assembly, so that the user can read any data on the data row easily and draw the data on the map according to their attributes.
    6. RasterClass: by this function, the user can retrieve data of interest from the raster matrix in terms of the characteristics of raster layers.
    7. FeatureRenderer: this assembly supports the user to draw features in 3 ways, which are SimpleRenderer, SimpleClassRenderer, and SimpleUniqueRenderer.
    8. RasterRenderer: this assembly allows the user to draw raster class data in 3 ways, which are RibbonRenderer, ColorTableRenderer, and RGB (RGBRenderer) .
    9. FeatureFilter: with this function, the needed information can be searched and filtered easily from a great deal of data. There are 5 ways in this assembly, inclusive of Expression Filter, Binary Logic Filter, Binary Spatial Filter, Binary Comparison Filter, and Feature ID Filter.
    10. CoordinateSystem: this assembly helps the user to set the coordinate information, defines the parameters, or to build another coordinate system. In addition, this assembly offers some interfaces for the user to change different coordinate systems.
    11. Geometry: on map display, the drawing, editing, and modifying of geometry need to be operated by this assembly. There are several categories in the assembly in terms of their appearances, including SGPoint, SGMultiPoint, SGLineString, SGMultiLineString, SGPolygon, SGMultiPolygon, SGGeometryCollection, and Envelope.
    12. MapControl: this assembly contains controls and layer lists. Map display and computer mouse are also operated and controlled by this assembly.
    13. GPS Control: this assembly consists of three interfaces, IGpsconnection, IGpsparser, and IGpsdisplay. IGpsconnection connects with GPS data source to read the data. IGpsparser analyzes GPS data stream in compliance with the designate data format, in order to obtain attributes like longitude and latitude. IGpsdisplay is an interface to reveal the receiving condition of satellite signals in graphs.

    Case study of SuperGIS Mobile Engine
    SuperGIS Mobile Engine can be developed widely and applied to various mobile GIS applications, such as tourism guide, field survey, emergency aid, etc. For instance, ‘SuperGIS Mobile Tour’ is one of the applications developed from SuperGIS Mobile Engine, which provides many objects and controls in order to rapidly serve the following functions.
    1. Map display
    MapCtrl is utilized in SuperGIS Mobile Engine to display maps. It supports not only the feature and raster layers in many formats, but also the feature legends that can be self-defined by users. When importing layers, developers can either add layers directly by writing program codes, or they can also employ SuperGIS to edit layers, produce a slr file, and then utilize SuperGIS Mobile Engine to read and import maps on the smart device. Developers, however, have to check distinct paths of files coming from different devices, and may need to alter the paths by themselves. For example, on desktop computers, the first character on the absolute path of the file must be an English letter, like ‘C’ or ‘D’ nonetheless, on smart devices, the first character is usually ‘’.
    2. GPS connection
    When GPS Receiver gets GPS signals, developers can read GPS data stream by turning on the respective port. They can further analyze in compliance with the designate format, in order to acquire the data. There are 3 GPS related functions in SuperGIS Mobile Engine, which are connecting the receiver to get data stream, analyzing data stream, and disclosing satellite status.
    3. Spatial relations
    The attributes, such as scenic spot information, travelling routes, and warning area data, which are offered by the tourism system, are all recorded in their respective feature layers. For example, warning area information is recorded in warning area line layer. ISpatialOperator, one of the interfaces of SuperGIS Mobile Engine, supports spatial calculations of geometry. ISpatailRelation, on the other hand, provides various ways of computing spatial relations of geometry. Hence, when the distance between the present coordinate and any of the line features of the warning area is shorter than a specific number, which means that the user approaches the warning area too closely, and the system will automatically display signals or play alerting sounds to warn the user. This function is operated by the spatial calculations and relations of various kinds of geometry.

    The infinite possibilities of SuperGIS Mobile Engine
    The main difference between Mobile GIS and Desktop GIS comes from mobility and wireless communication characteristics of Mobile GIS. Mobility applies Mobile GIS to diversified functions like field survey and navigation systems. Regarding the integration of Mobile GIS with wireless communication, the technique of Internet connection is one of the major influential factors. As the spread of wireless and high-speed Internet, more and more diversified information can be combined with Mobile GIS instantly. The functions and applications of Mobile GIS are meanwhile increased quickly. Mobile GIS thus have infinite possibilities to be more widely developed in the future.

    SuperGeo is a company based on GIS (Geographic Information System), RS (Remote Sensing), and GPS (Global Positioning System) technologies, dedicated in developing and marketing GIS software, and providing professional service to clients around the world.