これは答えではありません、興味がある人のために私がPythonソリューションを投稿すると思っただけです:
# ---------------------------------------------------------------------------
# PAGE MAKER
#
# ---------------------------------------------------------------------------
# Import arcpy module
import arcpy, traceback, os, sys
from arcpy import env
width=650
height=500
try:
def showPyMessage():
arcpy.AddMessage(str(time.ctime()) + " - " + message)
mxd = arcpy.mapping.MapDocument("CURRENT")
points = arcpy.mapping.ListLayers(mxd,"points")[0]
pgons = arcpy.mapping.ListLayers(mxd,"pages")[0]
g=arcpy.Geometry()
geometryList=arcpy.CopyFeatures_management(points,g)
geometryList=[p.firstPoint for p in geometryList]
curT = arcpy.da.InsertCursor(pgons,"SHAPE@")
while True:
nPoints=len(geometryList)
small=[geometryList.pop(0)]
for p in geometryList:
small.append(p)
mPoint=arcpy.Multipoint(arcpy.Array(small))
ext=mPoint.extent
cHeight=ext.height
cWidth=ext.width
if cHeight>height or cWidth>width:
small.remove(p)
mPoint=arcpy.Multipoint(arcpy.Array(small))
ext=mPoint.extent
xC=(ext.XMin+ext.XMax)/2
yC=(ext.YMin+ext.YMax)/2
LL=arcpy.Point (xC-width/2,yC-height/2)
UL=arcpy.Point (xC-width/2,yC+height/2)
UR=arcpy.Point (xC+width/2,yC+height/2)
LR=arcpy.Point (xC+width/2,yC-height/2)
pgon=arcpy.Polygon(arcpy.Array([LL,UL,UR,LR]))
curT.insertRow((pgon,))
short=filter(lambda x: x not in small,geometryList)
arcpy.AddMessage('Grabbed %i points, %i to go' %(len(small),len(short)))
if len(short)==0: break
geometryList=short[:]
del mxd
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()
最近調査計画に適用しました:
更新:
一部のパターンでは、「迷子」ポイントを最初に処理する方法が適しているようです。私は「凸包」の皮を使ってそれらを識別しました、whuberのアイデア、投稿が見つかりません、申し訳ありません。