要素关系存储为稀疏矩阵,因此,只有非零关系会被写入 SWM 文件。通常,即使 SWM 文件包含的非零关系超过 1500 万个,工具也会正常运行。如果在使用 SWM 文件时遇到内存错误,则应重新编辑定义要素关系的方法。根据经验,您应该以空间权重矩阵为目标,也就是说,每个要素至少具有 1 个相邻要素,最多具有大约 8 个相邻要素,任何要素的相邻要素都不会超过 1000 个。
如果未投影输入要素类(即,坐标单位为度、分和秒),或者将输出坐标系设置为地理坐标系,则采用弦测量方法计算距离。使用弦距离测量法是因为此方法不仅计算速度快,而且提供真实测地线距离的良好估测,至少对于彼此 30 度以内的点是这样。弦距离以扁椭圆体为基础。给定地球表面上的任意两点,两点之间的弦距离是从三维地球穿过然后连接该两点的一条线的长度。弦距离以米为单位输出。
警告:
如果您的研究区域超过 30 度,则请确保投影数据。测地线距离超过 30 度时,弦距离不是理想的估测方法。
如果分析时使用弦距离,阈值距离参数(如指定)应以米为单位。
在ArcGIS 10.2.1 之前的版本中,如果所选的参数和环境设置要求通过地理坐标(度、分、秒)计算结果,则会显示一条警告消息。该警告消息建议您投影数据到投影坐标系中,以使距离计算结果更为准确。但自 10.2.1 起,每当需要使用地理坐标系进行计算时,该工具都将计算弦距离。
警告:
由于该变化,如果您通过 ArcGIS 10.2.1 之前版本创建模型,且模型包含硬编码的地理坐标系参数值,则可能需要修改包含该工具的模型。例如,如果将距离参数设置为 0.0025 度,则需要将固定值的单位从度转化为米,然后重新保存模型。
对于线和面要素,距离计算中会使用要素的质心。对于多点、折线或由多部分组成的面,将会使用所有要素部分的加权平均中心来计算质心。点要素的加权项是 1,线要素的加权项是长度,而面要素的加权项是面积。
唯一 ID 字段与运行此工具后所获得的要素关系关联。因此,每个要素的唯一 ID 值都必须唯一,而且通常应该位于与要素类一同保留的永久性字段中。如果没有唯一 ID 字段,则可以轻松地创建一个,方法是向要素类表添加一个新的整型字段(添加字段),然后将此字段的值计算为与FID 或OBJECTID 字段的值相等(计算字段)。由于复制或编辑要素类时FID 和OBJECTID 字段值可能会发生变化,所以不能直接对唯一 ID 参数使用这些字段。
相邻要素的数目参数可以覆盖“空间关系反距离或固定距离概念化”的阈值距离参数。如果指定的阈值距离为10 英里,相邻要素数目参数为3,则所有要素都至少会接收到 3 个相邻要素(即使必须增加距离阈值才能找到它们)。只有在未达到最小相邻要素数时,才增加距离阈值。
空间关系的概念化参数的CONVERT_TABLE 选项可用来将ASCII 空间权重矩阵文件转换为SWM 格式的空间权重矩阵文件。首先,需要将 ASCII 权重置入一个有格式的表(例如,使用 Excel)中。
警告:
如果您的表包含自然电位的权重,则在 SWM 输出文件中会忽略它们,而在分析中使用默认的自然电位值。热点分析工具的默认自然电位值是 1,但可以通过指定自然电位字段值覆盖此值;对于所有其他工具,默认自然电位值为零。
对于面要素,几乎始终需要为行标准化参数选择ROW。如果每个要素所具有的邻域数目由聚合方案或者采样过程决定,而不是反映您所分析的变量的实际空间分布,则行标准化将减少偏移。
空间关系建模帮助主题提供了有关此工具的参数的附加信息。
可以使用空间权重矩阵文件的工具会在进行分析之前将要素几何投影到先前的输出坐标系,并且所有数学计算均基于输出坐标系。因此,如果输出坐标系设置与输入要素类空间参考不匹配,对于使用空间权重矩阵文件的所有分析,请确保输出坐标系与在创建空间权重矩阵文件时使用的设置匹配;或者对输入要素类进行投影,使得输入要素类与空间权重矩阵文件相关的空间参考相匹配。
警告:
在使用 shapefile 时,请注意 shapefile 无法存储空值。根据非 shapefile 输入创建 shapefile 的工具或其他过程可能会将空值存储(或解释)为零。某些情况下,空值则以极大的负值储存于 shapefile 中。这会产生意外的结果。有关详细信息,请参阅shapefile 输出的地理处理注意事项。

语法

GenerateSpatialWeightsMatrix_stats (Input_Feature_Class, Unique_ID_Field, Output_Spatial_Weights_Matrix_File, Conceptualization_of_Spatial_Relationships, {Distance_Method}, {Exponent}, {Threshold_Distance}, {Number_of_Neighbors}, {Row_Standardization}, {Input_Table}, {Date_Time_Field}, {Date_Time_Interval_Type}, {Date_Time_Interval_Value})

参数说明数据类型
Input_Feature_Class
将被评估要素空间关系的要素类。
Feature Class
Unique_ID_Field
包含输入要素类中每个要素不同值的整型字段。如果没有“唯一 ID”字段,则可以创建一个,方法是向要素类表添加一个整型字段,然后将此字段的值计算为与 FID 或OBJECTID 字段的值相等。
Field
Output_Spatial_Weights_Matrix_File
要创建的空间权重矩阵文件 (.swm) 的完整路径。
File
Conceptualization_of_Spatial_Relationships
指定要素空间关系的概念化方式。
INVERSE_DISTANCE —一个要素对另一个要素的影响随着距离的增加而减少。FIXED_DISTANCE —将每个要素指定临界距离内的所有要素都包含在分析中;将临界距离外的所有要素都排除在外。K_NEAREST_NEIGHBORS —将最近的 k 要素包含在分析中;k 是指定的数字参数。CONTIGUITY_EDGES_ONLY —共用一个边界的面要素是相邻要素。CONTIGUITY_EDGES_CORNERS —共用一个边界和/或一个结点的面要素是相邻要素。DELAUNAY_TRIANGULATION —基于要素质心创建不重叠三角形的网格;使用相同边且与三角形结点关联的要素是相邻要素。SPACE_TIME_WINDOW —相邻要素是指在指定的临界距离内且在彼此的指定时间间隔内出现的要素。CONVERT_TABLE —在表中定义空间关系。String
Distance_Method
(可选)
指定计算每个要素与邻近要素之间的距离的方式。
EUCLIDEAN —两点间的直线距离(笔直地)MANHATTAN —沿垂直轴度量的两点间的距离(城市街区);计算方法是对两点的 x 和y坐标的差值(绝对值)求和。String
Exponent
(可选)
反距离计算参数。典型值是 1 或2。
Double
Threshold_Distance
(可选)
为空间关系的“反距离”和“固定距离”概念化指定中断距离。使用在环境输出坐标系中指定的单位输入此值。为空间关系的“空间时间窗”概念化定义“空间”窗的大小。
零值表明应未应用任何距离阈值。此参数留空时,将根据输出要素类范围和要素数量计算默认阈值。
Double
Number_of_Neighbors
(可选)
用于表示相邻要素最小数目或精确数目的整数。对于K_NEAREST_NEIGHBORS,每个要素的相邻要素数正好等于这个指定数目。对于INVERSE_DISTANCE 或FIXED_DISTANCE,每个要素将至少具有这些数量的相邻要素(如有必要,距离阈值将临时增大以确保达到这个相邻要素数)。选中一个邻接空间关系的概念化后,将向每个面分配至少该最小数量的相邻要素。对于具有少于此数量相邻要素的面,将根据要素质心邻近性获得附加相邻要素。
Long
Row_Standardization
(可选)
当要素的分布由于采样设计或施加的聚合方案而可能出现偏离时,建议使用行标准化。
ROW_STANDARDIZATION —按行对空间权重执行标准化。每个权重都除以它的行总和。NO_STANDARDIZATION —不对空间权重执行标准化。Boolean
Input_Table
(可选)
由输入要素类中每个要素相对于其他要素的数字权重组成的表。必填字段是“输入要素类唯一 ID”字段、“NID”(相邻要素 ID)和“权重”。
Table
Date_Time_Field
(可选)
包含每个要素的时间戳的日期字段。
Field
Date_Time_Interval_Type
(可选)
用于测量时间的单位。
SECONDS —秒MINUTES —分钟HOURS —小时DAYS —天WEEKS —周MONTHS —30 天YEARS —年String
Date_Time_Interval_Value
(可选)
反映构成时间窗的时间单位数量的整数。
例如,如果为“日期/时间间隔类型”选择 HOURS,为“日期/时间间隔值”选择 3,则时间窗为 3 小时;位于指定空间窗和指定时间窗内的要素将成为相邻要素。
Long

代码示例

生成空间权重矩阵 (GenerateSpatialWeightsMatrix) 示例 1(Python 窗口)
下面的 Python 窗口脚本演示了如何使用生成空间权重矩阵 (GenerateSpatialWeightsMatrix) 工具。
importarcpyarcpy.env.workspace="C:/data"arcpy.GenerateSpatialWeightsMatrix_stats("911Count.shp","MYID","euclidean6Neighs.swm","K_NEAREST_NEIGHBORS","#","#","#",6,"NO_STANDARDIZATION")
生成空间权重矩阵 (GenerateSpatialWeightsMatrix) 示例 2(独立 Python 脚本)
下面的独立 Python 脚本演示了如何使用 GenerateSpatialWeightsMatrix 工具。
# Analyze the spatial distribution of 911 calls in a metropolitan area# using the Hot-Spot Analysis Tool (Local Gi*)# Import system modulesimportarcpy# Set property to overwrite existing output, by defaultarcpy.env.overwriteOutput=True# Local variables...workspace="C:/Data"try:# Set the current workspace (to avoid having to specify the full path to the feature classes each time)arcpy.env.workspace=workspace# Copy the input feature class and integrate the points to snap# together at 500 feet# Process: Copy Features and Integratecf=arcpy.CopyFeatures_management("911Calls.shp","911Copied.shp","#",0,0,0)integrate=arcpy.Integrate_management("911Copied.shp #","500 Feet")# Use Collect Events to count the number of calls at each location# Process: Collect Eventsce=arcpy.CollectEvents_stats("911Copied.shp","911Count.shp","Count","#")# Add a unique ID field to the count feature class# Process: Add Field and Calculate Fieldaf=arcpy.AddField_management("911Count.shp","MyID","LONG","#","#","#","#","NON_NULLABLE","NON_REQUIRED","#","911Count.shp")cf=arcpy.CalculateField_management("911Count.shp","MyID","[FID]","VB")# Create Spatial Weights Matrix for Calculations# Process: Generate Spatial Weights Matrix...swm=arcpy.GenerateSpatialWeightsMatrix_stats("911Count.shp","MYID","euclidean6Neighs.swm","K_NEAREST_NEIGHBORS","#","#","#",6,"NO_STANDARDIZATION")# Hot Spot Analysis of 911 Calls# Process: Hot Spot Analysis (Getis-Ord Gi*)hs=arcpy.HotSpots_stats("911Count.shp","ICOUNT","911HotSpots.shp","GET_SPATIAL_WEIGHTS_FROM_FILE","EUCLIDEAN_DISTANCE","NONE","#","#","euclidean6Neighs.swm")except:# If an error occurred when running the tool, print out the error message.print(arcpy.GetMessages())