Pivot for ArcGIS Online

YouTube Preview Image

Late last year Microsoft released the fifth and possibly final version of Silverlight. The most highly publicized improvement was the addition of 3d graphics support. A lesser known improvement was the inclusion of an updated PivotViewer control.

The first edition of the PivotViewer was used in a 2010 prototype entitled mosaic image finder, this app allowed users to display and filter a large collection of satellite imagery. Whilst it may have been technically possible to support dynamic collections, for simplicity, this and most other implementations used static collections.

The second and most recent edition of the PivotViewer is significantly improved. Developers can now bind viewers to dynamic collections and have the ability to style individual items (or tradecards).

The Applications Prototype Lab used the new edition of PivotViewer and the ArcGIS Portal API to render search results from ArcGIS Online. Searching ArcGIS Online for content related to “usa” reveals approximately 3,000 results. Unfortunately these search results can only be browsed ten at a time on www.arcgis.com. With the PivotViewer, all 3,488 map items can be viewed simultaneously or interrogated individually.

To use the live application, click here.

To download the source code, click here.

Contributed by Richie C.

Posted in Uncategorized | Tagged , , , | Leave a comment

Puzzle Map for Silverlight

Puzzle Map for Silverlight

Firstly it was a pleasure to meet many of you at the 2012 Esri developer summit in Palm Springs. If you were unable to attend you will be able to view our group’s presentation via streaming video very shortly. In the meantime you can watch last year’s presentation here (search for “innovation”).

This posting introduces an app premeired at the developer summit called puzzle map. The app is a Silverlight-based web application that cut and splits a regular map into nine jigsaw pieces. A timer in the lower left hand corner displays the time it takes solve the puzzle.

The live application is availble here.

The source code is available here.

This app was inspired by the Microsoft Surface v1 sample called scatter puzzle.  However, as a substitute for the Surface SDK, we used the open source multi-touch library for Silverlight hosted on codeplex. This library in turn makes use of the manipulations and inertia sample available from Microsoft’s download center.

When the puzzle is formed and shatters, each piece is actually an individual map that has been clipped (see uielement.clip) to conform to the shape of a puzzle piece. To demonstrate that each piece is a real map, hold down the space key and dragging your mouse inside the puzzle piece. This action will invoke standard panning operation, and because all pieces are linked, all other pieces will pan accordingly.

Hope you find this app intriguing, challenging and fun!

Contributed by Richie C.

Posted in Uncategorized | Tagged , , , , , , | Leave a comment

Mapping Health Indicators using Dynamic Layers in ArcGIS Server 10.1

ArcGIS Server 10.1 will introduce dynamic layers, which is the ability to change a map’s symbology (color, fill pattern, and outline characteristics, among others) on a per-request basis. Those who have used ArcIMS in the past may remember this capability fondly.

This Flex-based client application uses dynamic layer functionality, along with a variety of data filtering techniques, to let users explore relationships among various attributes in the data. It was built around data intended for users in the health care industry, but it could be used with any dataset containing numeric attributes.

You can find the application here.

Requirements

This application first and foremost requires map services running on an instance of the next release of ArcGIS Server–version 10.1. Also, due to technical reasons explained later in this post, the Firefox browser will probably produce unwanted network warnings as you use the application. Either use a different browser or apply the configuration-setting workaround to Firefox, as detailed below. (This issue should go away once the Flex API version 3 is released.)

The app currently requires a mapping service with a main layer (having some numeric attributes for viewing) and a background backing layer (with geometry only).

How to use the application

The map service behind this application stores a variety of health-related numeric attributes for the counties in the United States. The application can show up to four maps at one time; each one depicts one of the available numeric attributes in the map service. It can show a default attribute at load-time; in this case, it loads total population.

Find “Diabetes (percent), 2009” in the table of contents. Click it to show the map of diabetes rates, and close the 2010 Total Population map (you’ll see a close button in the upper right-hand corner, or you can click the highlighted “2010 Total Population” item in the table of contents).

You may click the left mouse button on any county to see a pop-up window with all attribute values for that county.

The counties shaded with a diagonal stripe pattern have no valid data associated with them. The counties are colored according to a quantile algorithm, meaning the map has a roughly equal number of counties from each of the legend categories at the top. You can change the renderer by clicking the legend and choosing a different algorithm, number of categories, or color ramp.

As you’re looking for patterns in diabetes rates around the country, you might want to examine one legend category at a time (for instance, only the counties with the highest rates of the disease). A quick way to do this is to hold the Ctrl key, click on a legend color, and hold the left mouse button down.

Filter criteria

The “Select counties…” dropdown offers a number of ways to filter counties based on their diabetes rates. “Top 10%” will show only the ten percent of all counties in the U.S. with the highest rates of diabetes. “Bottom 10%” will show only the counties below the 10th percentile. “Above average” and “Below average” do the same thing with respect to the 50th percentile.

The “Specify %” option lets you choose your own percentile for filtering the data.

Note that counties which don’t meet the filter are rendered transparent, allowing the background layer color to show through. In this screen capture, the worst 30% of counties (with respect to diabetes rates) are shown, whereas the rest—the best 70% of counties—are not displayed. Counties with no data continue to be rendered with the same diagonal pattern.

“Specify % range” lets you choose both a top and bottom percentile; in this case, we’re seeing the 40% of counties whose diabetes rates are clustered around the median:

Finally, you can use “Specify range” to choose counties falling within a maximum and a minimum percentage. A histogram shows the distribution of data across the entire set of counties.

Summary map

You might want to explore the relationship between diabetes and another variable—say the availability of fresh fruits and vegetables. Find “Few Fruits and Vegetables (percent), 2009” in the table of contents and click on it. A second map for that attribute will show up on screen. You can apply the same kinds of filters to the new map as were discussed above. Choose “Top 10%” as the filter for both maps.A glance suggests that both maps have some counties in common, but by no means all counties. Click the “Summary Map” button at the bottom left to see a combined map with only the counties shared by both maps.

These are the counties that are among the very worst for diabetes rates, and are also among the very worst for fruit and vegetable availability.

Post to ArcGIS Online

If you’re satisfied with this map and are ready to share your results with others, click the “Save to ArcGIS Online” button in the upper right. Enter your ArcGIS.com credentials (your Esri global account ID and password) and this map will be saved to your ArcGIS Online content list. After saving, you have the option to click a link to view the new map online in a web browser. You may need to enter your ArcGIS Online credentials again in the web application; after this, you should see the map displayed in your browser window.

Technical details

This application extends the DynamicMapServiceLayer class. Given a variety of parameters (class breaks algorithm, number of class breaks, desired colors, et al) it has logic to build a JSON renderer object and add it to the REST “export map” request; you can see this information if you have a browser debugger such as Firebug, Fiddler, or the Chrome Developer tools. ArcGIS Server version 10.1 can recognize that renderer and generate the proper symbology in the map image that gets generated and returned to the client for display.

Once the Flex API is updated and released for use with Server 10.1, this DynamicMappingLayer class can be scrapped and replaced with native Flex API calls to accomplish the same thing. During development, we ran into situations in which the export map request exceeded the maximum amount of data accepted by the Esri web adapter. For that reason, the DynamicMappingLayer makes all its requests via POST operations, not via GET.

We discovered that some versions of Firefox see these requests as an HTTP redirect operation, and end up warning the user (in a very annoying way) upon every new map request. So it’s easier to just useChrome or Internet Explorer with this application. If you’re set on using Firefox, however, you may use this workaround:

  1. Enter “about:config” in the Firefox address bar;
  2. Look for a config key called “network.http.prompt-temp-redirect” and set its value to false

I want to thank Patrick Mowrer for making available his multi-thumb slider control via the MIT License. His blog post on the component is here. I tried to use the (older) mx HSlider control for this, but found it had troubles when asked to handle very small fractional values. Mr. Mowrer’s control has no such limitations, although I did have to make a number of small modifications in order to be able to control the numeric precision of its dataTip.

Contributed by Mark D.

Posted in Uncategorized | Tagged , , , , , | 1 Comment

Animated Cartograms

YouTube Preview Image

A cartogram is a map where areas or lengths are distorted to represent thematic content such as population or GDP. This sample is a Silverlight-based web application that maps cartograms of international tourism, immigration and trade in dairy, meat and fruit.

The live application is available here.

The source code can be downloaded from here.

The data used in this application is derived from spreadsheets downloaded from Worldmapper. Cartograms of this data were generated using this geoprocessing tool developed by Tom Gross and published on ArcScripts. For data analysis and presentation we selected the Geood homolosine projection because it is equal-area and looks cool.

In my opinion, the most interesting aspect of this sample is its ability to animate between various cartograms. This is achieved using an inherited Graphics class that can interpolate geometry at a giving instance in time. This will be the subject of a future posting that will discuss this in more detail.

In summary, cartograms are useful technique for showing the distribution of thematic values particular when the data has a wide distribution. However cartograms are not suitable if the map reader is unfamiliar with the original shape of geometries.

Contributed by Richie C.

Posted in Uncategorized | Tagged , , , | Leave a comment

Dynamic Image Service Directory

This post describes a new sample published by the Applications Prototype Lab to browse and preview image services hosted on multiple ArcGIS Servers.

The live application is available here.

The source code can be downloaded from here.

Out-of-the-box Esri’s ArcGIS Server provides a web-based catalog view of published services called the service directory as shown below. The directory lists all available geospatial services, folders and contains links to view mapping services in a variety of clients.

The sample discussed in this post is somewhat similar to Server’s service directory in that it can be used to navigate a Server’s catalog of services. However the differentiator is that the sample can support multiple Servers and only image services.

In the screenshot below, a user has added a Server hosting imagery for Japan. As the user moves his or her mouse over the service names, the extent of the imagery is highlighted on the map as a red box.

When an image service is selected, it is added to the map and the map zooms to the extent of the imagery. In the screenshot below, a user selected the Sendaiwan80 image service from the Geospatial Information Authority of Japan (GSI) that shows the devastation immediately following the March 11th Tohoku earthquake and tsunami.

Zooming to the township of Watari, the devastation caused by the tsunami is quite obvious.

Using the built-in transparency slider it is possible compare the post-tsunami imagery with one of the preset base maps such as the world streetmap as shown below.

A single image service can be comprised of hundreds, thousands or even millions of individual images. At a single location there could be many overlapping images taken by different sensors and or at different times. To find all overlapping images at a specific location, use one of the four selection tools at the bottom right of the application to sketch an area of interest.

When the selection sketch is complete, a slide-out panel will appear containing preview thumbnails and associated data for all overlapping images. Depending on the source imagery, data displayed in the table may include the date of capture, cloud cover and the name of the sensor used.

In summary, this sample allows the browsing image services on an ArcGIS Server. The sample is built using Silverlight but it could easily have been Flex or JavaScript. All three web mapping APIs are functionally equivalent and use the same REST API to communicate with ArcGIS Server.

Contributed by Richie C.

Posted in Uncategorized | Tagged , , , , | Leave a comment

Applications Prototype Lab @ Esri Developer Summit

We are happy to announce that the Applications Prototype Lab will be presenting a session entitled “Latest Innovations” at next month’s developer summit in Palm Springs.  The sessions is scheduled for Wednesday, March 28 @ 2:45pm in the Mojave Learning Center (Renaissance Hotel).  Click here for details.

We look forward to sharing our work and meeting you all!

Session description:
“Don’t miss this opportunity to view an array of thought-provoking demonstrations from Esri’s Applications Prototype Lab. Located at Esri’s headquarters, this fourteen-member team specializes in rapid prototyping and the construction of pre-sales demonstrations covering a wide range of topics.” (from DevSummit Agenda)

Contributed by Richie C.

Posted in Uncategorized | Tagged | Leave a comment

How to apply Map Effects using a Proxy Server

Last month the Applications Prototype Lab published samples, and associated blog posts, demonstrating how apply client-side effects to map layers in Silverlight and Flex.  The ability to change the appearance of certain layers, base maps in particular, could be very useful in some scenarios.  For example, a developer may wish to apply a night effect to a base map to make a map more legible for evening drivers.  Or perhaps a developer would like to desaturation an imagery base map layer to accentuate an operation layer.

The two techniques referenced above rely on plug-in technology to perform client-side rendering of graphics and a lot of custom development.  Secondly, what happens if the client browser or operating system does not support these plug-in technologies?

This blog post explores the use of web proxies to perform server-side map effects.  The technique requires minimal coding and a single proxy can be shared by all three Esri web mapping technologies (Silverlight, Flex and JavaScript).  Disadvantages include extra network latency and effects cannot be as dynamic as the client side alternative.

Normally, a Silverlight map with a topographical base map would look something like this:

<esri:Map>
    <esri:ArcGISTiledMapServiceLayer
       Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer" />
</esri:Map>

To apply an inverted color map effect the developer need only insert the following code*:

 <esri:Map>
    <esri:ArcGISTiledMapServiceLayer
        ProxyURL="http://maps.esri.com/sldemos/delta/invert.ashx"
      
Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer" />
</esri:Map>

* Due to limited capacity this proxy service has been engineered to only respond to requests from the sample app linked below.

To view the live app please click here.

To download the source to the web app and proxy service please click here.

In summary, the server-side approach does not support the interactively of the client-side alternative but it requires minimal coding and can accommodate all Esri web technologies.  The author encourages you to experiment with server-side map effects as a way to provide end-users an enhanced experience without duplication of content.  Additional effects can be downloaded from sources such as the WPF Pixel Shader Effects Library or you can create your own.

Sample screenshots.

Contributed by Richie C.

Posted in Uncategorized | Tagged , , , , | 1 Comment

Applying ColorMatrix Effects to Flex Maps

Intro

As with many things, the greatest strength of the tiled basemap is also its greatest weakness. On the one hand, it’s pre-rendered: its tiles load fast and with little or no computational load. On the other hand, it’s pre-rendered: you’ll get only what the map’s author designed.

What if you like the Esri World Streets basemap (as one example), but think the colors are distractingly bright? Tough—they’ve already been rendered and can’t be changed, right? Well…not necessarily. The tiles have been pre-rendered, but Flex and the Flash engine have some amazing capabilities when it comes to manipulating any image’s pixels before they get displayed. As we’ll see, the color characteristics of even static images can be changed on the client at runtime.

The app

You can see a live demo application here: http://maps.esri.com/AGSFlex_Demos/MutedBaseMaps

View or download the source code by clicking the “view source” button in the upper left corner. Play around with the various settings to learn what they will do to the base map. Note that the “Grayscale Control” slider has two effects: it decreases differences among the colors (leading to a gray appearance), but also increases the overall brightness as well. So to get a grayscale appearance, you’ll need to bump up the grayscale control while also decreasing the “All Colors” control.

The dropdown list at the upper right has a variety of tiled maps (all hosted on ArcGIS.com) so you can see what your settings will do to the different base maps.

The code

In index.mxml, you will find most of the user interface. The various sliders and other controls have no image-manipulation logic in themselves; their values are bound to various properties on the DimmableTiledMapService, which is where most of the interesting stuff happens.

DimmableTiledMapService.mxml extends the Esri ArcGISTiledMapServiceLayer class. The red, blue, and green sliders correspond to properties of the same names in DimmableTiledMapService. The “Invert Colors” checkbox is bound to the property “invert” while the Grayscale Control slider corresponds to “offChannelMultiplier”. When any of these properties changes, the “matrix” getter recalculates and applies a ColorMatrixFilter effect. This filter prompts the Flash engine to recalculate every pixel in the base map by multiplying it by the given color matrix.

In your own apps…

The “View Color Matrix” button will show the matrix values used to generate what you see on screen. In fact, it gives you the matrix as an ActionScript array variable declaration you can paste into your own code—so you can play with the controls in the demo app, and then replicate the colors in your own app.

For example, suppose you have the following dead-simple Flex app showing the Esri tiled topo map:

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"

                     xmlns:s="library://ns.adobe.com/flex/spark"

                     xmlns:mx="library://ns.adobe.com/flex/mx"

                     minWidth="800" minHeight="600"

                     xmlns:esri="http://www.esri.com/2008/ags">

     

      <esri:Map width="100%" height="100%">

            <esri:ArcGISTiledMapServiceLayer

                  url="http://services.arcgisonline.com/

                       ArcGIS/rest/services/World_Topo_Map/MapServer">

            </esri:ArcGISTiledMapServiceLayer>

      </esri:Map>

</s:Application>

If you want to change the base map’s appearance to match the “Gray” preset…

  1. Use the demo application and choose “Gray” in the presets list
  2. Click “View Color Matrix”; select the resulting text and use Ctrl+C to copy it
  3. Paste the code into an ActionScript script block
  4. Add a ColorMatrixFilter to the tiled base map declaration that uses the color matrix you just generated

The final code looks like this:

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"

                     xmlns:s="library://ns.adobe.com/flex/spark"

                     xmlns:mx="library://ns.adobe.com/flex/mx"

                     minWidth="800" minHeight="600"

                     xmlns:esri="http://www.esri.com/2008/ags">

      <fx:Script>

            <![CDATA[

                  var matrix:Array = [

                        -0.30,      -0.30,      -0.30,      0.00, 255.00,    

                        -0.30,      -0.30,      -0.30,      0.00, 255.00,    

                        -0.30,      -0.30,      -0.30,      0.00, 255.00,    

                        0.00, 0.00, 0.00, 1.00, 0.00

                  ];

            ]]>

      </fx:Script>

     

      <esri:Map width="100%" height="100%">

            <esri:ArcGISTiledMapServiceLayer

                  url="http://services.arcgisonline.com/

                  ArcGIS/rest/services/World_Topo_Map/MapServer">

                  <esri:filters>

                        <mx:ColorMatrixFilter matrix="{matrix}"/>

                  </esri:filters>

            </esri:ArcGISTiledMapServiceLayer>

      </esri:Map>

</s:Application>

References

Esri’s ArcGIS Server team has a blog post on the subject here.

Richie Carmichael of the Esri Applications Prototype Lab has built a version of this app in Silverlight; it includes additional fun effects to make a base map look like a silent movie, Larry King’s mosaic backdrop at CNN, and more. Find it here.

Contributed by Mark D.

Posted in Uncategorized | Tagged , , , | Leave a comment

Timeliner for ArcMap

Timeliner UI 

The Lab has just released Timeliner, a new ArcMap add-in for exploring and visualizing temporal data.  The installer, source code, and documentation can be downloaded here.  A video of Timeliner can be viewed here.

Timeliner expands upon the capabilities of the Time Slider Window in ArcGIS 10.  Timeliner differs from the Time Slider Window because it

  •  navigates from time-stamped data element to data element without regard to a fixed time increment – great for sparse data or temporally fragmented data
  • lets you “exclude” data elements from visualization and replay (i.e. poor image quality, limited data extent, etc.) 
  • lets you name and save multiple timelines based on your settings for later use.

Timeliner works by scanning a selected temporal layer to build a list of the distinct date/time events recorded in the data.  Supported data formats are feature classes, mosaic datasets, and image services, which store time information in a Date/Time field type.

Navigation through the timeline is accomplished by dragging the slider stylus directly to an event, or by clicking a button on the playback control panel to move sequentially through events. Additional features include filtering of events by attribute and spatial/temporal extent, and analysis and display of temporal distribution and density.

Timeliner leverages the new temporal capabilities introduced ArcGIS 10 and will therefore not run in earlier versions of ArcGIS.  Timeliner’s GUI was built with WPF.  It therefore looks and works best in Windows systems that are not configured to use the ‘Windows Classic’ Theme.  With WPF, it was possible to build a streamlined interface that puts all of the controls and settings within one or two mouse clicks.  The add-in was developed with C# for .NET 3.5.   


Posted in Uncategorized | Tagged , , , | Leave a comment

What is so standard about standard parallels?

Introduction

The central problem of mathematical cartography is the problem of representing a part of the curved surface of the earth on the plane without introducing any more distortions than is necessary. This post describes a quantitative definition for the term “distortion” and then studies several map projections which attempt to minimize distortion for the conterminous United States.

For a formal mathematical description of this problem see John Milnor, “A Problem in Cartography”, The American Mathematical Monthly, vol.76, 1969, pp.1101-1112 (link).

Definitions

Let S be the spheroid with major axis a and minor axis b consisting of all points (x,y,z) in the 3-dimensional euclidean space such that

and let D be any non-degenerate (containing at least two points) subset of S.

By a map projection f on the domain D we mean a function which assigns to each point p of D some point f(p) of the euclidean plane E.

Let γ(p,q) denote the geodesic distance between two points p and q of the spheroid S.

Let d(u,v) denote the euclidean distance between two points u and v of the plane E.

We define the scale σ(p,q) of the map projection f with respect to a pair of the distinct points p and q in the domain D to be the ratio

Usually it is not possible for this scale to be the same for all pairs of points p and q in D. Next we introduce the minimum scale σ’ defined to be the infimum of the scale σ(p,q), and the maximum scale σ’’ defined to be the supremum of the scale σ(p,q), as p and q vary over all pairs of distinct points in D. From these definitions we see that σ’ and σ’’ are the “best” possible constants such that the inequality

holds for all points p and q in D.

To measure the extent to which the scale deviates from a constant we introduce the notion of a distortion. The distortion δ of the map projection f is the natural logarithm

of the ratio of maximum scale to minimum scale.

We would like to find a map projection for which the distortion δ is as small as possible.

Albers equal-area conic map projection

The Albers projection is exclusively used by the USGS for sectional maps of all 50 US states in the National Atlas of 1970, and for other US Maps at scales of 1:2,500,000 or smaller. The latter maps include the base maps of the United States issued in 1961,1967, and 1972, the Tectonic Map of the United States (1962), and the Geological Map of the United States (1974), all at 1:2,500,000.

To map a given region, standard parallels should be selected to minimize variations in scale. Deetz and Adams (1934) recommended in general that the standard parallels be placed one-sixth of the displayed length of the central meridian from the northern and southern limits of the map. Hinks (1912) suggested one-seventh instead of one-sixth.

The standard parallels chosen by Adams for Albers maps of the conterminous US are latitudes 29.5°N and 45.5°N. For a detailed description of this map projection see Snyder (1987, pp.98-103).

Lambert conformal conic map projection

The Lambert projection is used by the USGS for many 7.5- and 15-minute topographic maps and for the State Base Map series. For USGS Base Map series of the the conterminous US, the standard parallels are 33°N and 45°N. The Lambert is used by the USGS for a map of the Unites States showing all 50 States in their true relative position at scales of both 1:6,000,000 and 1:10,000,000. This map has the standard parallels 37°N and 65°N. For a detailed description of this map projection see Snyder (1987, pp.104-110).

Numerical experiments

We applied the algorithms described in an earlier blog post to generate geographic points using Fibonacci lattice method and to measure geodesic distances using Andoyer-Lambert-Thomas method. For more information about these methods see this link.

We tested both the Albers and the Lambert projections with the 1st standard parallel (φ’) in the interval [25°,35°] and the 2nd standard parallel (φ’’) in the interval [40°,50°] with fixed 0.25° increments.

Albers equal-area conic projection

USGS version, φ’ = 29.5°, φ’’ = 45.5°:
Minimum scale σ’ = 0.9881122
Maximum scale σ’’ = 1.016966
Distortion δ = 0.02878240

Optimized version, φ’ = 29.25°, φ’’ = 47°:
Minimum scale σ’ = 0.9880791
Maximum scale σ’’ = 1.012033
Distortion δ = 0.02395348

Lambert conformal conic projection

USGS version, φ’ = 33°, φ’’ = 45°:
Minimum scale σ’ = 0.9945396
Maximum scale σ’’ = 1.025228
Distortion δ = 0.03039034

Optimized version, φ’ = 31.5°, φ’’ = 43.75°:
Minimum scale σ’ = 0.9943111
Maximum scale σ’’ = 1.019559
Distortion δ = 0.02507548

Conclusions

We evaluated the “quality” of two conic map projections by computing the Chebyshev criterion of minimax type for the conterminous US and showed that the distortion can be made smaller by adjusting the latitudes of the standard parallels.

Open Problems: Implement a multi-variate minimization method and use it to find optimal standard parallels for the given area. Use a criterion of variational type (Airy, Jordan, etc) to select the standard parallels and compare new results with the ones computed for this post.

References
  • Deetz, C.H. and Adams, O.S. (1934), Elements of Map Projections (4th ed.), US Coast and Geodetic Survey Spec. Pub. 68
  • Hinks, A.R. (1912), Map Projections, Cambridge U. Press (available here from archive.org)
  • Snyder, J.P. (1987), Map Projections — A Working Manual, USGS Professional Paper 1395 (available here from USGS)

Contributed by Lenny K.

Posted in Uncategorized | Tagged , , , | Leave a comment