Select to view content in your preferred language

How to determine the changes between two polygon shapefiles of similar data

13152
26
11-08-2017 11:51 AM
WhitneyNewcomb
Regular Contributor

The city I work for gets its parcel data from the county once a month so we have several years of almost the same data. I want to be able to determine where changes occur between every new month. So what are the changes between September to October, October to November, etc. And by changes I mean any change in geometry (like parcel splits or merges) or changes in attributes (especially changes in ownership).

I've contacted ESRI about this and they weren't able to do a whole lot for me. 

Here's what I've tried so far:

I am able to find changes in geometry by using the Select by Location: Identical features and inverting the selection. 

This works fine but does not get me changes in attributes.

I would use the Feature Compare tool but this does not work as it requires the same number of rows in both tables - which I don't have. 

I also found an old arcgisscripting tool and converted it to arcpy and it worked with point datasets (but at a certain point in time the County changed how they did their parcel data and went to polygons only which the script does not work with).

So I'm at a loss for what to do now.

Does anyone have any advice for me?

Please let me know if there's any info I can give to help you help me.

-Whitney Newcomb

26 Replies
NobbirAhmed
Esri Regular Contributor

If you need help with Python scripting please shoot me a mail at nahmed@esri.com (also some sample data will be helpful)

0 Kudos
BruceHarold
Esri Regular Contributor

This tool wraps the Data Interoperability function in a Python script tool:

https://pm.maps.arcgis.com/home/item.html?id=834e3ba8034e4e7f83d9fc4fcfb5713c

 

0 Kudos
ChrisDonohue__GISP
MVP Alum

I do this all the time for the City I work for to "true-up" the land base layers. Here's two processes that seem to work well in identifying changes:

  • Detecting geometry changes.  For both the existing polygons and the new polygons, convert the polygons to lines.  Then run Erase on the line files to subtract the New from the Existing.  Finally, run Multipart to Singlepart on the result.  The output of all this will be lines that show where the geometry differs.  This can be helpful in knowing exactly what needs to be edited, which can be an advantage over the "Select By Location, Identical" process (which is another way to do this).
  • Detecting Attribute changes.  If you have a common unique ID, an Attribute Join can be used to combine the two attribute tables.  Some examples:  APN, TaxID.  Obviously will vary depending on your attribute fields.  Once the two datasets are joined, Queries can be run for each field of interest to see if the attribute has changed.  Generalized example: Table1.APN <> Table2.APN.

Of course, one can do much more complex processing, but that will depend on knowing more of the specifics of the data.

Chris Donohue, GISP

TedKowal
Honored Contributor
This is a conflation process.  I use MSAccess as my database and perform Attribute change detection using the following methodology using the Database SQL (Not using ArcGIS).

There are three kinds of differences:

-New records in tblDataToday
-New records in tblDataYesterday or lost records in tblDataToday
-Changed records that are both present in tblDataToday and tblDataYesterday

1.  To browse new records in tblDataToday:

SELECT tblDataToday.*
FROM tblDataToday LEFT JOIN tblDataYesterday ON tblDataToday.ID = tblDataYesterday.ID
WHERE (((tblDataYesterday.ID) Is Null))

 

2  To browse new records in tblDataYesterday or lost records in tblDataToday:

SELECT tblDataYesterday.*
FROM tblDataToday RIGHT JOIN tblDataYesterday ON tblDataToday.ID = tblDataYesterday.ID
WHERE (((tblDataToday.ID) Is Null))

 

3  To browse changed records simultaneously in tblDataToday tblDataYesterday:

	3.1 Create a query qChangedData:
		SELECT tblDataToday.*,"tblDataToday" as  ChangedIn
		FROM tblDataToday
		UNION ALL SELECT tblDataYesterday.*, "tblDataYesterday" as ChangedIn
		FROM tblDataYesterday

	3.2 Create a query qChangedIDs:
		SELECT All_IDs.ID
		FROM (SELECT DISTINCT * FROM (SELECT tblDataToday.* FROM tblDataToday union all SELECT tblDataYesterday.* FROM tblDataYesterday  )  AS uAll)  AS All_IDs
		GROUP BY All_IDs.ID
		HAVING (((Count(All_IDs.ID))=2));

	3.3 Create a query qChangedData:
		SELECT qChangedData.*
		FROM qChangedIDs INNER JOIN qChangedData ON qChangedIDs.ID = qChangedData_u.ID
		ORDER BY qChangedData.ID, qChangedData.ChangedIn
‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍
0 Kudos
MichaelVolz
Esteemed Contributor

Ted:

Does this process work for you in Pro?

0 Kudos
TedKowal
Honored Contributor

No I do not use pro nor currently willing to migrate.  Pro does not recognize an Access personal geodatabase, until it does Pro is a no go for me.  I am struggling learning qgis as my fallback.

This is a perfect use case demonstrating the time saving ability of access (even though it performs the geometry operations slow) but the flexibility and ease of use FAR OUTWEIGH any geometry processing.

Enable ArcGIS Pro to access ESRI Personal Geodatabases 

0 Kudos
BruceHarold
Esri Regular Contributor

Hello, please see this blog - which has a link to an updated sample for change detection

https://community.esri.com/community/open-platform-standards-and-interoperability/blog/2019/11/15/se... 

Requires ArcGIS Data Interoperability extension.

0 Kudos