NAME: Dissolve Adjacent Polygons, v. 1.8a (Click Name to Download)
Last modified: March 22, 2006
TOPICS: ArcView 3.x, polygon, dissolve, merge, union, eliminate, adjacent, combine, sliver, attribute
AUTHOR: Jeff Jenness
DESCRIPTION: This extension enables the user to eliminate small polygons by combining them with larger adjacent polygons. You begin by specifying a size limit and the extension will eliminate all polygons smaller than this limit. The extension creates a new shapefile of combined polygons so your original polygon theme is not altered. All attributes of the larger polygon will be saved.
This function is especially useful for eliminating small sliver polygons that may be created during digitizing, and is also useful for projects that require a set of polygons that are all greater than a particular size.
All or only selected records: You can either analyze all the polygons in the polygon theme to see if they should be dissolved or only a selected subset of polygons.
Option to use attribute values: You can choose which adjacent polygon to dissolve in to based purely on the size of the polygon, or you can dissolve only into polygons with identical attribute values.
Combine with either largest or smallest adjacent polygon, or with polygon with longest adjacent border: You may specify which larger polygon you want your small polygons to be combined with based on the size or border length of the adjacent polygons. If two small polygons combine, and the new polygon is larger than your specified limit, then that new polygon will not be combined into any larger adjacent polygons.
Two options for "Adjacent": This extension allows you to define "adjacent" as meaning that the two polygons share either a common border or a common point. If you imagine a chess board, two same-colored squares that touch each other diagonally are adjacent at a single point. This extension gives you the option to decide whether that type of adjacency is good enough for your purposes, or if you need the two polygons to share a common boundary.
Report of polygon actions: After the extension finishes, you will get a report of all the small polygons that were eliminated and which larger polygon they were combined with. This report is saved to the hard drive as a text file.
Requires: This extension requires at least a single polygon theme present in a view. It will ask for a field with unique values for each feature, but such a field is not necessary.
This extension also requires that the file "avdlog.dll" be present in the ArcView/BIN32 directory (or $AVBIN/avdlog.dll) and that the Dialog Designer extension be located in your ArcView/ext32 directory, which they usually are if you're running AV 3.1 or better. The Dialog Designer doesn't have to be loaded; it just has to be available. If you are running AV 3.0a, you can download the appropriate files for free from ESRI at:
Recommended Citation Format: For those who wish to cite this extension, the author recommends something similar to:
Jenness, J. 2006. Dissolve adjacent polygons (diss_adjac.avx) extension for ArcView 3.x, v. 1.8a. Jenness Enterprises. Available at: http://www.jennessent.com/arcview/dissolve_adjacent_polys.htm.
Please let me know if you cite this extension in a publication (firstname.lastname@example.org). I will update the citation list to include any publications that I am told about.
Updates: Version 1.4 (Oct. 7, 2003) changes some of the algorithms to make it run faster, and changes the method of identifying adjacent polygons so that it doesn’t occasionally miss polygons that lie completely within another polygon. Also several cosmetic changes
Version 1.5 (Dec. 11, 2003) fixes a bug that caused the extension to hang if it encountered multiple null polygons. Also gives the user the option to only consider a selected subset of polygons to dissolve.
Version 1.51 (Jan. 29, 2004) corrects a bug in which it was incorrectly identifying adjacent polygons that only touched at a single vertex.
Version 1.52 (February 28, 2004) adds the option to combine small polygons with adjacent polygon having the longest common border.
Version 1.7 (February 7, 2005) adds the option to dissolve based on common attribute values, plus adds a Table menu item to add record numbers to the table.
Version 1.8 (March 10, 2006) corrects a bug that could occur if the ID field contained a long alias, as well as adds a function for searching for errors in the scripts.
Version 1.8a (March 22, 2006) corrects a bug caused by
the last revision. Sorry about that!
1) Begin by placing the "diss_adjac.avx" file into the ArcView extensions directory (../../Av_gis30/Arcview/ext32/).
2) After starting ArcView, load the extension by clicking on File à Extensions… , scrolling down through the list of available extensions, and then clicking on the checkbox next to the extension called "Dissolve Adjacent Polygons"
3) From a View, select the icon from the View.
4) You will now see the "Select Polygon Theme and Dissolve Options" dialog box:
Polygon Theme and ID Field: Begin by selecting the polygon theme and an ID Field that uniquely identifies the polygons. This ID field is only used for generating the report, so it's not necessary for the calculations. If you don't have an ID field and you don't feel like making one, you can select "- No ID Field -" and the extension will run just fine.
Size Limit: Next specify the size limit for small polygons. All polygons smaller than this limit will be dissolved into larger adjacent polygons. If you have a polygon that is smaller than the limit, but is not touching any other polygons, then it can't be dissolved. You will be alerted to that circumstance at the end of the script's operation, and there will also be a note in the report.
Choose All Polygons or Selected Polygons: If you have a very large number of polygons to dissolve, you may find it helpful to pre-select different regions of the theme or perhaps different size ranges of polygon to work with. If you choose to dissolve only selected polygons, then the tool will only consider dissolving those small polygons that are already selected. This will NOT affect which adjacent polygon a small polygon may be dissolved into. They may still be dissolved into non-selected polygons, but no non-selected polygon will be analyzed with this option.
Only dissolve polygons with same attribute value: This option will only dissolve polygons into other polygons if they have the same attribute value. If you choose this option, you will need to select the attribute field before you can click the 'OK' button. After you select the attribute field, the field name will appear on the button to indicate that the attribute field has been chosen.
Size Option: Next decide whether you want the small polygons to be dissolved into the smallest or largest adjacent polygons, or the polygon with the longest common border. If two small polygons are combined early in the process, and the combined polygon is larger than the specified size limit, then that new polygon will not be dissolved into any adjacent polygons.
Adjacency Option: Finally, decide what rule of "adjacent" you want to use. In the following illustration, Polygon 1 touches three other polygons (Polygons 2, 3 and 4). However, it only touches Polygon 4 at a single point. If you want to allow Polygon 1 to be combined with Polygon 4, then use the "Share common point or vertex" option. If you want would rather that Polygon 1 be restricted such that it can only be combined with Polygons 2 or 3, then use the "Share common line or border" option.
5) Specify hard drive location to save the new shapefile: You will still be prompted to specify a location on the hard drive to save the new shapefile of combined polygons. This shapefile will also appear in your view. This is a standard ArcView Dialog Box and should be familiar to most users. This shapefile is permanent and will not be deleted when ArcView is shut down.
6) Report: After the extension finishes, you will get a popup window with a report detailing which polygons were combined and in what order. This report is also saved to the hard drive at the location mentioned in the popup window:
Adding Record Numbers to Table:
This option provides a simple way to add a field of record numbers to your table. Many types of analysis require that you have some kind of unique ID value in your attribute table, and record numbers usually make good ID values when no other option exists. This extension also asks for a field of unique ID values, although it is not critical to the analysis and is only used to identify which specific polygons were dissolved in the report.
All you need to do is open your table, click the “Edit” menu, and then click “Create Record Number Field”. The table does NOT need to be set to Editable prior to this. The tool will add a field named [rec_num] and populate it with record number values. If a field named [rec_num] already exists in your table, the tool will append an index number to the name until it finds a name that does not exist in your table (i.e. [rec_num_1], [rec_num_2], etc.)
This extension begins by copying the polygon shapefile into a new shapefile at the specified location and adding two new fields to the new shapefile:
rec_num: The record number of that polygon in the Feature Attribute Table. This extension requires that each polygon be uniquely identified, and the record number guarantees a unique identity. This is different than the Unique ID field specified by the user, which is only used in providing Polygon ID values for the report.
dslv_area: The area of the polygon. This field is used to identify those polygons that are smaller than the specified area.
Using the area values from the dslv_area field, the extension identifies all those polygons that are smaller than the specified size. It then makes a list of those small polygons and sorts the polygons by size, from the smallest to the largest.
Beginning with the smallest polygon (or the first polygon in the list), the extension selects all the surrounding polygons that the small polygon touches. This selection includes all those polygons that the small polygon touches at only a single point.
If the user has selected the "Share common line or border" option, the extension then checks all the selected polygons and discards those that only touch at a single point. This option also checks whether the smaller polygon is enclosed by the larger.
If the user has specified an attribute field, then the extension checks all the selected polygons and discards those with different attribute values.
The extension then checks the size of all the remaining selected polygons and identifies either the largest, smallest, or the one with the longest common border, based on the user's choice.
After identifying the largest/smallest polygon, the extension then performs the UNION request to combine the two polygons. This generates a brand new combined polygon that is completely separate from the original small and large polygons. The extension then runs the CLEAN request to ensure that the new polygon is a valid polygon.
The extension then replaces the original large polygon with the new combined polygon, such that all the attribute values of the original large polygon now are associated with the new combined polygon. The original large polygon is now gone.
The extension then deletes the smaller polygon from the shapefile entirely.
It's possible that the small polygon will be an island somehow and have no other polygons adjacent to it. If this is the case, the extension will skip this polygon and insert a note in the report stating that this polygon had no adjacent polygons and therefore could not be combined with any. If this happens, you will be notified of all such island polygons in an alert popup window after the extension finishes running.
The extension then proceeds to the next small polygon in the list. It's possible at this point that the current small polygon has already been combined with an even smaller polygon, and that the new size is larger than the specified size limit. If this is the case, the extension will skip this polygon and insert a comment in the report stating that the polygon no longer needed to be combined with an adjacent large polygon. Otherwise, the extension will repeat the process described above.
The extension then repeats the entire process for all the remaining small polygons in the small polygon list.
After dissolving all the small polygons in the shapefile, the extension then removes any null polygons that may be present.
Please let the author know If the extension crashes for any reason. If it does crash, and if ArcView is still running, click the menu item “Check ‘Dissolve Adjacent’ Scripts” in the View “Help” menu to generate a report of all scripts that appear to be malfunctioning. Please copy this report into an email or text file and email it to the author. This report will help the author to identify and fix the problem.
Enjoy! Please contact the author if you have problems or find bugs.
Jeff Jenness email@example.com
3020 N. Schevene Blvd.
Flagstaff, AZ 86004
Please visit Jenness Enterprises ArcView Extensions site for more ArcView Extensions and other software by the author. We also offer customized ArcView-based GIS consultation services to help you meet your specific data analysis and application development needs.