创建随机点 (Data Management)
用法
-
将生成随机点的区域可以通过约束面要素、约束点要素或约束线要素来定义,也可以通过约束范围窗口来定义。
-
可将点数参数指定为数字或指定为约束要素类中的数值字段,其中约束要素类需包含用于表示每个要素中所放置的随机点的数量的值。此字段选项仅对面约束要素或线约束要素有效。如果点数以数字形式提供,则将在约束要素类中每个要素的内部或沿线生成该数量的随机点。
如果当前使用的约束要素类具有多个要素,而且希望指定要生成的随机点的总数(相对于要放置在每个要素内部的随机点的数量),则必须先使用融合工具,以使约束要素类只包含单一要素,然后将已融合的要素类用作约束要素类。
输出要素类的坐标系将是下列某种类型的坐标系统
- 约束要素类(若指定)
- 地图数据框(若使用地图中的图层或要素类路径在 ArcMap 中指定约束范围)
- 要素类(若使用要素类的路径在 Python 中指定约束范围)
- 输出坐标系地理处理环境(若设定,并覆盖上文详细介绍的所有其他行为)
- 未知(如果以上几点均不适用)
-
要将随机值指定给随机放置的点,首先使用此工具生成随机点。然后,使用添加字段工具在随机点要素类中创建新的数值字段。建议使用的字段类型为长整型或浮点型。然后,使用计算字段工具将随机值指定给随机点要素类中的空字段。 要在 a 和 b 之间(包括 a 和 b)生成随机整数,请使用 Python 表达式 random.randint(a,b)。 要在 a 和 b 之间(不包括 a 和 b)生成随机浮点数,请使用 Python 表达式 random.uniform(a,b)。 请勿忘记执行以下操作:将表达式类型设置为 PYTHON,替换 a 值和 b 值,以及使用表达式 import random 将随机模块导入代码块部分。
-
可将约束范围参数以一组最小和最大 x 坐标和 y 坐标的形式输入,或者以要素图层范围或要素类范围的形式输入。
-
如果约束要素类和约束范围均已指定,将使用约束要素类值而忽略约束范围值。
-
如果在不违反最小允许距离规范的情况下,无法在约束区域内放置更多的随机点,约束区域中随机点的数量将减少至小于最小允许距离的最大允许值。
-
可以将最小允许距离参数指定为线性单位或包含数值的约束要素中的字段。此值将确定每个输入要素中的随机点之间的最小允许距离。此字段选项仅对面约束要素或线约束要素有效。 如果在不同约束要素部分的内部或沿线生成随机点,则随机点也可能位于最小允许距离之内。
-
将点要素用作约束要素类会创建约束点要素的随机子集。不会生成新的点位置。
-
点数参数和最小允许距离参数的非整型(整数)正值将被四舍五入为最接近的整数。非数值或负值将被设置为 0。
语法
参数 | 说明 | 数据类型 |
out_path |
创建随机点要素类所要使用的位置或工作空间。此位置或工作空间必须已经存在。 | Feature Dataset;Workspace |
out_name |
要创建的随机点要素类的名称。 | String |
constraining_feature_class (可选) |
将在此要素类中的要素的内部或沿线生成随机点。约束要素类可以是点、多点、线或面。 点将被随机放置在面要素内、线要素沿线或点要素位置处。此要素类中的每个要素内部都会生成指定数量的点(例如,如果您指定 100 个点且约束要素类中包含 5 个要素,则每个要素中会生成 100 个随机点,共生成 500 个点)。 | Feature Layer |
constraining_extent (可选) |
将在此范围内生成随机点。仅当未指定约束要素类时,才会使用约束范围。 | Extent;Feature Layer;Raster Layer |
number_of_points_or_field (可选) |
要随机生成的点的数量。 可将点数指定为长整型数值或指定为约束要素中的字段,其中约束要素需包含表示每个要素中要放置多少随机点的数值。此字段选项仅对面约束要素或线约束要素有效。如果点数以长整型数值的形式提供,则将在约束要素类中每个要素的内部或沿线生成该数量的随机点。 | Field;Long |
minimum_allowed_distance (可选) |
任意两个随机放置的点之间的最小允许距离。 如果将此距离值指定为 1 米,则所有随机点距最近点的距离都将大于 1 米。 | Field;Linear unit |
create_multipoint_output (可选) |
确定输出要素类是多部分要素还是单部分要素。
| Boolean |
multipoint_size (可选) |
如果使用“创建多点输出”选项(选中/MULTIPOINT),此参数用于指定每个多点几何中要放置的随机点的数量。 | Long |
代码实例
以下 Python 窗口脚本演示了如何在即时模式下使用创建随机点 (CreateRandomPoints) 工具:
import arcpy
arcpy.CreateRandomPoints_management("c:/data/project", "samplepoints", "c:/data/studyarea.shp", "", 500, "", "POINT", "")
以下独立 Python 脚本演示了如何使用随机值创建随机点:
#Name: RandomPointsRandomValues.py
#Purpose: create random points with random values
# Import system modules
import arcpy, os, random
from arcpy import env
# Create random points in the features of a constraining feature class
# Number of points for each feature determined by the value in the field specified
outGDB = "C:/data/county.gdb"
outName = "randpeople"
conFC = "C:/data/county.gdb/blocks"
numField = "POP2000"
arcpy.CreateRandomPoints_management(outGDB, outName, conFC, "", numField)
# set workspace
env.workspace = "C:/data/county.gdb"
# Create fields for random values
fieldInt = "fieldInt"
fieldFlt = "fieldFlt"
arcpy.AddField_management(outName, fieldInt, "LONG") # add long integer field
arcpy.AddField_management(outName, fieldFlt, "FLOAT") # add float field
# Calculate random values between 1-100 in the new fields
arcpy.CalculateField_management(outName, fieldInt, "random.randint(1,100)","PYTHON","import random")
arcpy.CalculateField_management(outName, fieldFlt, "random.uniform(1,100)","PYTHON","import random")
以下独立 Python 脚本演示了使用创建随机点 (CreateRandomPoints) 工具的几种方法:
#Name: RandomPoints.py
#Purpose: create several types of random points feature classes
# Import system modules
import arcpy, os
from arcpy import env
#set environment settings
env.overWriteOutput = True
# Create random points in an extent defined simply by numbers
outFolder = "C:/data"
numExtent = "0 0 1000 1000"
numPoints = 100
outName = "myRandPnts.shp"
env.outputCoordinateSystem = "Coordinate Systems/Projected Coordinate Systems/World/Miller Cylindrical (world).prj"
arcpy.CreateRandomPoints_management(outFolder, outName, "", numExtent, numPoints)
env.outputCoordinateSystem = ""
# Create random points in an extent defined by another feature class
outName = "testpoints.shp"
fcExtent = "C:/data/studyarea.shp"
arcpy.CreateRandomPoints_management(outFolder, outName, "", fcExtent, numPoints)
# Create random points in the features of a constraining feature class
# Number of points for each feature determined by the value in the field specified
outGDB = "C:/data/county.gdb"
outName = "randpeople"
conFC = "C:/data/county.gdb/blocks"
numField = "POP2000"
arcpy.CreateRandomPoints_management(outGDB, outName, conFC, "", numField)
#create random points in the features of a constraining
#feature class with a minimum allowed distance
outName = "constparcelpnts"
conFC = "C:/data/county.gdb/parcels"
numPoints = 10
minDistance = "5 Feet"
arcpy.CreateRandomPoints_management(outGDB, outName, conFC, "", numPoints, minDistance)
#Create random points with a multipoint output
outName = "randomMPs"
fcExtent = "C:/data/county.gdb/county"
numPoints = 100
numMP = 10
arcpy.CreateRandomPoints_management(outGDB, outName, "", fcExtent, numPoints, "", "MULTIPOINT", numMP)