In OpenStreetMap data, some large areas are tagged with a residential=yes tag. Actually within this large polygon there are multiple smaller (rectangular) houses (which are actually not drawn as yet). I would like to 'slice' the large polygon into smaller rectangular polygons. Or looking at it another way, I would like to or auto-generate as many fixed size rectangles (houses) into the larger area. I would like to achieve this either using QGIS or MapWindow, as I do not have ArcGIS. Is there any way to do this?
[GIS] Sub-dividing a polygon into smaller polygons
mapwindowopenstreetmappolygonqgisvector-grid
Related Solutions
Attach script
import arcpy, traceback, os, sys, math
from math import radians,sin,cos
from arcpy import env
env.overwriteOutput = True
inFC=arcpy.GetParameterAsText(0)
outFolder=arcpy.GetParameterAsText(1)
rectangle=r'in_memory\rectangle'
tempf=r'd:\scratch\many.shp'
def showPyMessage():
arcpy.AddMessage(str(time.ctime()) + " - " + message)
def ShapeMake(pGon,angle):
ar=arcpy.Array()
a=radians(angle)
part=pGon.getPart(0)
for p in part:
x,y=p.X,p.Y
xN=cos(a)*x+sin(a)*y
yN=-sin(a)*x+cos(a)*y
pN=arcpy.Point(xN,yN)
ar.add(pN)
pgonRotated=arcpy.Polygon(ar)
return pgonRotated
try:
arcpy.MinimumBoundingGeometry_management(inFC,rectangle,
"RECTANGLE_BY_WIDTH", "NONE", "", "MBG_FIELDS")
m,n=0,0
with arcpy.da.SearchCursor(rectangle, ("SHAPE@","MBG_Orientation")) as rows:
for row in rows:
shp,angle = row
onside=ShapeMake(shp,-angle)
extent=onside.extent
origPoint='%s %s' %(extent.XMin,extent.YMin)
yPoint='%s %s' %(extent.XMin,extent.YMax)
endPoint='%s %s' %(extent.XMax,extent.YMax)
if extent.width>extent.height:nRows,nCols=1,8
else:nRows,nCols=8,1
arcpy.CreateFishnet_management(tempf, origPoint,yPoint,
"0", "0", nRows, nCols,endPoint,
"NO_LABELS", "", "POLYGON")
arcpy.AddField_management(tempf, "Rotation", "DOUBLE")
arcpy.AddField_management(tempf, "Label", "Text", 25)
m+=1
with arcpy.da.UpdateCursor(tempf, ["SHAPE@","Rotation","Label"]) as rows:
for row in rows:
shp = row[0]
rollBack=ShapeMake(shp,angle)
row[0]=rollBack
row[1]=angle
m+=1
row[2]=str(m).zfill(8)
rows.updateRow(row)
n+=1
arcpy.CopyFeatures_management(tempf, '%s%sfnet_%s'%(outFolder,os.sep,str(n).zfill(4)))
except:
message = "\n*** PYTHON ERRORS *** "; showPyMessage()
message = "Python Traceback Info: " + traceback.format_tb(sys.exc_info()[2])[0]; showPyMessage()
message = "Python Error Info: " + str(sys.exc_type)+ ": " + str(sys.exc_value) + "\n"; showPyMessage()
to tool:
Input feature layer:
Merge all shapefiles from Output Folder into single feature class shown below:
Best Answer
It won't look terribly realistic without taking into account roads. I suggest you'll need to work out a few classes of population density / urbanization, and build separate models for how you'd populate each one. A very simplistic low-population suburban model may look like:
This should give you, very roughly, something like this, albeit without the cul-de-sac effect: