{{refimprove|date=January 2023}}
{{Short description|GIS tool for merging attribute tables}} A '''spatial join''' is an operation in a geographic information system (GIS) or spatial database that combines the attribute tables of two spatial layers based on a desired spatial relation between their geometries.<ref name="Longley2011">{{cite book |last1=Longley |first1=Paul A. |last2=Goodchild |first2=Michael F. |last3=Maguire |first3=David J. |last4=Rhind |first4=David W. |title=Geographic Information Systems & Science |date=2011|edition=3rd |publisher=Wiley |page=360}}</ref> It is similar to the table join operation in relational databases in merging two tables, but each pair of rows is correlated based on some form of matching location rather than a common key value.<ref name="campbell2011">{{cite book |last1=Campbell |first1=Jonathan |last2=Shin |first2=Michael |title=Essentials of Geographic Information Systems |date=2011 |publisher=Saylor Foundation |isbn=9781453321966 |page=182 |url=https://saylordotorg.github.io/text_essentials-of-geographic-information-systems/s11-02-multiple-layer-analysis.html |access-date=5 January 2023}}</ref> It is also similar to vector overlay operations common in GIS software such as Intersect and Union in merging two spatial datasets, but the output does not contain a composite geometry, only merged attributes.
Spatial joins are used in a variety of spatial analysis and management applications, including allocating individuals to districts and statistical aggregation. Spatial join is found in most, if not all, GIS and spatial database software, although this term is not always used, and sometimes it must be derived indirectly by the combination of several tools.
== Spatial relation predicates == {{main | Spatial relation | Geospatial topology }} thumb|400px|Examples of topological spatial relations. Fundamental to the spatial join operation is the formulation of a spatial relationship between two geometric primitives as a logical predicate; that is, a criterion that can be evaluated as true or false.<ref name="qgis">{{cite web |title=Join attributes by location tool |url=https://docs.qgis.org/3.22/en/docs/user_manual/processing_algs/qgis/vectorgeneral.html#join-attributes-by-location |website=QGIS 3.22 Documentation |publisher=OSGeo |access-date=4 January 2023}}</ref> For example, "A is less than 5km from B" would be true if the distance between points A and B is 3km, and false if the distance is 10km. These relation predicates can be of two types: * A '''Topological relation''' is a qualitative relationship between two shapes that does not depend on a measurable space (that is, coordinates). Common examples of such predicates include "A is ''completely inside'' B," "A ''overlaps'' B," "A is ''adjacent'' to B" (i.e., sharing a boundary but no interior), and "A is ''disjoint'' from B" (not touching at all). These are commonly specified according to some form of the 9-Intersection Model,<ref name="sdh1990">{{cite journal|first1=M.J. |last1=Egenhofer |first2=J.R. |last2=Herring |year=1990 |title=A Mathematical Framework for the Definition of Topological Relationships |url=http://www.spatial.maine.edu/~max/MJEJRH-SDH1990.pdf |url-status=dead |archive-url=https://web.archive.org/web/20100614161335/http://www.spatial.maine.edu/~max/MJEJRH-SDH1990.pdf |archive-date=2010-06-14 }}</ref> which is incorporated into the international Simple Feature Access specification (ISO 19125-2).<ref name="OGC-SFA">{{cite web |last1=Open Geospatial Consortium |title=Simple Feature Access - Part 2: SQL Option |url=https://www.ogc.org/standards/sfs |website=Open Geospatial Consortium Standards |access-date=4 January 2023}}</ref> * A '''Metric relation''' is a quantitative (measurable) relationship between two shapes in a coordinate space, most commonly a distance or direction. Common examples include "A is ''due north'' of B" or "A is ''less than 5 km'' from B." Not all software implementations support metric relations.
Note that some relations are ''commutative'' (e.g., A overlaps B if and only if B overlaps A) while others are not (e.g., A is within B does not mean B is within A).
The geometric primitives involved in these relations may be of any dimension (points, lines, or regions), but some relations may only have meaning with certain dimensions. For example, "A is within B" has a clear meaning if A is a point and B is a region, but is meaningless if both A and B are points. Other relations may be vague; for example, the distance between two regions or two lines may be interpreted as the minimal distance between their closest boundaries, or a mean distance between their centroids.<ref name="worboys2004">{{cite book |last1=Worboys |first1=Michael |last2=Duckham |first2=Matt |title=GIS: A Computing Perspective |date=2004 |publisher=CRC Press |location=Boca Raton, Florida |isbn=0-415-28375-2 |pages=195 |edition=2nd}}</ref>
== Operation ==
As in a relational table join as defined in the relational algebra, two input layers or tables are provided (hereafter ''X'' and ''Y''), and the output is a table containing all of the columns of each of the inputs (or some subset thereof if selected by the user). The rows of the new table are a subset of Cross join or Cartesian product of the two tables, all possible pairs of rows {X1-Y1, X1-Y2, X1-Y3, X2-Y1, X2-Y2, X2-Y3, X3-Y1, X3-Y2, X3-Y3, ...}. Rather than include all possible combinations, each pair is evaluated according to the given spatial predicate; those for which the predicate is true are considered "matching" and are retained, while those for which the predicate is false are discarded.
For example, consider the following two tables: {| class="wikitable" style="text-align:center; float:left; margin-right:5px" |+Students table |- ! StudentID !! LastName !! GPA !! Residence: ''point'' |- | 1 || Rafferty || 3.56 || • |- | 2 || Jones || 2.75 || • |- | 3 || Heisenberg || 3.98 || • |- | 4 || Robinson || 1.56 || • |- | 5 || Smith || 2.67 || • |- | 6 || Williams || 3.46 || • |}
{| class="wikitable" style="text-align:center; float:left; margin-left:5px" |+Schools table |- ! SchoolID !! SchoolName !! District: ''polygon'' !! Building: ''point'' |- | 31 || Belknap Elementary || □ || • |- | 33 || Parkview Elementary || □ || • |- | 34 || Smith Elementary || □ || • |- | 35 || Central Elementary || □ || • |}
{{clear}}
When the spatial join is executed, the direction of attachment must be specified, for two reasons: 1) the given spatial predicate may not be commutative, and 2) there is often a many-to-one relationship between the rows (e.g., many students are inside each school district). In the example above, a common goal would be to join the schools table to the students table (the ''target table''), with the relation predicate being "student.residence ''within'' school.district." Assuming that the districts do not overlap, each student point will be in no more than one school district, so the output would have the same rows as the students table, with the corresponding school attributes attached, as:
{| class="wikitable" style="text-align:center; margin-right:5px" |+Students x Schools |- ! StudentID !! LastName !! GPA !! Residence: ''point'' !! SchoolID !! SchoolName |- | 1 || Rafferty || 3.56 || • || 33 || Parkview Elementary |- | 2 || Jones || 2.75 || • || 34 || Smith Elementary |- | 3 || Heisenberg || 3.98 || • || 35 || Central Elementary |- | 4 || Robinson || 1.56 || • || 33 || Parkview Elementary |- | 5 || Smith || 2.67 || • || 34 || Smith Elementary |- | 6 || Williams || 3.46 || • || 33 || Parkview Elementary |}
The reverse operation, in this case attaching the student information to the schools table, is not as simple because many rows must be joined to one row. Some GIS software does not allow this operation, but most implementations allow for an ''aggregate join'', in which aggregate summaries of the matching rows can be included, such as arrays, counts, sums, or means.<ref>{{cite web |title=Spatial Join (Analysis) |url=https://pro.arcgis.com/en/pro-app/latest/tool-reference/analysis/spatial-join.htm |website=ArcGIS Pro Documentation |publisher=Esri |access-date=5 January 2023}}</ref> For example, the result table might look like:
{| class="wikitable" style="text-align:center; margin-left:5px" |+Schools x Students |- ! SchoolID !! SchoolName !! District: ''polygon'' !! Building: ''point'' !! Students_COUNT !! GPA_MEAN |- | 31 || Belknap Elementary || □ || • || 0 || {{null result}} |- | 33 || Parkview Elementary || □ || •|| 3 || 2.86 |- | 34 || Smith Elementary || □ || • || 2 || 2.71 |- | 35 || Central Elementary || □ || •|| 1 || 3.98 |}
Another option when there are multiple matches is to use some criterion to select one of the rows from the matching set, usually a spatial optimization criterion.<ref name="campbell2011" /><ref name="qgis-nearest">{{cite web |title=Join attributes by nearest tool |url=https://docs.qgis.org/3.22/en/docs/user_manual/processing_algs/qgis/vectorgeneral.html#join-attributes-by-nearest |website=QGIS 3.22 Documentation |publisher=OSGeo |access-date=4 January 2023}}</ref> For example, one could join the school building points (not the districts) to the student residents points by selecting the school that is ''nearest'' to each student. Not all software implements this option directly, although in some cases it can be derived through a combination of tools.
== External links ==
* [https://pro.arcgis.com/en/pro-app/latest/tool-reference/analysis/spatial-join.htm Spatial Join] tool in ArcGIS Pro * [https://docs.qgis.org/3.22/en/docs/user_manual/processing_algs/qgis/vectorgeneral.html#join-attributes-by-location Join attributes by location] tool in QGIS * [https://docs.qgis.org/3.22/en/docs/user_manual/processing_algs/qgis/vectorgeneral.html#join-attributes-by-nearest Join attributes by nearest] tool in QGIS * [https://manifold.net/doc/mfd9/join.htm Spatial Join] in Manifold GIS * [https://postgis.net/workshops/postgis-intro/joins.html Spatial Joins] in PostGIS
== References == <!-- Inline citations added to your article will automatically display here. See en.wikipedia.org/wiki/WP:REFB for instructions on how to add citations. --> {{reflist}} <!-- Categories --> Category:GIS software Category:Geographic information systems