A GeoSpatial Training Services Blog

As many of you probably know by now, Google Earth Pro is now free!  We’re going to be doing a webinar series covering many of the useful functions of Google Earth Pro.  Today we covered geocoding addresses and importing shapefiles.  A recording of this webinar is available below.

Recording of webinar

Slides from webinar

For more information on our Google Earth classes:

Fundamentals of Google Earth Pro

Mastering KML for Google Earth

Creating Real Time Google Earth Applications (with Python)


February 19th, 2015

Posted In: Google Earth, KML, Network Links

In this brief post I will outline how you can add USGS topographic maps to Google Earth using an ArcGIS Online service.  In a previous post I described how you can use the Add Image Overlay tool to add a single USGS topographic map in a .tiff format.  In this case though we will add a KMZ file generated from an ArcGIS Online service.  Follow the steps below to add

1) Install Google Earth if you haven’t already.

2) Download the Google Earth topo map layer from the ArcGIS Services Directory (it’s the USA_Topo_Maps (MapServer) service).

3) When prompted, save the file to your computer.  It should be called USA_Topo_Maps.kmz.

4) Find and double-click the file. It will open automatically in Google Earth.

5) At this point, you’re essentially done and can begin zooming in and out on topo maps.  By default the file will be added to the Temporary Places folder in the Places panel.


At this point if you close Google Earth the file won’t be available the next time you open Google  Earth.  To ensure that the file is available for future use you can click and drag the file to the My Places panel (seen below).  Or you can right click the file and select Save to My Places.

6.  As you zoom in you should be able to see topographic data.  You can also apply a transparency to the layer like you can with all layers in Google Earth.






Click here to subscribe to my mailing list and receive these articles in your email



July 23rd, 2014

Posted In: ArcGIS Online, Google Earth, Image Overlays, Network Links

Arc2Earth Version 3 is now available as a general release.

Do you need to get your GIS data online in a hurry? Or export your complex maps in KML format for viewing in Google Earth?
There’s no need for servers or server software, all you need is a single ArcView seat and Arc2Earth. Export locally, directly to Amazon S3 or to your own Arc2Earth Cloud instance. Click and you’re done.

Arc2Earth is the premier ArcGIS extension for exporting and importing your data into the leading GeoWeb formats. Import or Export complex KML files, map tile caches or use the new Cloud services to host your data online. And new at Arc2Earth V3, live editing with Cloud Layers. Upload and manage your data in an Arc2Earth Cloud, Google Maps Data or Open Street Map.

GeoSpatial Training Services is an authorized reseller of Arc2Earth. More information on Arc2Earth here.


May 18th, 2010

Posted In: Arc2Earth, ESRI, GeoSpatial Training Services, Google Earth, Google Maps, OpenLayers

The folks at Arc2Earth have been busy working on V3 of their popular Arc2Earth software for converting and publishing your ArcGIS data to view in Google Earth, Google Maps, Bing, and OpenLayers.

V3, which will be released in beta soon, will include many exciting new features including the new Arc2Earth Cloud Services, a new free Community version of the software, as well as much more functionality.

Community Edition
V3 will include a Free version of Arc2Earth called Community Edition.  You will be able to use this edition for both commercial and non-commercial projects alike as well as install it on as many computers as needed.

This version has limits on what can imported and exported but we feel that it will be very functional for many of your projects.

This version can also be used to edit Arc2Earth based Cloud Layers.

Arc2Earth Cloud (beta)
Each A2E Enterprise user can create their own Google AppEngine accounts for hosting their data. Arc2Earth maintains the software on these clouds but the billing is handled directly through the user and Google.

Each A2E Cloud instance contains APIs for vector and raster storage and querying as well as partial compatibility with ESRI ArcGIS Server REST API (9.3, 9.4 when its released). There will be limits on the number of maps and layers you can load with each A2E Enterprise serial number however it will be easy to add serial numbers to existing clouds for more capacity.

Each Cloud contains Datasources, Tilesets and Viewers that represent your vector, map tile and application files. All of the data is accessible from a login controlled RESTful API. For example, you can create a new Datasource and immediately start populating it with Feature data. ArcMap users that have your Datasource loaded as a Cloud Layer will see your edits as they happen. Datasource API

Google AppEngine is designed for instant scalability as well as true utility based billing (only pay for what you use in addition to generous free daily limits). We believe the significance of the Cloud is mainly the extensive CapEx/OpEx savings for users. For instance, this simple Parcel Mapplet has been running for over a month with an OpEx cost of $0.00 (OpEx includes CPU time, storage, bandwidth and most importantly, IT personnel to keep it running)

Google Maps Data API
In addition to A2E Clouds, we will also be enabling editing from other providers as well. The first are Google MyMaps layers powered by the new Google Maps Data API.

Users can import/export directly into any new or existing MyMap and also perform live edits on any loaded layer as well. Live edits are handled as an interactive graphics annotation layer in ArcMap. If a Google Map only includes features of the same type, they can also be edited using the Cloud Layers interface above.

Other New Features of V3

  • Arc2Earth Cloud Explorer and Cloud Layers
    A new toolbar and explorer window in ArcMap to manage, upload and download your data from the Cloud. It also includes built-in functionality for live editing your Cloud layers (or other Cloud layers you have been granted write access to). Cloud Layers automatically syncronizes a local cache with the online datasource as the user pans/zooms around the map. The layer can then be edited directly in the ArcMap editor and all changes are then saved to back to the Cloud.
  • Google Earth Enterprise Layer Support
    A new feature to convert any ArcGIS layer’s symbology/definition into a GEE Fusion definition. Currently, many GEE users must perform this operation by hand for every change of styling in their ArcGIS systems.
  • Accounts
    Store and use multiple Amazon S3 and Google Accounts for use with your exports and the Cloud. For Amazon Accounts, define the exact Bucket name to use in exports.
  • Embedded Globes (beta)
    A new ActiveView manager takes over the main ArcMap map/layout section and embeds both Microsoft and Google’s maps. Layers in the TOC can then be displayed in real time over the 2D/3D maps (as images only). The new views can also be used on the Page Layout and higher resolution versions of the view can be printed/exported.
  • Map Tile Layer
    The MTL has many bug fixes and enhancements. Yahoo Maps have been added back into the default configuration. Any Cloud tile layer can also be used in the MTL. Also, a new Offline Cache tool has been added so users can download all tile images for a given extent and levels.
  • New Search Window in ArcMap
    Users can type any street address or place location and it will zoom to that area on the map or embedded globe. The initial search window in V3 will be limited to this simple geocoding but there are many enhancements planned.
  • New Command Line
    The Command Line exporter (A2EExporter.exe) has been rewritten and includes many new features for creating batch exports and including them in your own workflows. The Map Tile exporter also includes a cutter parameter to specify how many workers for the export and then automatically splits the extent for each worker.

More Information
GeoSpatial Training Services
is an authorized reseller of Arc2Earth software.  For more information please visit our site or contact us directly at sales at


January 13th, 2010

Posted In: Arc2Earth, GeoSpatial Training Services, Google Earth, Google Maps, OpenLayers

GeoSpatial Training Services will be releasing a new instructor guided, Internet based course in the near future.

Google Earth and ArcGIS Integration for Local Government Users

Most local government agencies have large collections of GIS data in various formats including shapefiles, geodatabases, grids, tins, CAD, and others. Sharing this data with colleagues and the public is often a challenge. Before distributing data you have to answer many questions. Does my end user have the appropriate software to view the data? Do they know how to use the software? Do they understand how to add the data into the viewer? Should I create a web mapping application for end users? Converting your existing GIS data to a Google Earth KML format offers many advantages in terms of data distribution to end users and it also offers many new ways of presenting information. This course, geared specifically for local government GIS specialists, will teach you techniques for converting your datasets, creating compelling and interactive Google Earth displays, and sharing the data with your end users.


  • Register your entire GIS group for $199.00 (up to 8 people)
  • This course makes extensive use of Arc2Earth. You will be provided with an evaluation copy of Arc2Earth to use during the course
  • Exercises and data will focus on typical local government datasets


  • Benefits of Converting ArcGIS Data to Google Earth Format
  • What Google Earth Version Should I Use?
  • KML: The Language of Google Earth
  • Tools for Converting ArcGIS Data to Google Earth
  • The Easy Stuff: Convering Points, Lines, Polygons, and Graphics
  • The Not So Easy Stuff: Displaying Spatial Analyst Grids, Aerial Imagery, and Other Image Files
  • The Hard Stuff: Techniques for Displaying Large Datasets
  • The Fun Stuff: 3D Data Displays, Geography with a Time Element, Info Balloons with HTML, Images, and Video, Guided Tours
  • Eye Candy: Creating Legends and Logos
  • Google Earth without an Internet Connection
  • Techniques and Tools for Sharing Google Earth Data with End Users

November 5th, 2009

Posted In: Arc2Earth, ESRI, GeoSpatial Training Services, Google Earth, KML

Recently Google announced their Base Map Partner Program for “authoritative” organizations to share their vector data sources as part of the improvement process for base maps in Google Maps, Google Earth, and Google Maps for Mobile.

Currently Google is accepting the following data sets:

  • Parks and Protected Areas
  • Points of Interest (hospitals, tourist attractions, government buildings)
  • New Developments and Construction (residential, commercial)
    • Road Networks
    • Geocoded Addresses
    • Parcel Boundaries
  • Bicycle and Pedestrian Paths and Road Facilities

The USGS and USDA Forest Service have already provided improved park and water body data and obviously a number of unknown providers have supplied parcel data.  The addition of parcel data to Google Maps has initiated a very interesting post and conversation regarding the source(s), accuracy, and legality of this data.

I should also mention that Google will no longer use TeleAtlas map data for the U.S. and will instead use its own data sources.


October 9th, 2009

Posted In: Google Earth, Google Maps

GeoSpatial Training Services is an authorized provider of GIS courses that can be used to fulfill the educational achievement points section for achievement or renewal of your GISP certification through the GIS Certification Institute.  We recently updated the number of hours that can be achieved by completing each of our courses.  Please see below for a list of courses that we offer which are authorized by GISCI.


Mastering the ArcGIS Server JavaScript API – 80 hours
ArcGIS Desktop 101 – 40 hours
Building Web 2.0 Mapping Applications with ArcGIS Server and Google Maps - 80 hours
GIS Programming 101: Mastering Python for Geoprocessing in ArcGIS - 80 hours
Integrating ArcGIS Desktop and Google Earth - 15 hours
Mastering Python for Geoprocessing in ArcGIS - 40 hours
Programming ArcObjects with .NET – 40 hours
Programming ArcObjects with VBA – 40 hours
Advanced Google Maps API Programming - 20 hours
Building Rich Google Maps Interfaces with Dojo - 20 hours
Introduction to the Google Maps API - 20 hours
Dynamic Google Earth Applications- 20 hours
Building Web Based Google Earth Applications – 10 hours
Mastering KML for Google Earth – 20 hours


September 24th, 2009

Posted In: ESRI, GeoSpatial Training Services, Google Earth, Google Maps

GeoSpatial Training Services is an Authorized Reseller of Arc2Earth.  For more information on Arc2Earth please contact us at:  sales at

Brian Flood and the folks over at Arc2Earth have been really, really busy on the release of Arc2Earth Cloud Services.

Arc2Earth Version 2.1 Released
Arc2Earth Version 2.1 was recently released, and contains lots of new features and bug fixes.  Contact sales at for an evaluation version of the software.  You can see the brochures for Arc2Earth Standard and  Publisher.  Version 2.2 will contain a user interface for creating and consuming Arc2Earth Cloud Services….which brings me to……

What is Arc2Earth Cloud Services?
As described by Brian Flood

After exporting and publishing their data (from Arc2Earth), one of the first questions our clients usually ask is: “This is great but is there any way to search the data?” or “Can I click on the features?” For the most part, once our export took place, we had to rely on the functionality of Google Earth, Google Maps or MS VE for ad-hoc searching/clicking or provide additional custom programming to enable an application beyond the exported data. The former will certainly get better over time but is somewhat lacking right now and the latter, while lucrative, does not fit with the original vision of “one click” export to publish your data to the web.

So, another model is needed to provide this additional, runtime functionality to those users who do not have the time, expertise or funding for their own servers. To fulfill these needs, we will be providing an online service that allows users to host their maps and layers online while providing REST based access for queries, editing and spatial analysis (limited as it may be). We will also provide a new desktop application that automatically synchronizes data between your local drive and online services. As edits occur online, they are automatically pulled down into your original source data (optionally of course).

What can you do with Arc2Earth Cloud Services?
Once again as described by Brian

ArcMap Integration – create and edit your maps directly from ArcMap using some new A2E toolbars and windows. You can add “cloud layers” directly to your local map and then use the native editing tools in ArcMap to make changes. Every resource in your cloud instance is controlled by login and ACL lists so you can create groups users who all work remotely on the live data. There are also bulk upload/download tools so you can get a fresh copy of any layer anytime you need to perform heavy lifting GIS analysis.

Datastore – I can’t tell you how much time I’ve spent going over the merits of a distributed Big Table datastore (like Google App Engine) versus running clusters of PostGIS on Amazon EC2. I am hardly qualified as an authority on the matter but the reality is that both have positives and negatives and in the end, a hybrid between the two seems to work well. This topic deserves several posts in and of itself so in the future I will try to layout why we chose GAE’s Big Table for our cloud’s data storage and how we went from geohash to quadkeys to finally packing grids of data separately into Big Table (or “quadtrees full of r-trees” as I like to call them). It is no replacement for a good RDBMS for sure but it is highly optimized for distributed access and querying of the spatial data, the exact kind of access seen in todays web clients like Google Earth. The automatic scalability of GAE (as long as you play by their rules) is both extremely attractive and cost effective for small company such as ours.

KML – The KML engine used in the service can be applied to any resource that serves features. There are a couple of endpoints where KML can be returned but in the samples below, it is the “search” resource. All aspects of the KML (labeling, balloon templates, styling, height, filtering etc) are applied at runtime and streamed out. In general, Arc2Earth will always be able to create and serve static files but the focus in the Cloud is the dynamic creation of KML. What’s even better is that any of these endpoints support REST parameters that allow you to control this from the client.

Viewers – Google Earth, Flash Editor, ArcMap, Android, OpenLayers – we’ll start with the basics and keep adding viewers. and since we are still compatible with ArcGIS Server REST api, you will be able to use those scripting and Flex libraries as well.

Here is the brochure for Arc2Earth Cloud Services.


January 25th, 2009

Posted In: Arc2Earth, ESRI, GeoSpatial Training Services, Google Earth

In the last post we began a five part series detailing the construction of a wildfire mashup mapping application.   As you may recall, in the current session of our “Building Web 2.0 Mapping Applications with ArcGIS Server and Google Maps” course we are building a wildfire mashup application that combines various data sources and formats into a narrowly focused application built with the ArcGIS Server JavaScript Extension for the Google Maps API and the Google Maps API.  This simple application displays data for the San Diego Witch Fire which occurred in October, 2007.

In the second post in this series we will build on what we accomplished in the first post by adding the polygon that defines the perimeter of the Witch fire to the Google Map that we developed in the first post.  The perimeter of the Witch fire will be pulled from an ArcGIS Server instance hosted by ESRI.  We will access the USGS_FirePerimeterAlt_SoCal_2D map service provided by ESRI through a sample ArcGIS Server instance that displays the boundaries of recent major wildfires in Southern California.

If    If you’d like to construct your own instance of this application please feel free to do so.  You’ll need to read the first post for details on where you can download the supporting files.

Completing Section 2: Add the Witch Fire Perimeter
In this section you will access a dynamic map service provided by ESRI through an ArcGIS Server instance that displays the boundaries of recent major wildfires in Southern California.
<!–[if gte mso 9]> Normal 0 false false false EN-US X-NONE X-NONE <![endif]–><!–[if gte mso 9]> <![endif]–>

  • Examine the details of the USGS_FirePerimeterAlt_SoCal_2D map service.  Note: This service is no longer being supported by ESRI.  However, the concepts presented in this post are still quite valid.  Open a web browser and navigate to this address: a few moments to familiarize yourself with this map service by viewing the data through Google Earth, ArcMap, or ArcGIS Explorer.  Simply click one of the links at the top of the page.  I recommend viewing the data in Google Earth.  You will need to adjust the transparency of the data layers in Google Earth to be able to see the underlying base map, but you should see the boundaries of major wildfire events.  One of these boundaries represents the San Diego Witch fire.
    Now return to the web page containing the details of the map service.  You will notice that this map service contains a single layer called ‘Recent Fire Perimeters’.  Click the link provided by this layer.  This is a polygon feature layer containing a number of attribute fields, and supports the ability to perform queries.  Take a few moments to examine the available fields.  In this step we will query the ‘Fire_Name” field to obtain only the Witch Fire boundary.
  • If necessary, open the GMaps_AGIS_Mashup.htm file that you used to build the initial map we created in the first post.
  • Add a reference to the JavaScript Extension for Google Maps as well as a reference to the ArcGIS Server JavaScript API. Just below the line of code that serves as a pointer to the Google Maps API you will want to add the following lines which serve as references to the two libraries.  It is necessary to include a reference to the ArcGIS Server JavaScript API because we are going to use some of the Dojo functionality included to build our grid that will display the properties.
  • Create variables to hold instances of QueryTask, Query, MapExtension, and GOverlay
    Just below the line where you created the gmap variable (var gmap = null) please add the following lines of code:
  • Create an instance of MapExtension
    The MapExtension class in the ArcGIS Server Google Maps Extension can be used to display the results of ArcGIS Server tasks such as queries that have been submitted to the server.  Inside the initialize function add the following lines of code just below the line ‘gmap.setCenter’.
  • Create a new instance of QueryTask that points to the ‘Recent Fire Perimeters’ layer in the USGS_FirePerimeterAlt_SoCal_2D map service that we examined.  Notice that you will need to refer to this layer through its index number which is 0.  As you probably already know, layers in an ArcGIS Server map service are zero based so the first, and in this case only, layer has an index number of 0.
  • Create a new instance of Query
    A Query object is used to set the parameters that will be used in your query.  These parameters are created as properties of a Query object and are passed into the QueryTask.execute method.  For now, we’ll simply create an instance of Query.  Its properties will be set later.
  • Double check you code to ensure that it appears as follows:
  • Create function to query the ‘Recent Fire Perimeters’ layer.
    For this application we only want to display boundaries of the Witch Fire so we are going to create a function that performs an attribute query on the layer.  Additionally, when we initially display the boundary we only want to do so if the perimeter of the fire area is contained within the extent of the view.  Therefore, we are going to be performing a combination attribute and spatial query.  This will give you some practice setting up and executing both attribute and spatial queries.Create a new function called ‘executeQueryFire()’ just below the initialize function as seen below.

    Capture the current map extent and save it to a variable called ‘bounds’.  This extent will be used as the input for your spatial query.

    Remove any overlay graphics that currently exist on the display.

    Set the input parameters of the query as follows:

    The ‘queryGeometry’ property is used to set the spatial feature used in the query which in this case is the current extent of the map as saved in the ‘bounds’ variable.  The ‘queryGeometry’ property is used in conjunction with the ‘spatialRelationship’ property to define the spatial query.  In this case we are using a ‘CONTAINS’ relationship which will essentially query the ‘Recent Fires Perimeter’ layer for all fire boundaries that are contained within the current map extent.  There are a number of other spatial relationships that you can use in addition to ‘CONTAINS’.  A full listing of the properties can be seen below.

    The ‘where’ property defines our attribute query to search for only features whose FIRE_NAME field contains a value of ‘Witch’.  So, the combination of our spatial query (find all polygon fire boundaries completed contained within the current map extent) and attribute query (find all fire boundaries with a fire name of Witch) are combined in this case.  We are also setting  the ‘returnGeometry’ property to true which indicates that the results of the query should return the geometric description of each feature so that they can be plotted as graphics on the map.  Finally, the ‘outFields’ property defines the fields from the layer that should be returned.  You can see the fields that have been returned in the figure below.

  • Execute the Query
    The last thing that we need to do in the ‘executeQueryFire’ function is execute the query.  As I mentioned earlier, the parameters defined using the properties on our Query object are used as input to the QueryTask.execute function.  Add the following line of code to the bottom of the ‘executeQueryFire’ function.

    Notice that we are passing in the ‘queryFire’ object which represents the input parameters of our query.  In addition, we are also setting the ‘asGeoXml’  option to true which will result in the results being returned as KML as opposed to a RecordSet.  Finally, we supply the name of the callback function which will run after the query has been executed.  This function also receives the results of the query.  In our case this function is simply called ‘callbackFire’.

  • Examine the ‘executeQueryFire’ function
    Please double check your function to see that it appears as follows:
  • Add the ‘callbackFire’ function
    Add the following code block just below the ‘executeQueryFire’ function.

    This function accepts the results of the query which is in a KML format in this case and plots the data to the map using MapExtension.addToMap.

  • Examine the button code that initiates the query
    Near the bottom of your file you will see the following code block which was pre-written for you.  The first button, called ‘Add Witch Fire’ initiates the query that we just defined.  The ‘onclick’ event of this button has a small snippet of code that called the ‘executeQueryFire’ function each time the button is clicked.
  • View the current state of the application
    Save your file, and point your web browser to the GMaps_AGIS_Mashup.htm file you’ve altered.
    You will need to Refresh the screen if your browser is already pointing to this address.  Click the ‘Add Witch Fire’ button and in a few seconds you should see the figure below.

More Information
The next session of our “Building Web 2.0 Mapping Applications with ArcGIS Server and Google Maps” is scheduled for January 12th – February 12th.  You can register on our website or by contacting eric at  See the full course syllabus.


November 24th, 2008

Posted In: ESRI, GeoSpatial Training Services, Google Earth, Google Maps

I just wanted to share a cool way that you can display your existing KML files inside a Google Maps application using the GGeoXML class from the Maps API. Many organizations have pre-existing KML files that were created for use within Google Earth, and the GGeoXml Maps API class provides a really simple means for also displaying this data in Google Maps as a GOverlay. Although we are specifically using this class to read a KML file in this example it is worth noting that this class can be used to read any XML file.

In this example, we’re displaying an auto-updating KML file containing Global MODIS Hotspots provided by the Fire Information for Resource Management System (FIRMS) at the University of Maryland. FIRMS integrates remote sensing and GIS technologies to deliver global MODIS hotspot/fire locations to natural resource manager and other stakeholders around the world. FIRMS is funded by NASA and builds on Web Fire Mapper, a web mapping interface that displays hotspots/fires detected by the MODIS Rapid Response System and delivers near real-time hotspot/fire information to international users.

FIRMS provides several auto-updating KML files for regions around the world. Any of these files can be loaded into Google Earth. What I’ve done is take the Continental USA KML file which is updated every four hours (as are the other files) and dynamically loaded the file into a simple Google Maps application using the GGeoXML class in the Maps API.

Take a look at this example and then I’ll describe how this is done within Google Maps.

From a code standpoint, the Maps API makes this a really easy task which can be done with only a few lines of code. To see the full code for this simple Maps application you can simply right click the web page and click View –> Source. I’ve posted the relevant code below. The initialize function is called when the web page loads. We create a new instance of the GGeoXML class and pass in a parameter to the constructor which contains a pointer to a KML file located on a remote web server. In this case we’re pointing to the Continental USA KML file located on the FIRMS web server. Once we’ve created an instance of GGeoXML we then add it to the map using the addOverlay( ) method on the GMap2 class. In between we have some additional Maps API code which creates the underlying map, centers the map, and adds the map controls.

As you can see, using the GGeoXML class to add pre-existing KML files to your Google Maps application is quite simple and very useful. Even the descriptive balloons contained within the KML file have been ported to info windows in Google Earth. Click one of the fire locations to return specific information about a particular fire.

For more information on the Google Maps API or GeoSpatial Training Services please see our e-learning course entitled “Google Maps For Your Apps” or our “Google Maps Developer Bundle” which is currently on sale as part of our 3rd Year Anniversary Sale.


July 2nd, 2008

Posted In: Google Earth, Google Maps, KML

Next Page »