I have a task of assigning data from database that I represent as point layer, and containing information about characteristics of soils through the world, and also soil type. I also have polygon layers for each lattitude, that contain area of each type of soil (same ones as point layer, therefore can be ussed as join feature). Inside each lattitude layer, each soil type is only one, multipart polygon. I need to assign values from point layer in a way that the soil type always match, but also that it uses point closest geograpicly. If I use just join by attributes, it doesnt take into account spatial location, and vice versa, and I really have trouble figuring how I could approach that. Each layaer has around 40 soil types, and so doing it manually would take ages. I can also add that majority of points are way off the polygons that I intend them to join to, but as long as the soil types match and points is closest, its what I need. I have basicly no knowledge about python scripting. I tried making model to handle that, but its also beyond me. Thanks in advance
-
Can I clarify, you want to join the closest (and only 1) point, for each matching soil type, to a corresponding polygon feature? ie where the result would be every polygon has a matched point, but not every point has a matched polygon. Also, do you need to match the points to the closest edge of the polygon (closest geometry)?– TomCommented Apr 24, 2013 at 17:50
-
1In any case, look at a spatial join, as mentioned in this answer. gis.stackexchange.com/questions/2614/…– TomCommented Apr 24, 2013 at 17:54
1 Answer
If needed, the Multipart To Singlepart can be used to explode the soil polygons into separate areas. Project the data, if not already projected, so that area calculations will be in a meaningful projected coordinate system. Calculate Geometry to update the soil polygons area field - Add Field of type Double, if not already present.
Ensure that the table of locations has a unique ID field to trace back to the original records (you never know when this will come in handy). Make XY Event Layer from your table of locations using the X and Y fields. Copy Features to make the layer a permanent feature class. Project to make sure that both points and polygons are in the same coordinate system.
Spatial Join the points as target_features, polygons as join_features, with the CLOSEST match_option. Open the attribute table for the resulting output and query where the "soil_type" = "soil_type_1" (replace with actual field names in your data that represent the soil type information). Where records are selected, these should satisfy your goal of assigning attributes from both layers by distance and attribute.
If the values are not exact matches you will need to edit this using UPPER or LOWER functions, or more thorough spell-checking and editing may be required. Switch Selection to identify those records that didn't work; hopefully there are only a few and they will require manual inspection/editing. If there are too many for manual methods then you might have to look at the Generate Near Table tool (requires Advanced/ArcInfo license), which will get more complicated with many more steps...