Atlas of Design Volume II Submissions Open

The Atlas of Design has opened its doors once again for those wanting to be a part of the beautiful world of cartography. Volume I was a great success that produced a hard cover publication showcasing some of the finest maps recently made.

You can submit on their website and all you need is your name, map title, email, map description, and a small file of your map to upload.

Submissions are open until February 28th so make sure to polish up your projects before then!

Using Python with the Field Calculator in ArcGIS

Mike from SoCalGIS.org just posted an excellent tutorial showing how one could use Python within the field calculator to break apart string values and add them to a new field.

For example, say you have a field with values such as “Census Tract 12345″ and you want to have a field that only contains the tract number (e.g., 12345). You can use python within the field calculator to extract that third word from the field, pretty sweet!

Check it out:
http://socalgis.org/2013/12/05/field-calculator-i-just-want-the-third-word/

How to Use Files with .e00 Extensions in ArcGIS

sd

I was searching for some elevation data for San Diego and came upon a dataset with a .e00 extension. I downloaded it and I wasn’t able to add the file to ArcMap. It just didn’t show up in the folder as a file to select. What gives?

Files with the .e00 extension are ArcInfo Workstation interchange files, and they are used to transport coverages, INFO tables, text files, and other ArcInfo files. Adding .e00 files to ArcGIS is fairly simple, but you first need to convert them to a coverage.

To convert .e00 files to a coverage you need to use the Import from E00 script tool. The tool is located in the toolbox under Conversion Tools > To Coverage > Import from E00. Specify the input/output parameters and run the file.

Your .e00 will be converted to a grid file and will be able to be added to the Table of Contents in ArcGIS.

TopoJSON 1.4.0 Released!

Mike Bostock released TopoJSON 1.4.0 today, which revisits the algorithm used to simplify topological data. This is an exciting release, as it really aims to widen the precision inputs when using the command line references to look at points that aren’t exact but assuming they are in the same location. Described by Bostock:

An issue of particular importance to topology inference is messy inputs. For example, if you have two points [-122.416712304917, 37.783305712306] and [-122.416712304916, 37.783305712306], then in regards to the topology they are as distinct as San Francisco and New York. The TopoJSON reference implementation eliminates many of these errors by quantizing inputs, rounding them to lower precision.

He recently put together a great visual explanation on how topojson works from a practical and geographic perspective. It’s a great article explaining the four-step process. Hats off to an exciting release!

D3: Topojson Interaction

bl.ock | gist

Interacting with the geographic data on your map is what gives web-maps a step up compared to static maps. All of that spatial information can hold it’s own attribute info, much like shapefiles. And all of that information is accessible on browser side with D3 and array interactions.

Simply, as the user interacts with the map, you can set which information should be returned to them. To take it one step further, you can use this information to computer new relationships and trends that effectively give web-mapping with spatial data a GIS feel. Upon updating your data, all of your spatial statistics will update as well, which doesn’t require you to re import your data as if you were creating a static map.

Taking from the previous example, how to render topojson data, the interaction portion is actually just a simple addition, but is only possible with the array created by D3. We’ll add the action item .on('mouseover', ...) to the data rendering process:

.on('mouseover', function(d) {
    // grab specific data
    // use specific data
})

The interactions with geographic data are numerous: 'mouseover', 'mouseout', 'mousedown', 'mouseup', 'mousemove'. The following example looks for the STATE_ABBR property, passes it to a specific element in the HTML, and changes the style of the SVG element on the cursor entering and exiting the element.

d3.json('us.json', function(error, us) {
    svg.selectAll('.states')
        .data(topojson.feature(us, us.objects.usStates).features)
        .enter()
        .append('path')
        .attr('class', 'states')
        .attr('d', path)
        .on('mouseover', function(d){
            // get state abbreviation
            var name = d.properties.STATE_ABBR;
            // add to element
            return document.getElementById('name').innerHTML=name; 
    });
});

A key component to this process is the difference between .data() and .datum(). In the topojson rendering tutorial, I used .datum() to define the source of the geometry. Datum is the singular of data. Therefore, your data object is treated as a single SVG object. Using .data() treats each iteration of the data as its own SVG element, allowing you to interact with each separately. The code difference is minimal, but the effect is enormous. See what datum would do to your interactions with the svg canvas.