21

I'm using ArcMap 10.3.

I have a layer of different land use types. I found out that many polygons overlap each other and as a result the same polygon have two different land use types.

Using @radouxju's answer, I built a topology for the land use layer (with the mustn't overlap rule). Then, I used merge to fix the large overlapping polygons.

However, I have thousands of small overlapping polygons. I can fix all of them manually which will be time taking.

Is there a faster way to fix all these errors?

enter image description here

enter image description here


I have updated the map to show all land use types. Polygons are overlapping each others; not slivers.

  • 2
    Would the Integrate Tool work for you? – Fezter Nov 10 '15 at 4:55
  • @Fezter I don't think so because they polygons don't have the same area and I can't use the same XY tolerance for the whole layer. – aelwan Nov 22 '15 at 4:34
  • 1
    @aelwan: What's your goal with this data? Are you creating this data to be used by others (as if you are the originator of the data)? Or are you trying to "clean it up" for use in a map or analysis? The reason I ask is this data looks like garbage data. It's beyond GIS analysis, it needs to be completely redigitized and have someone with authority (working knowledge) make informed decisions on where these boundaries are supposed to be. Otherwise, I'd just leave the data as it is. – alexGIS Apr 21 '16 at 18:41
  • @alexGIS I totally agree with you on how bad the data is. However, that is the BEST data I got. I'm trying to clean for analysis. – aelwan Apr 28 '16 at 1:03
6
+50

Concern raised by @Adam Cara is very valid. However when I looked at the self-intersection it appeared that most of them are either skinny bits on the boundary between 2 massive polygons Or disconnected bits/islands of a big polygon sitting inside another one. In this case erasing overlaps, and assigning dissolved overlaps the attribute of nearest neighbour (whichever comes first) can work.

Process:

arcpy.Intersect_analysis("Landuse2b #","D:/Scratch/mpart.shp","ALL","#","INPUT")
arcpy.MultipartToSinglepart_management("mpart","D:/Scratch/spart.shp")
arcpy.Dissolve_management("spart","D:/Scratch/dissolved_1.shp","#","#","SINGLE_PART","DISSOLVE_LINES")
arcpy.Erase_analysis("Landuse2b","dissolved_1","D:/Scratch/erased.shp","#")
arcpy.DeleteField_management("spart","FID_Landus;OBJECTID;Lnduse2013;Shape_Leng;Shape_Area")
arcpy.SpatialJoin_analysis("spart","erased","D:/Scratch/sj_1.shp","JOIN_ONE_TO_ONE","KEEP_ALL"…..)
arcpy.Merge_management("sj;erased","D:/Scratch/merge_1.shp"….)
arcpy.Dissolve_management("merge_1","D:/Scratch/dissolved.shp","Lnduse2013","#","SINGLE_PART","DISSOLVE_LINES")

Test:

arcpy.Intersect_analysis("dissolved #","D:/Scratch/test.shp","ALL","#","INPUT")

Message:

  • Executing: Intersect "dissolved #" D:\Scratch\test.shp ALL # INPUT
  • Start Time: Fri Apr 22 10:16:07 2016
  • Reading Features...
  • Cracking Features...
  • Assembling Features...
  • WARNING 000117: Warning empty output generated.
  • Succeeded at Fri Apr 22 10:16:09 2016 (Elapsed Time: 2.34 seconds)

Note this message means that there are no self-intersects in the output from final Dissolve

Result:

https://drive.google.com/file/d/0B6B33FrGNitPT0FvbVdHQm0xMDg/view?usp=sharing

  • 1
    This solution makes it "neat", but not "correct". If OP isn't concerned that an area that was overlapping with "Dairy" and "Sheep/Beef" is now recategorized to "Builtup/Parks/Others", and other such arbitrary recategorizations I see when comparing the input to the output, then this solution works. That being said, it's an elegant workflow, nice work. – alexGIS Apr 22 '16 at 19:13
  • 1
    With such data nobody knows what IS correct – FelixIP Apr 22 '16 at 20:22
7

If your polygons are slivers the eliminate command works well to merge them into either the larger area polygon or the longest edge.

If the polygons are overlaps then there may be an easier way, but I would select out the overlaps to a separate layer, then union them back in, creating the slivers and using the eliminate command.

  • Thanks for your time and help. My polygons are overlapping. In order to follow your answer, how can I select out the overlaps to a separate layer? The overlaps are shown as area errors after I built the topology. – aelwan Nov 11 '15 at 2:19
  • Just run the Intersect (resources.arcgis.com/EN/HELP/MAIN/10.1/index.html#//…) on the polygons layer. The result of Intersect will be all the overlaps in this layer. – iRfAn Nov 11 '15 at 8:33
  • @iRfAn Thank you I run the intersect and I got the overlap. – aelwan Nov 22 '15 at 5:32
  • @Bryan Waller I tried to follow what you suggested: I selected the overlaps to a separate layer using "intersect"; then union them back in "BUT NO SILVERS WERE CREATED". After I used the eliminate command, I can still find the same polygon has two different land use types. Any help would be appreciated. You can find the land use layer here goo.gl/0aE3wq – aelwan Nov 22 '15 at 5:43
6
  1. Select a small area and convert into two shape files to see if this process is working.
  2. Create a new field named test (number) in s1 and s2.
  3. Intersect two shape files S1 and S2.
  4. Overlapping areas will be identified in a separate file e.g. named Common1 (Hatched Area in figure).
  5. Calculate the field test as 1 in Common.
  6. Union S1 and Common
  7. Select 1enter image description here from test field and delete the hatched area.
  8. Now Merge s2 and common. Erase command can be used to erase the common area.
  • @Shampe Thanks for your help. The overlaps I have are within the same shapefile not two shape files. – aelwan Nov 23 '15 at 22:49
6

Have you considered breaking the individual land use classes into separate shapefiles to work with them that way. I first thought of running an intersect but I saw that failed above. If you have seven separate shapefiles though, you may be able to manipulate them more easily.

The main question I have is if there is overlap, do you have a hierarchy for which class wins and should show in the end? For example: if Cropping and Dairy overlap, which do you keep? Once you have this hierarchy settled, intersect 2 classes at a time, starting with the lowest and ending with the highest. If your output is empty on a given intersect, that means they do not intersect.

  • 2
    You bring up the most important issue here: How to classify overlaps? Just making the data "neat" doesn't mean it's "correct". – alexGIS Apr 21 '16 at 18:12
  • @alexGIS Again, I agree with you. However, given the goal of this analysis and the small area of the overlapping polygons of the data, the the category of the overlap is not the main goal as compared to fixing the overlaps. – aelwan Apr 28 '16 at 1:08
  • This might be a good idea for another reason. The overlaps might represent changes in field boundaries and cropping over time. – nmtoken Nov 26 '16 at 10:17
5

Once you have created a topology, you have identified the errors.

In the list that shows the errors, you can select all the errors of the same type, right click on this list and chose a "fix". In your case, the fix would be "create feature", which will create a new polygon were two polygons overlap. This is the first step (note that you can achieve a similar result by using the union tool with your land use layer as single input, then multipart to single part tool (but then the overlaps will still overlap, so you need to delete one of the attribute value), or convert your polygon to lines then back to polygon (but then you loose attribute, you need spatial join to recover the attributes))

The second step would consist in removing the small polygons. The problem is that you don't really have a rule to decide which attribute value you would like to keep. My favourite tool is then the eliminate tool, where you can choose to which neighboring polygon the small polygons will be merged (based on the largest shared boundary or the largest area)

Last remark : if you do have a rule for the priority land use class, iteratively select the small polygons (which don't have a label) by location to assign each land use class by decreasing order of priority and use field calculator to assign their label.

4

While I agree with others about whether they are polygons overlap or slivers, from what I am seeing here with this picture you are showing everyone. I'd recommend you to change your symbology colors for land use. This way you can see which one should be go or the other. The one color you showed us in pink is really difficult to read and it may be time-consuming for you.

On the second part, I would select all of the either overlaps or slivers polygons and export them to a new shapefile. This way you can identify them what they are in land use.

  • Thanks for your help. I have updated the map to show the colors for all land uses. – aelwan Nov 23 '15 at 23:14
4

One possible solution, if you have Spatial Analyst or 3D Analyst, that you convert the land use polygons to a raster image using (Polygon to Raster Conversion) tool to ensure that no overlapping polygons will exit, since you cannot get overlapping pixels. Then, convert the raster back to polygons using (Raster to Polygon) tool, if you still need it in vector format. In this case choose high resolution cell size (detailed cell size) to get good quality polygons, but you need to consider the memory. You may need to try it several times by changing the cell size until you will be satisfied with the results.You may need to do some smoothing to the output polygons, if it is not perfect, but that depends if you have at least Standard License for ArcGIS Desktop. I know it is not an easy task, but it can solve your problem.

4

Check the few gaps or few overlaps between polygons to find tolerance and use Integrate tool from Arctoolbox with proper tolerance values.

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.