Create Duplicate Geometry in One to Many Join

4256
4
06-23-2011 07:43 AM
TylerBragg
New Contributor II
I have researched this one and can't seem to find an easy way to do it: 

I'm trying to join a feature class of parcel polygons with a table based on one field, which will result in a one (parcels) to many (table) join.  Then, for every unique record in the table (which has multiple records for each parcel polygon), I want to duplicate or copy the matching parcel polygon and create a new feature class that contains all the records from the table with the parcel geometry. 

I have a script that will do it, but it is very slow as it reads through each record in the parcel feature class, matches with records in the table, then copys the geometry from the parcels for each table record and attributes accordingly.  I'm just trying to find out if there's an easier/faster way to do this. 

If the explanation is not clear, try this:  Parcel feature class primary key is the ParcelID.  Table primary key is the OwnershipID, which identifies all owners of each parcel (so you can have parcel1-owner1, parcel1-owner2, parcel1-owner3, etc.).  Table also contains ParcelID, which has the same parcelID for every owner of the property.  This is the join field.  I want to then copy the parcel geometry so that I have geometry for each owner in a new feature class. 

The issue is that I have to conduct further analysis on an owner basis, and I need the parcel shape for each owner in order to do this. 

Again, my script seems to work fine, it just takes a long time to run because it has to cycle through every record.  Any suggestions?

Tyler
0 Kudos
4 Replies
FrankVignati
Occasional Contributor II
I have researched this one and can't seem to find an easy way to do it: 

I'm trying to join a feature class of parcel polygons with a table based on one field, which will result in a one (parcels) to many (table) join.  Then, for every unique record in the table (which has multiple records for each parcel polygon), I want to duplicate or copy the matching parcel polygon and create a new feature class that contains all the records from the table with the parcel geometry. 

I have a script that will do it, but it is very slow as it reads through each record in the parcel feature class, matches with records in the table, then copys the geometry from the parcels for each table record and attributes accordingly.  I'm just trying to find out if there's an easier/faster way to do this. 

If the explanation is not clear, try this:  Parcel feature class primary key is the ParcelID.  Table primary key is the OwnershipID, which identifies all owners of each parcel (so you can have parcel1-owner1, parcel1-owner2, parcel1-owner3, etc.).  Table also contains ParcelID, which has the same parcelID for every owner of the property.  This is the join field.  I want to then copy the parcel geometry so that I have geometry for each owner in a new feature class. 

The issue is that I have to conduct further analysis on an owner basis, and I need the parcel shape for each owner in order to do this. 

Again, my script seems to work fine, it just takes a long time to run because it has to cycle through every record.  Any suggestions?

Tyler


we have a model that does something similar to what you want to create our condo unit feature class
we take the parcel that is the condo footprint parcel and dissolve them on a field called subnum which is the first 8 digits of our parcel id (PID), and export them out as points and add xy coordinates, then we join the points to the table with the condo units based on the first eight digits of their PID, then the join is exported out as a table with the xy coords, then that table is used to create points using the add xy data tool and finally those points are joined to the dissolved polygons with a one to many spatial join, it's clunky but we get our separate condo units
it runs for about ten minutes on 29,300 + records
0 Kudos
TylerBragg
New Contributor II
Thanks frankv3.  That rationale makes sense (though as you say, clunky; but no more clunkier than my method in the script).  The only problem I see in my application of your method is that you are relying on the theory that parcels do not overlap onto other parcels, so your spatial join will work properly.  So now you are thinking..."how/why would your parcels overlap?"  Well, I'm dealing with mineral parcels, specifically coal parcels.  A little geology knowledge will tell us that in one spatial location, coal seams were deposited at different depths; therefore, there are typically multiple coal seams "stacked" on top of each other.  This creates the opportinuty for someone to own one coal seam in an area, while someone else may own another (or all the rest of them).  This creates overlapping ownerships (in some cases, you may have multiple separate owners within the same boundary--all who own different coal seams and have different parcel numbers) and thus, overlapping parcels.  So using a spatial join would not work for me because I could be joining one point with multiple parcels that it does not belong to.

Hopefully this makes sense!  Mineral ownerships can be messy, especially when you are trying to maintain boundaries for them.  So you cannot use topology validation because overlaps ARE allowed for these parcels.  It makes dealing with them (or conducting analysis such as this) very tricky. 

Any ideas?

Tyler
0 Kudos
ChrisSnyder
Regular Contributor III
The MakeQueryTable tool can do this: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000006r000000.htm

The syntax is a little squirly. Be sure to read the documentation. Also, be sure to include the Shape field if you want a spatial layer returned, otherwise it'll just return a table view.

This might help too: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Examples_of_queries_with_the_Make_Quer...
0 Kudos
TylerBragg
New Contributor II
This looks like it might work with a little elbow grease.  I just ran a quick test and it looks to have done the one-to-many join properly, but some of the geometry doesn't seem quite right.  I'll dig deeper and make sure i have all the parameters set properly.  Thanks! 

Tyler
0 Kudos