Density points to equally divided polygons

01-14-2016 10:14 AM
New Contributor II

How do I convert a point layer into multiple polygons? Ideally each polygon would take into account the weight of each point.

EDIT: Just to clarify my intention. I have a layer with 2,000 points. I want to end up with a polygon layer which has three polygons where each polygon covers the area of 1/3 of those points.

Message was edited by: Roberto DeDeus

0 Kudos
7 Replies
Regular Contributor III
0 Kudos
MVP Esteemed Contributor

a voronoi diagram will subdivide space from input points.

Examining local variation—Help | ArcGIS for Desktop in geostatistical analyst

Create Thiessen Polygons—Help | ArcGIS for Desktop  with an advanced license

or   Triangulation tools...

my humble but free offering

Esri Esteemed Contributor

Dan, that's a great Thiessen tool you uploaded to ArcGIS Online! Thanx for sharing!

MVP Esteemed Contributor

Well your modified question, is indeed different... perhaps Aggregate Points—Help | ArcGIS for Desktop

might be a first step, although getting to the target of 3 polygons and 3 only may be a bit out of its realm.  But you will need an Advanced license.  And perhaps Aggregate Polygons—Help | ArcGIS for Desktop  could be used in association with it after the initial clustering

MVP Honored Contributor

Can you provide a picture of what you hope to accomplish? There are (almost) an infinite number of solutions to this problem the way I see it.

0 Kudos
Esri Esteemed Contributor

A rather manual way (and using an Advanced license) could be:

  • Create Thiessen Polygons based on the input points
  • Generate a Near table from the points to the polygons limiting the maximum number of closest matched to a third of the total number of points and not limiting the search distance (this will create a huge table in your case using 2000 points)
  • From the table, create two relates. One towards the points using the IN_FID matching the OBJECTID and one towards the thiessen polygons using the NEAR_FID matching the OBJECTID of the polygons.
  • In the point featureclass, select a single extreme point:

  • Open the attribute table of the points and use the Relate to select the nearest polygons:

  • In the Near table use the relate to the polygons to select the corresponding Thiessen polygons:

  • Add a new numeric field to the polygons and fill the field with the value 1 (group 1)
  • Do the same based on an extreme point located at the opposite of the area (assign value 3)

  • Select the features where the new goup field IS NULL
  • Fill that selection with value 2:

  • You can make the result a bit more presentable by clipping it with the area of interest or using the Minimum Bounding Geometry tool to create a ConvexHull, buffer that with a representative distance and clip it. Dissolve the polygons by the group field:

This is very manual and you may have a problem when using 2000 points. In my case using 300 point the number of records in the Near table was 300 * 100 = 30000. In you case it will be 2000 * 667 = 1334000.

I'm sure there must a nice algoritm implemented in Python to do the job...

Esri Esteemed Contributor

BTW, it would be nice if the Grouping Analysis—Help | ArcGIS for Desktop  would do the job, but it has no option to divide into equal groups.

Maybe the Location-allocation analysis—Help | ArcGIS for Desktop could be helpful?