Chapters 17, 18, and 19 all address the same thing: using features in one theme to select features in another theme. You perform this "theme-on-theme selection" using a standard ArcView dialog.
This section contains several subsections:
![]() | A "recipe" for theme-on-theme selection |
![]() | A discussion of spatial joins |
![]() | A list of ArcView limitations with respect to spatial analysis capabilities |
![]() | Exercises (these will take more time than most of the previous ones) |
The trick with the "Select by Theme" dialog is to fill it in bottom to top. Here's the recipe:
You want to select features in the target theme using certain features in a selector theme.
Here are some examples of what we mean by reading the dialog aloud, following the exercises in GTKAV:
![]() | Find gas stations (points in the [Stations] theme) within 1,000 feet of the I-40 freeway (a selected polyline in the [Streets] theme). |
Because you are selecting stations, that is the active (target) theme. Read the dialog aloud as "Select gas stations that are within 1000 feet of the I-40 Freeway." The substitutions are underlined; specifically, they are:
Original phrase | Substituted words | Source of substituted words |
features of active themes | gas stations | description of target theme (things to be selected) |
Distance | 1000 feet | Selection distance value |
selected features of Streets | I-40 Freeway | description of the features used to make the selection (selected features in the selector theme) |
![]() | Find gas stations within a quarter mile of Ann's Mart Station #1963. |
Selector theme: [Business]
Target theme: [Business]
Dialog: "Select gas stations that are within 1,320 feet of Ann's Mart Station #1963."
There is a much more general definition of a database join that extends the concept introduced in Chapter 16. It still creates a new table out of source and destination tables and it still involves one field (we will call them "key" fields) in each table. It generalizes the idea of what it means for a source value to "match" the value in a destination record. This generalization changes how a successful lookup is determined.
Part of the formal definition of a field is its domain. This is the set of all allowable values for the field. Typical domains include sets of numbers, sets of strings up to a given length, boolean values (just true or false are allowed), and ranges of dates. A GIS may also allow domains to include certain kinds of features, such as the set of all points on the earth's surface: that would be the natural domain for the [shape] field of an ArcView point theme.
In short, a domain is a set. We will think of this set abstractly and refer to its members as "points." Why introduce this potential for confusion? Because you can draw pictures of points. We can draw points individually; when we want to consider more points than we can draw, we will create a line of points to represent the domain, like this:
To talk about joins, we need to show unique combinations of points from two domains. We will emulate the procedure René Descartes used a long time ago and draw the second domain as a vertical line segment:
The rectangle is the Cartesian product of domain X and domain Y and is written X ´ Y ("X cross Y").
Now we are ready to describe generalized joins. What we want to do is to specify exactly which combinations of field values constitute "matches." For the usual join, only combinations where the two values are exactly equal are allowed. In this case, the two domains are the same and the set of allowable matches is described by the equation X = Y:
You describe a generalized join very simply: just draw a set of points in [Destination domain] ´ [Source domain]. That's it. Each point in the set describes an allowable combination for the join; points not in the set are not allowed:
By the way, the mathematical term for a set of points within a Cartesian Product is relation. This is the same "relation" in the more familiar term "relational database." For more information see Date, C., An Introduction to Database Systems.
No doubt you would like some concrete examples now!
Approximate matches: join source records whose key value (a number) approximately equals the destination record's key value (also a number, perhaps rounded). (ArcView cannot do this.)
Partial matches: join source records whose key value (a string) matches some portion of the destination record's key value (also a string). (ArcView cannot do this.)
Containment matches: join source records whose key value (a shape) is contained wholly within the destination record's key value (also a shape). ArcView does this.
Proximity matches: join source records whose key value (a shape) is the nearest (among all source records) to the destination record's key value (also a shape). ArcView does this.
Intersection matches: join source records whose key value (a shape) intersects the destination record's key value (also a shape). (ArcView cannot do this.)
In ArcView you do not specify the relation. Instead, it is implied by the dimensionality of the shapes. Points and multipoints have dimension zero, polylines have dimension one, and polygons have dimension two. This gives nine distinct combinations of dimension for selector and target themes. The following table, taken from the ArcView help for "Spatial Join," describes how the combination of dimensions determines the relation used in the join. In the table, "point" also includes "multipoint" shape types:
Destination shape type | Source shape type | ||
Point | Polyline | Polygon | |
Point | Nearest | Nearest | Inside |
Polyline | Nearest | Part of (that is, inside) | Inside |
Polygon | Inside |
This is ambiguous, so we state it in words: when performing a spatial join, ArcView will:
![]() | Join a containing polygon to any shape inside it |
![]() | Join a containing polyline (source) to any piece of that polyline (destination) |
![]() | Join the nearest point or polyline (source) to any point (destination) |
![]() | Join the nearest point (source) to any polyline (destination). |
Here are some popular analyses that ArcView does not support (at least not efficiently and not without a lot of Avenue scripting). Some other GISes do perform these analyses.
![]() | Find all distances between pairs of points (either in the same or different themes). The usual application is to compute a distance table for points on a map, but this information is also a useful starting point for many kinds of statistical analyses of spatial point patterns. See Ripley, Brian D., Spatial Statistics. |
![]() | Within one theme, find the nearest neighbor to each point. (A spatial join of the theme to itself will simply match each point with itself, which is not very useful.) |
![]() | Associate with each (destination) polygon the first (source) point or polyline found lying within that polygon. (These analyses correspond to the empty dark region of the table above.) |
![]() | Perform a "nearest" spatial join, but also report the locations (along polylines or polygon boundaries) at which the closest distances are actually attained. |
Answer the following questions using theme-on-theme selection in ArcView. Use the U.S. data installed with ArcView (by default in C:/ESRI/ESRIData/USA). Go in order--the first six get more difficult as you proceed. Have fun!
If you really get stuck, follow the links page to the Class Notes for 15 July 1999--it provides step-by-step solutions.