Archive for January, 2009
GeoSpatial Training Services is an Authorized Reseller of Arc2Earth. For more information on Arc2Earth please contact us at: sales at geospatialtraining.com.
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 geospatialtraining.com 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.Read Full Post | Make a Comment ( None so far )
We recently completed the 5th revision to our “Mashup Mania with Google Maps” e-book. To obtain your free copy of our “Mashup Mania with Google Maps” e-book click the link below.
Our 52 page e-book on the Google Maps API covers everything you need to know about programming Google Maps to create dynamic web mapping applications with one of the hottest mapping technologies. You will learn how to create maps, add map controls for user interactions, programmatically alter the map extent, add points of interest to the map, add custom icons, geocode addresses on the fly, read addresses from a databases, or KML files, and display aerial photography.
New information included in this revision includes:
- Reverse Geocoding
- Street View
- Using MarkerManager and other Google Maps Utility Classes
- Positioning Controls
- Adding KML Files to Google Maps
- Integration with the Google Earth API
To obtain additional information on the Google Maps API please see our e-learning course, “Introduction to the Google Maps API“. In addition, GeoSpatial Training Services also provides a full set of Google Earth and ESRI e-learning courses. Please see our website for more details.Read Full Post | Make a Comment ( 2 so far )
What I’ll cover in this post is the use of MarkerManager for efficiently adding large numbers of markers to your application along with the ProgressbarControl which provides a visual progress indicator for long running operations such as adding large numbers of markers.
Here are a couple of Google Maps Utility examples that you can review. The first is a ProgressbarControl example, provided by Google, and the second is a MarkerManager example that we have created. To see the source code simply right click the page and select View Source. We’ll discuss some of the features of these utility classes below.
The Marker Manager
The Marker Manager is typically used when you need to display a large number of markers on your map.
An instance of MarkerManager can be created in one of two ways. In its simplest form, an instance of MarkerManager can be created simply by passing an instance of GMap2 into the constructor for MarkerManager as seen below.
You can also pass an instance of MarkerManagerOptions into the constructor for MarkerManager to set optional arguments for the instance. MarkerManagerOptions can contain three properties including border padding, max zoom scale, and track markers. Border padding, specified in pixels, sets extra padding outside the map’s current viewport which will be monitored by the manager. Markers that fall within this padding are added to the map, even if they are not fully visible. This tends to improve the performance of small distance panning. The ‘maxZoom’ property is used to set the maximum zoom scale at which markers will be displayed and is used to control marker clutter. You will want to experiment with this property to determine the optimal scale at which markers should appear. This setting will vary depending upon the nature of your data. Finally, the ‘trackMarkers’ setting is used when your application has markers that change position during the application session. A value of ‘true’ specifies that MarkerManager should monitor the movements of the markers. By default, this setting is ‘false’. The MarkerManagerOptions class is an object literal which means that there is no need to create an instance through a constructor. You simply specify a variable name and then specify the settings as seen in the figure below.
Adding Markers to MarkerManager
Individual markers can be added to the MarkerManager in one of two ways. The addMarker() method is used to add a single marker while addMarkers() adds a collection of markers contained within an array. Markers added with the addMarker() method display on the map immediately. However, the more efficient way of using MarkerManager is to add them as a collection of markers. This collection or array is passed to the addMarkers() method along with a minZoom scale and an optional maxZoom scale. The markers will not display on the map until you call the refresh() method.
The ProgressBar Control
The ProgressBarControl class is used to show the progress of a function and is ideal for updating users on the status of long running operations. In this example we are plotting a large number of markers to the map. Users of our application could easily become frustrated if the loading of these markers is too slow. To give them some sense of the progress of the loading we could use a ProgressBarControl to update the status as each marker is loaded. This is a much more user friendly way of delivering our application and will result in less frustration on the part of our users.
Creating a ProgressBarControl
As was the case with the creation of an instance of the MarkerManager class we have two options for creating an instance of ProgressBarControl. The first and simplest way to create this control is to simply pass in an instance of GMap2 to the constructor for ProgressbarControl as seen below.
You can also use an instance of ProgressbarOptions to define ProgressbarControl. ProgressbarOptions include the ability to define a ‘loadstring’ which specifies the string that is displayed to the user when the control is first displayed and before any updates occur along with a ‘width’ property that defines the width (in pixels) of the bar.
Updating the ProgressbarControl
Once the progress bar has been created you can start it with an initial maximum value using the ProgressbarControl.start(number) method which is used to display the progress bar. The value you pass into the ‘start’ method serves as the maximum value that can be reached while the bar is displayed. In our case this equals the total number of fires found in the WitchFireResidenceDestroyed.xml file. You can update the current value of the bar using the ProgressbarControl.updateLoader(step:Number) method which increments the progress bar by the value passed into the ‘updateLoader’ method. In our case, we simply update the value by ‘1’ each time a marker has been added to the array of markers that will be displayed on the map. The value displayed in the progress bar will be in relation to the initial number supplied to the ProgressbarControl.start(number) method.
See our “Introduction to the Google Maps API” e-learning course for more information on the Google Maps API.
Our instructor guided, Internet based course “GIS Programming 101: Mastering Python for Geoprocessing in ArcGIS” has been updated for the ArcGIS 9.3 release.
Our next session of this course is scheduled for February 16th – March 12th.
We have completely revised this course including updated lectures and new exercises for the ArcGIS 9.3 release.
Who Should Attend:
- You need to automate your geoprocessing tasks
- You’ve handled a few tasks in Python, or are just getting started
- You want to become more efficient with your geoprocessing tasks
- You have some AML, Avenue, or VBA with ArcObjects experience
- You need to develop scripting tools that can be shared with others in your organization
In this course you’ll learn
- Python language fundamentals
- How to read and use the Geoprocessor Object Model Diagram in your scripting tasks
- Use the PythonWin integrated development environment
- Integrate ArcToolbox and custom tools into your Python geoprocessing scripts
- Retrieve and create messages from the geoprocessor
- Gracefully handle errors in your scripts
- Obtain descriptive information about your GIS data
- Search for data in your feature classes and tables
- Insert, update, and delete data from feature classes and tables
- Read and write feature geometry in feature classes
- Create lists of data in your script for further geoprocessing
- Create custom script tools that can be integrated with ArcToolbox and shared with others in your organization
- Schedule scripts to run after hours
- Obtain historical geoprocessing information
- Module 1: Getting Started with Python in ArcGIS
- Module 2: Basic Python Language Features
- Module 3: The Geoprocessor ArcObject
- Module 4: Reading the Geoprocessor Object Model Diagram
- Module 5: Accessing Geoprocessing Tools
- Module 6: Tool Messaging, Results and Error Handling
- Module 7: Obtaining Descriptive Information About ArcGIS Data
- Module 8: Using Cursor Objects to Select, Edit, and Add Records to Tables and Feature Classes
- Module 9: Creating Lists of GIS Data
- Module 10: Miscellaneous Objects
- Module 11: Creating Custom Script Tools
- Module 12: Geoprocessing History
- Module 13: Final Project
Each module contains exercise material designed to reinforce the information taught in lecture. In addition, a final capstone project is designed to help you integrate the topics covered in a simulated real-world project. This final project is optional and you are welcome to bring in your own project as a substitute and receive instructor guidance and feedback to help you accomplish your geoprocessing tasks.
For more information please contact sales at geospatialtraining.com.