Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

I would like to create a square buffer from a point feature but I do not understand the code that goes into it.

Similar questions have been asked on the forums.esri website but that was over 10 years ago, and it did not work when I tried the code.

How do I create a square buffer from a point feature?

share|improve this question
    
gis.stackexchange.com/questions/12479/… is essentially a duplicate (because it addresses a generalization of this question), but as there are already good answers here that are specific to square buffers, it seems best to leave both threads open and separate rather than merging them. But if you want yet more solutions, read the other thread too! –  whuber Jul 12 '12 at 13:18
2  
OK thanks whuber. I just found this website yesterday and I'm still getting familiar with it. I'll try to do that with my future posts/questions. I'm liking this site a lot better than the ArcGIS forums. –  Kimball Jul 12 '12 at 14:37
    
I didn't mean that comment as criticism in any way, Kimball: it was there to prevent merging the two threads, that's all. Welcome to our community! (And please tell your friends about us, especially those on the ArcGIS forums. :-) –  whuber Jul 12 '12 at 15:23
    
Right. I know you didn't mean it that way. I enjoy this community a lot and have already begun to tell others about this new forum. –  Kimball Jul 12 '12 at 15:40

4 Answers 4

up vote 18 down vote accepted

Try these steps with ArcMap 10:

  1. Buffer your point feature (ArcToolbox > Analysis Tools > Proximity > Buffer). Make sure to select the correct distance in the Linear unit box.
  2. Input your newly created buffers into the Feature Envelope to Polygon tool (Data Management Tools > Features > Feature Envelope to Polygon). Make sure to select the "Create multpart features" box if you have multiple points.

For a Python solution:

Using SearchCursor and InsertCursor to create square buffers

enter image description here

share|improve this answer
    
Perfect. Exactly what I needed. Thank you. –  Kimball Jul 11 '12 at 21:22
    
+1 Replies that demonstrate the solution works are the best. –  whuber Jul 12 '12 at 13:19

A possible solution would be to create your "normal" round buffers using the standard ESRI buffer tool with whatever radius you would like and then performing a Feature Envelope To Polygon on that resulting feature class of buffers. This creates a square envelope feature around the extent of each feature. Feature Envelope to Polygon is located within Data Management>Features. The model builder model would look similar to:

enter image description here

share|improve this answer
    
Once again AHigh, thank you for your help. –  Kimball Jul 11 '12 at 21:22
    
Sure, good luck. Feel free to accept the answer that most accurately answers your question. –  AHigh Jul 11 '12 at 21:25
    
Excellent solution! Also, by creating the output of the buffer as an in_memory layer (in_memory\tmpBuffer) and you can avoid writing unneeded data to disk, and make the process much faster. –  RyanDalton Jul 12 '12 at 14:15

Assuming you're using ArcObjects (please use the tags to specify the language and API you're using), you could use IEnvelope.Expand to create a square buffer from a point's envelope, as in this example: Get All Features from Point Search in GeoFeatureLayer Snippet

ESRI.ArcGIS.Geometry.IEnvelope envelope = point.Envelope;
envelope.Expand(searchTolerance, searchTolerance, false);
share|improve this answer
    
Based on the previous question (gis.stackexchange.com/questions/29324/…) I think this is intended to be done in ArcMap with minimal/no scripting. –  AHigh Jul 11 '12 at 21:22
    
Good call, maybe this will help someone else though. –  blah238 Jul 11 '12 at 21:23
    
Exactly. I'm a beginner when it comes to scripting. Thanks for help anyways. –  Kimball Jul 11 '12 at 21:24

Since the script linked at the end of Aaron's code can only be used for square buffers and doesn't make use of the newer arcpy.da module, I've written a script that can be used to create rectangle buffers. On a 10k random point dataset, it completed in 10 seconds:

enter image description here

import os, arcpy

point_FC = arcpy.GetParameterAsText(0)
w = float(arcpy.GetParameterAsText(1))
h = float(arcpy.GetParameterAsText(2))
output_FC = arcpy.GetParameterAsText(3)

def rect(coord, w, h):
        #Given XY coordinates and rectangle dimensions,
        #return a polygon object of a rectangle centered about the point
        x,y = coord
        w *= 0.5
        h *= 0.5
        xmin,xmax = x-w, x+w
        ymin,ymax = y-h, y+h
        poly = ((xmin, ymax), (xmax, ymax), (xmax, ymin), (xmin, ymin))
        return arcpy.Polygon(arcpy.Array(arcpy.Point(*p) for p in poly))

#Create output feature class.
spatref = arcpy.Describe(point_FC).spatialReference
folder, base = os.path.split(output_FC)
arcpy.CreateFeatureclass_management(folder, base, "POLYGON", spatial_reference=spatref)

#Get field object for every field in input except OID and Shape.
fields = [f for f in arcpy.ListFields(point_FC) if f.type not in ("OID", "Geometry")]

for field in fields:
         arcpy.AddField_management(output_FC, field.name, field.type, field.precision,
                                   field.scale, field.length, field.aliasName,
                                   field.isNullable, field.required, field.domain)

#Get field names to be inputted to cursors.
#Need SHAPE@XY token to read point coords and SHAPE@ token to write polygon coords.
fnames = [f.name for f in fields]
fields_in = fnames[::]
fields_out = fnames[::]
fields_in.append("SHAPE@XY")
fields_out.append("SHAPE@")

#Create buffers and write attributes to output FC, if any.
count = int(arcpy.GetCount_management(point_FC)[0])
arcpy.SetProgressor("step", "Buffering...", 0, count, 1)
with arcpy.da.SearchCursor(point_FC, fields_in) as Scursor,  arcpy.da.InsertCursor(output_FC, fields_out) as Icursor:
        for i,row_in in enumerate(Scursor):                
                #"Convert" point to rectangle
                arcpy.SetProgressorPosition(i)
                feature = list(row_in)
                feature[-1] = rect(feature[-1], w, h)                
                Icursor.insertRow(feature)
share|improve this answer
    
+1 This is an excellent way to create rectangular or square buffers. –  Aaron Sep 22 at 16:41

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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