7.** 单个工具指南**
7.1.** 多个工具通用的选项**
多个工具共享以下参数:
- 输入、输出
输入和输出的形状图层
- 起点立交、终点立交
选择用于立体交叉的字段。如果给出,链接仅在以下情况下被视为已连接
- 它们共享相同的端点(x,y,z)
- 它们在这些终点处具有相同的立交值
立体交叉也可用于模拟多层/多模网络。例如,使用值0,1,2…道路的立体交叉10 11 12…用于铁路等。
- 分析指标
选择要分析的度量:欧几里得、角度、自定义、混合、其他(有关详细信息,请参见 距离度量 )。
自定义指标要求选择自定义指标数据字段。
如果使用混合指标,则必须在advanced_config中使用_linefFormula_和_juncformula_关键字提供公式。
所提供的其余度量是为特定网络类型(行人、车辆、自行车、公共交通)设计的混合度量的预设形式。您可以检查sDNA的消息输出,以发现它们使用的确切公式–事实上,这是学习如何使用混合度量的好方法。一些预设包括用户变量,这些变量有默认值,但可以在高级配置中更改;参见 预设度量变量。
混合和预设指标需要sDNA+。
- 重量,起始重量,目的地重量
选择权重(连接、长度或多段线)和要使用的数据。 如果在高级配置中提供_了__origweightformula_或_destweightformula_,它们将覆盖起始重量和目的地重量。
- 拉迪
输入一个或多个半径以用作分析半径(有关详细信息,请参见半径)。 默认情况下,它们是欧几里得的,并以数据的空间单位表示,如果数据投影正确,通常应该是米。 如果输入多个,请用逗号分隔。半径"n"可用于指定全局分析,仅受网络大小的限制(但计算密集)。示例:100、200、400、800、1600、n
- 径向度规
除了使用欧几里德半径之外,在sDNA+中,可以使用使用任何其他度量表示的半径。 如果使用混合指标,则必须在advanced_config中使用_radlineframe_和_radjuncformula_关键字提供公式。 如果使用自定义指标,请将自定义数据字段提供给_radcustommetric_中的advanced_config。
如果将径向度量设置为_match_analytical__,则_sDNA+将使用半径的分析度量,这样您就不必输入相同的度量两次。
- 连续空间
选择是否使用连续空间分析。
- 带状半径
如果选择此模式,则每个半径的测量将排除下一个最小半径中包含的链接。这允许跨半径的多变量分析,同时将测量的互相关保持为最小。
- 禁用线路
允许从分析中丢弃某些多段线。这对于测试多个设计选项或打开和关闭网络的某些部分(如循环路径)非常有用。
此参数接受一个表达式,如果该表达式的计算结果为给定多段线的非零结果,则将禁用该多段线。 在最简单的情况下,这可以是一个字段名,如 walk_net (这将禁用walk_net字段为非零的所有行),也可以是walk_net这样的组合 ||cycle_net (将禁用步行和自行车网络-对车辆分析很有用)。
- 起点和终点矩阵文件
可选地,允许通过起点-目的地(OD)矩阵来确定权重。必须正确设置文件格式,请参见创建分区表或矩阵文件。 所有测地线和目标权重都被从矩阵中读取的值替换。矩阵在_分区_集之间定义;多段线必须包含字段以指示其分区。
在sDNA积分的情况下,禁用两相介数,因为使用两相模型来确定测地线和目的地权重与使用OD矩阵来确定这些权重相冲突。
- 中间链路滤波器
(可选)将分析限制为仅包括通过过滤器指定的给定直线或直线集的测地线。影响介数、两阶段介数、两阶段目的地、平均乌鸦飞行、平均测地线长度、分流比测量的输出;还有测地线和目标几何体。
此参数接受一个表达式,如果该表达式的计算结果为给定直线的非零结果,则该表达式将包含通过该直线的测地线。 在最简单的情况下,这可以是一个字段名称,如my_link_filter(这将禁用字段_my_link_filter_为非零的所有行)。
测地线的原点或终点不足以通过过滤器;中间线必须经过以便包括测地线。
- 高级配置
允许设置界面中未显示的参数。这些在advanced_config中描述。
7.2.** 单个工具详细信息**
准备工作
准备网络
通过检查和(可选)修复各种错误,为分析准备空间网络。
请注意,** sDNA prepare **提供的功能只是准备网络所需功能的一小部分。 需要对Network Preparation有很好的理解,其他(免费)工具可以补充sDNA Prepare。
sDNA Prepare修复的错误包括:
- 端点未遂(XY和Z公差指定未遂的接近程度)
- 重复行
- 交通孤岛(要求交通孤岛字段设置为0表示无孤岛,设置为1表示孤岛)。 交通岛线拉直;如果这样做产生了重复的行,则这些行被移除。
- 分割链接。请注意,从sDNA3.0开始,不再需要修复拆分链接,因此默认情况下不进行此操作
- 孤立系统
请参见多个工具通用的选项。
可选地,通过向参数_Absolute data to preserve_和_Unit length data to preserve_提供所需的字段名称(以逗号分隔),可以通过准备操作保留数值数据。
单个线路测量
输出单个多段线的连通性、方位角、欧氏、角度和混合度量。
此工具可用于检查和调试空间网络。特别地,连接性输出可以揭示几何错误。
请参见多个工具通用的选项。
分析类
积分分析
sDNA Integral是sDNA的核心分析工具。它计算网络上的几个流,可访问性,分割和效率措施。分析的全部细节在分析:结果的含义和分析:完整规格中给出。
Integral允许打开和关闭各组测量的输出。
请参见多个工具通用的选项。
特定原点可达性地图
输出特定原点的辅助功能图。
请参见多个工具通用的选项。
辅助功能图工具还允许提供原点多段线ID的列表(用逗号分隔)。将此参数留空可输出所有原点的贴图。
如果输出多个原点的"地图",则这些地图将作为重叠多段线在同一要素类中输出。可能需要按原始链接ID拆分结果,以便正确显示结果。
OD** 矩阵积分(分配模型)**
简化版本的sDNA Integral,适用于使用外部源/目的地矩阵。请注意,其他几个工具(包括Integral)也允许输入Origin Destination矩阵。
必须正确设置文件格式,请参见创建分区表或矩阵文件。 所有测地线和目标权重都被从矩阵中读取的值替换。矩阵在_分区_集之间定义;多段线必须包含文本字段以指示其分区。
脱脂基质
Skim Matrix输出区域间平均距离表(由选择的任何sDNA度量定义),允许将可达性的高空间分辨率sDNA模型馈送到现有的基于区域的运输模型中。
几何学
几何图形工具输出积分分析中使用的各个几何图形。这些可以用于可视化或导出到外部分析工具。例如,您可以将测地线与污染数据集相关联,以估计沿日常出行路线的污染暴露。
凸包
输出积分分析中使用的网络半径的凸包。
请参见多个工具通用的选项。
凸包线工具还允许提供原始多段线ID的列表(用逗号分隔)。将此参数留空可输出所有原点的外壳线。
测地线
输出积分分析使用的测地线(最短路径)。
请参见多个工具通用的选项。
测地线工具还允许提供原点和目标多段线ID的列表(以逗号分隔)。将原点或目标参数保留为空可输出所有原点或目标的测地线。(注意:这可能会产生大量数据)。
网络半径
输出积分分析中使用的网络半径。
请参见多个工具通用的选项。
网络半径工具还允许提供原点多段线ID的列表(以逗号分隔)。将此参数留空可输出所有原点的半径。
校准
sDNA学习和预测提供了一种根据测量变量(流量、房价等)校准sDNA输出的方法。目前,他们提供Box-Cox变换的二元回归。可以测试多个预测变量(sDNA的输出)以查看哪个给出与目标变量的最佳交叉验证相关性。
学习
sDNA Learn选择预测目标变量的最佳模型,然后计算GEH和交叉验证的R2- 2。 如果设置了输出模型文件,则会保存最佳模型,并可使用sDNA Predict将其应用于新数据。
查找模型的可用方法包括:
- 单个最佳变量-针对所有变量执行目标的双变量回归,并选择具有最佳交叉验证拟合的单个预测因子
- 多变量-正则化多元lasso回归
- 所有变量-正则化多元岭回归(可能不会使用所有变量,但通常会使用多个套索回归)
候选预测变量既可以作为字段名输入(用逗号分隔),也可以作为_正则表达式_输入。 后者遵循Python正则表达式语法。 通配符表示为 .* 因此, Bt.* 将测试所有Betweenness变量(其缩写形式以_Bt_开始)与目标的相关性。
可以禁用Box-Cox转换,并且可以更改交叉验证的参数。
_加权__lambda_通过yλy对数据点进行加权,其中y是目标变量。 设置为1将给出未加权回归。当与流量计数数据一起使用时,设置为0.7左右可以鼓励选择具有更好GEH统计的模型。设置为0有点类似于使用对数链接函数来处理泊松分布残差,同时将模型结构保留为预测变量的线性和。根据您所阅读的内容,文献可以将流量计数数据视为正态分布或泊松分布,因此介于两者之间的数据可能是最安全的。
岭回归和Lasso回归可以处理多重共线性预测变量,这在空间网络模型中很常见。这些技术可以被解释为频率论(添加惩罚项以防止过拟合);贝叶斯(对系数值施加超先验);或者是熵最大化的温和形式(在超指定模型的情况下限制自身)。更一般地说,它是一种使用交叉验证进行调整的机器学习技术。learn报告的r2- 2值总是经过交叉验证,为预测的有效性提供了内置测试。
_正则化__Lambda_允许在岭回归和套索回归中手动输入正则化参数λ的最小值和最大值。 输入两个用逗号分隔的值。如果此字段留空,软件将尝试猜测合适的范围,但并不总是正确的。如果你熟悉正则化回归的理论,你可能希望检查一个交叉验证的 r2- 2 对 λ- 的图,看看发生了什么。执行此操作的数据与输出模型文件(如果指定)一起保存,扩展名为 .regcurve.csv。
预测
Predict从sDNA Learn获取输出模型文件,并将其应用于新数据。例如,假设我们希望使用在网络上的少量点处测量的流量来校准流量模型。
- 首先使用积分分析在多个半径处运行介数分析。
- 使用GIS空间连接将Betweenness变量(Integral的输出)连接到测量的交通流量。
- 对连接的数据运行Learn以选择预测流量的最佳变量(在测量的情况下)。
- 对Integral的输出运行"预测"以估计所有未测量多段线的交通流量。
7.3.** 高级配置和命令行选项**
sDNA支持多种选项,用于自定义用户界面中显示之外的分析。所有这些都可以通过高级配置系统访问。
高级配置选项在一个长字符串中指定,选项之间用分号(;)像这样:
nohull;probroutethreshold=1.2; skipzeroweightorigins
这是sDNA Integral的高级配置示例,这意味着
- 不计算凸包
- 问题路由阈值= 1.2
- 跳过零权重原点
从命令行调用sDNAIntegral Analysis和Prepare Network(从命令行使用sDNA)时,整个配置将指定为高级配置。 因此,高级配置选项包括一些通常通过图形界面设置的选项。如果在sDNA图形界面中将这些选项作为高级配置提供,则将导致错误(“多次指定关键字”)。
sDNA Prepare** 的高级配置选项**
选项 | 项目名称 |
---|---|
启动电视= | 要从中读取起始高程的字段的名称 |
— | — |
endelev= | 要从中读取端点高程的字段的名称 |
岛= | 要从中读取交通岛信息的字段的名称。除零以外的任何值都将被视为交通岛 |
islandfieldstozero= | 指定在修复流量孤岛时要设置为零的其他数据字段(用于起点或终点重量) |
数据单位长度= | 指定要由sDNA prepare保留的数值数据(保留每单位长度的值,合并链接时取平均值) |
data_absolute= | 指定要由sDNA prepare保留的数值数据(在合并链接时保留绝对值、总和) |
数据正文 | 指定要保留的文本数据(如果相同则合并,否则删除) |
木糖醇= | 用于固定端点连接的手动覆盖xy容差 |
ztol= | 用于修复端点连接的手动覆盖z容差 |
xytol 和 ztol 是公差的手动覆盖。通过命令行或 ArcGIS 在地理数据库上运行的 sDNA 将根据需要从每个要素类读取容差值。在 QGIS 或 shapefile 上运行的 sDNA 将使用默认公差 0 ,因为 shapefile 不存储公差信息: - 需要手动覆盖以修复 shapefile__上的公差。
sDNA** 积分和几何工具的高级配置选项**
sDNA 凸包、网络半径、测地线和可访问性图都是应用于 sDNA Integral__的不同接口,因此在某些情况下也会接受这些选项。
选项 | 预设值 | 项目名称 | sDNA | sDNA+ |
---|---|---|---|---|
启动电视= | 要从中读取起始高程的字段的名称 | 是的,是的 | 是的,是的 | |
— | — | — | — | — |
endelev= | 要从中读取端点高程的字段的名称 | 是的,是的 | 是的,是的 | |
公制= | 角的 | 公制-角度、欧几里得、自定义或混合(见下一节) | 是(混合动力除外) | 是的,是的 |
半径= | 巢 | 以逗号分隔的半径列表 | 是的,是的 | 是的,是的 |
启动电视= | 要从中读取起始高程的字段的名称 | 是的,是的 | 是的,是的 | |
endelev= | 要从中读取端点高程的字段的名称 | 是的,是的 | 是的,是的 | |
原始重量= | 要从中读取原始权重的字段的名称 | 是的,是的 | 是的,是的 | |
目的重量= | 要从中读取目标重量的字段的名称 | 是的,是的 | 是的,是的 | |
原始重量公式= | 原始重量的表达式(替代原始重量) | 是的,是的 | 是的,是的 | |
destweightformula= | 目标重量的表达式(覆盖目标重量) | 是的,是的 | 是的,是的 | |
重量= | 要从中读取权重的字段的名称。将权重字段应用于起点和终点。 | 是的,是的 | 是的,是的 | |
zonesums= | 对区域求和的表达式(请参见下面的区域求和) | 是的,是的 | 是的,是的 | |
伦沃特 | 指定权重字段为每单位长度 | 是的,是的 | 是的,是的 | |
custommetric= | 指定要从中读取自定义度量的字段名称 | 是的,是的 | 是的,是的 | |
木糖醇= | 用于固定端点连接的手动替代xy公差。 | 是的,是的 | 是的,是的 | |
ztol= | 手动覆盖z容差以修复端点连接。 | 是的,是的 | 是的,是的 | |
输出测地线 | 分析中所有成对测地线的输出几何(小心-这可能会创建大量数据) | 是的,是的 | 是的,是的 | |
输出目的地 | 在分析中输出所有成对目标的几何体(小心-这可能会创建大量数据)。与原点结合使用,可用于创建距给定原点的距离/度量图。 | 是的,是的 | 是的,是的 | |
输出船体 | 分析中所有凸包的输出几何 | 是的,是的 | 是的,是的 | |
输出 | 分析中所有网络半径的输出几何 | 是的,是的 | 是的,是的 | |
起源= | 仅计算选定的原点(以逗号分隔列表的形式提供特征ID)。与outputgeodesism、outputdestinations、outputhulls、outputnetradii结合使用时非常有用。 | 是的,是的 | 是的,是的 | |
目的地= | 仅计算选定的目标(同上) | 是的,是的 | 是的,是的 | |
九进制数据 | 不输出任何网络数据(与几何体输出结合使用) | 是的,是的 | 是的,是的 | |
前= | 为输出列名添加所选的前缀文本 | 是的,是的 | 是的,是的 | |
职位= | 选择输出列名的后缀文本 | 是的,是的 | 是的,是的 | |
无中介性 | 不计算介数(节省大量时间) | 是的,是的 | 是的,是的 | |
无连接 | 不计算连接测量值(节省时间) | 是的,是的 | 是的,是的 | |
诺赫尔 | 不计算凸包度量(节省时间) | 是的,是的 | 是的,是的 | |
仅链接 | 仅计算单个链接度量。 | 是的,是的 | 是的,是的 | |
输出和 | 输出和测量SAD、SCF等以及平均MAD、MCF等。 | 是的,是的 | 是的,是的 | |
普罗路通 | 问题路径的输出度量-超过半径长度的路径 | 是的,是的 | 是的,是的 | |
力源 | 强制原点链接在连续空间中处理,即使在离散分析中也是如此。防止在很长的链接上出现奇怪的结果。 | 是的,是的 | 是的,是的 | |
nqpdn= | 1 | NQPD方程的自定义分子幂 | 是的,是的 | 是的,是的 |
nqpdd= | 1 | NQPD方程的自定义分母功效 | 是的,是的 | 是的,是的 |
skipzeroweightorigins | 跳过权重为零的原点的任何输出度量的计算。如果有很多这样的起源,就可以节省很多时间。 | 是的,是的 | 是的,是的 | |
免费WiFi | 1 | 默认情况下,将跳过零重量目标。请注意,这将从几何体输出中排除它们;如果这不是期望行为,则设置skipzeroweightdestinations=0 | 是的,是的 | 是的,是的 |
skiporiginifzero= | 指定的字段名称。如果此字段为零,则将跳过原点。允许完全自定义跳过原点。 | 是的,是的 | 是的,是的 | |
skipfraction= | 1 | 设置为值n,跳过(n-1)/n个原点的计算。在原点上循环时有效的增量值。 | 是的,是的 | 是的,是的 |
skipmod= | 0 | 选择跳过分数时计算的原点?1.在原点上循环时的有效初始值:从第skipmodth个原点开始计算每个第skipfractionth个原点。 | 是的,是的 | 是的,是的 |
nostrictnetworkcut | 不要将测地线约束为保持在半径内。这将产生更多的"问题路线"。仅改变介数度量的行为(不改变接近度)。 | 是的,是的 | 是的,是的 | |
prorouteaction = | 忽略 | 对超出半径的系数大于probroutethreshold的问题路由采取特殊操作。可以设置为忽略、丢弃或重新路由。重新路由将测地线更改为最短欧氏路径。只改变中间性输出,不改变接近性。 | 是的,是的 | 是的,是的 |
proroutethreshold = | 1.2 | 超过该阈值时将采取prorouteaction。请注意,这不会影响probroutes度量的计算,它会报告所有超过半径长度的路由,而不考虑此设置。 | 是的,是的 | 是的,是的 |
仅输出可分解 | 仅输出可分解的度量,即可以在不同的原点上求和(用于并行化) | 是的,是的 | 是的,是的 | |
链接中心类型= | 角度分析用Angular,否则用Euclidean | 替代连接中心类型-角度或欧几里得 | 是的,是的 | 是的,是的 |
线性公式= | 混合分析中的线度量公式(见下文) | 是的,是的 | 是的,是的 | |
连接公式= | 0 | 混合分析中的交叉点转弯度量公式(见下文) | 是的,是的 | 是的,是的 |
忽略非线性 | 即使linkformula是非线性的,也强制sDNA继续(见下文) | 不知道 | 是的,是的 | |
比迪尔 | 分别输出每个方向的介数 | 是的,是的 | 是的,是的 | |
单向= | 指定要从中读取单向数据的字段名称(参见下面的注释1) | 是的,是的 | 是的,是的 | |
vertoneway= | 指定的字段名称读取垂直单向数据(参见下面的注释1) | 是的,是的 | 是的,是的 | |
过采样= | 1 | 运行分析的次数;给出的结果是所有试验的平均值。用于对具有随机分量的混合度量进行采样。 | 是的,是的 | 是的,是的 |
奇数矩阵 | 从输入表中读取OD矩阵(必须存在2d表) | 是的,是的 | 是的,是的 | |
zonedist= | 欧洲共同体 | 设置表达式以确定如何在每个区域中的链路上分配区域权重,或设置0以跳过分配(所有线路都接收整个区域权重) | 是的,是的 | 是的,是的 |
中间体= | 设置中间链接过滤器的表达式。除非测地线通过表达式为非零的链接,否则将丢弃测地线。 | 是的,是的 | 是的,是的 | |
禁用= | 设置expression以关闭链接(expression计算为非零时关闭链接) | 是的,是的 | 是的,是的 | |
辐射线公式 | 使用混合径向度量时的径向线度量公式(见下文) | 不知道 | 是的,是的 | |
Radjunction公式 | 0 | 使用混合径向度量时的交叉点转弯度量公式(见下文) | 不知道 | 是的,是的 |
放射性测量 | 使用自定义径向度量时自定义度量的数据字段 | 不知道 | 是的,是的 | |
辐射测量的 | 欧几里得 | 要使用的径向度量类型 | 不知道 | 是的,是的 |
输出撇除 | 输出略读矩阵文件 | 是的,是的 | 是的,是的 | |
撇渣带 | 浏览矩阵的原点区域字段(必须为文本) | 是的,是的 | 是的,是的 | |
撇渣带 | 浏览矩阵的目标区域字段(必须为文本) | 是的,是的 | 是的,是的 | |
撇渣带 | 起点和终点的Skim矩阵区域字段(设置skimorigzone和skimdestzone) | 是的,是的 | 是的,是的 | |
班代德拉季 | 将半径划分为带区:对于每个半径,仅包括前一个半径之外的链接 | 是的,是的 | 是的,是的 |
预设度量变量
为不同的城市交通形式(目前_为自行车_、行人_和_车辆)提供了多个预设指标。 这些是混合度量的特殊情况,有时具有相当复杂的公式。要检查给定度量的公式,请在选定度量的情况下运行单个行度量,然后检查将显示完整公式的消息输出。
CYCLE_ROUNDTRIP度量,顾名思义,测量往返行程以考虑两个方向上的山丘。
预设指标公式中的某些变量可以通过在高级配置中分配来更改。到目前为止,该名单是:
公制 | 变数 | 预设值 | 含义 |
---|---|---|---|
车辆 | JP | 0 | 驾驶员避开路口的倾向 |
— | — | — | — |
车辆 | 一个 | 1 | 驾驶员避免角度变化的倾向 |
行人 | 一个 | 0.5 | 角度量和欧几里德度量的混合:0表示全欧几里德,1表示全角度 |
行人 | 班轮 | 0 | 引入线遍历度量的随机因子的标准差 |
行人 | 永克朗 | 0 | 引入交叉口遍历度量的随机因子的标准差 |
循环 | 奥特菲尔德 | 美国农业发展技术协会 | 包含年平均日车辆交通量估计值的数据字段名称 |
循环 | 测试 | 0.04 | 骑自行车的人避开车辆交通的倾向 |
循环 | 一个 | 0.3 | 自行车运动员避免角度变化的倾向 |
循环 | 的 | 0.5 | 自行车运动员避坡倾向 |
公共交通 | 行域 | 线 | 包含每条公共交通"线路"ID的数据字段名称 |
公共交通 | c型 | 3 | 更改行的惩罚(每当"行"字段更改时应用) |
公共交通 | 的 | 1 | 每个停靠点的惩罚(应用于每个多段线) |
公共交通 | 电子 | 0.001 | 欧几里德距离的惩罚乘数 |
单向数据的解释
单向数据解释如下:
- 0
- 正数-仅向前遍历
- 负数-仅向后遍历
相对于在网络中绘制链路的方向进行向前/向后(数据中的点的排序)。
垂直单向数据解释如下:
- 0
- 正数-仅向上遍历
- 负数-仅向下遍历
向上/向下仅通过测量链路的端点来推断。如果这些具有相同的高程/高度并且这导致不明确性,则sDNA将打印错误消息并退出。
如果提供了冲突_的单向_和_垂直_数据,sDNA将打印错误消息并退出。 请注意,如果其中一个字段为零,则允许另一个字段覆盖它而不会发生冲突。
混合分析
在混合分析中,可以在高级配置中为(部分)链接和交汇点的评估度量提供自定义表达式。 下面是一些指定混合分析的高级配置示例。
要模拟欧几里得分析,请为链接分配一个等于其欧几里得长度的度量。默认情况下,交汇点接收的度量值为0:
线性公式=euc
要模拟角度分析,连接和交汇点的度量值都等于其角度变化:
int n = int n; juncformula=ang
两者的混合。链路的度量是其欧几里得距离加上其角度变化的两倍;交叉点的角度变化为3倍:
Lineformula=euc+2*ang; juncformula=3*ang
拓扑分析-仅计算交叉点的数量,忽略长度和角度:
return 0; juncformula=1
lineformula和junctionformula使用的公式与任何电子表格或编程语言中的公式非常相似(参见表达式)。 至关重要的是,您可以访问以下变量:
变数 | 含义 | 可用于链接 | 可用于交汇点 |
---|---|---|---|
昂 | 角度变化 | 是的,是的 | 是的,是的 |
— | — | — | — |
欧洲共同体 | 欧氏距离 | 是的,是的 | 不知道 |
汞 | 高度增益 | 是的,是的 | 不知道 |
hl | 高度损失 | 是的,是的 | 不知道 |
FULLang | 整条线的角度变化 | 是的,是的 | 不知道 |
FULLeuc | 整条直线的欧氏距离 | 是的,是的 | 不知道 |
满hg | 整条线路的高度增益 | 是的,是的 | 不知道 |
FULLhl | 全线高度损失 | 是的,是的 | 不知道 |
前进 | 如果向前遍历这条线,则为True;如果向后遍历,则为false | 是的,是的 | 不知道 |
(“向前”/"向后"没有物理意义,但由网络数据中多段线的方向定义。)
您还可以访问附加到输入网络的任何自定义数字数据。例如,如果你在输入数据上有一个名为_travel_time__的_字段,那么你可以这样写:
lineformula=travel_time(错误!)
但是,尽管可能,这不是一个好的公式:sDNA将返回一个错误,表示公式不是线性的!
这样做的原因是sDNA的连续空间算法不一定一次计算整个折线的公式,因此在任何时候,公式都可能应用于部分线。因此, 如果上面的公式要计算一次,则该行的度量将是1分钟,这是正确的。但如果sDNA将链接分成两部分,并分别评估每一部分,则度量将是2分钟-这显然是错误的。这里有一个解决问题的方法:
lineformula=euc/FULLeuc*travel_time
上面的公式假设行程时间沿链路长度均匀分布,计算我们当前处理的链路的比例(euc/FULLeuc),并将其乘以travel_time,以便无论链路在sDNA内如何划分,完整链路的度量将始终相同。
形式上,对_lineframe_作为函数的要求是,它相对于将任何给定链路_L_分解为链路_x_和_y_的任意部分是线性的
F(x)+F(y)=F(x+y)�(�)+�(�)=�(�+�)
受此启发,您可能想尝试沿着链接中的角度变化而不是其长度分布您的自定义旅行时间:
lineformula=ang/FULLang*travel_time(错误!)
这次sDNA在计算期间失败。原因可能是一些链路完全是直线,并且这些链路没有角成本。因此,_ang_和_FULLang_都是零,零除以零不是一个数字。 我们需要另一种方法来处理直线链接的情况。如何分配旅行时间沿正常的链接的角度变化,但如果没有角度的变化,然后分布沿其长度?:
lineformula=(FULLang!= 0)?ang/FULLang*travel_time:euc/FULLeuc*travel_time
请注意,最后一个公式引入了 () 括号, !__= 不平等,以及 :? if-then-else三元运算符。
同样的公式可以通过使用一个临时变量来简化:
lineformula= _p=(FULLang!= 0)?ang/FULLang:euc/FULLeuc,_p*travel_time
任何以下划线_开头的变量都被认为是临时的(不存在于输入数据中)。 因此,在上面的例子中,我们首先设置_p来表示我们正在处理的链路的比例,然后我们输出_p乘以travel_time的值。 这两个操作由逗号分隔。 这似乎是一个小的改进,但随着公式变得更加复杂,它会有所帮助。
表达式引用
运算符(按优先级的相反顺序) | 姓名、名称 | 范例 | 含义 |
---|---|---|---|
、 | 语句分隔符 | a、b、c | 先做a,再做b,然后输出c |
— | — | — | — |
= | 分配 | _a=b | 设_a等于b |
?: | 如果-那么-否则 | p?x:y | 如果p那么x否则y |
&& | 逻辑与 | a b | a和b |
逻辑或 | |||
<= | 小于或等于 | a =b | a小于或等于b |
>= | 大于或等于 | a>=b | a大于或等于b |
!= | 不相等 | a!=最佳 | a不等于b |
== | 相等 | a==b | a等于b |
> | 大于 | a>b | a大于b |
< | 少于 | a b | a小于b |
+ | 添加 | a+b | a加b |
- | 减法 | a-b | a减b |
* | 乘法 | a*b | a乘以b |
/ | 司 | a/b | a除以b |
^ | 指数化 | a^b | a的b次方 |
() | 括号 | 2*(x+1) | x加1再乘2 |
内置函数 | |
---|---|
sin(x),cos(x),tan(x)asin(x),acos(x),atan(x)sinh(x),cosh(x),tanh(x)asinh(x)、acosh(x)、atanh(x) | x的三角函数(以弧度为单位)。 |
— | — |
log2(x) | 以2为底的x的对数 |
log10(x),log(x) | 以10为底的x的对数 |
ln(x) | x以e为底的对数 |
exp(x) | e的x次方 |
sqrt(x) | x的平方根 |
符号(x) | -1如果x为负,否则为1 |
rint(x) | x四舍五入到最接近的整数 |
abs(x) | x的绝对值 |
min(a,b,c,…)max(a,b,c,…)sum(a,b,c,…)avg(a,b,c,…) | 所有参数的最小值、最大值、总和和平均值 |
trunc(x,l,u) | 将X截断到范围[l,u](包括端点) |
randnorm(m,s) | 从均值为m、标准差为s的正态分布中抽取的随机数 |
朗杜尼 | 从范围[l,u]上的均匀分布中抽取的随机数 |
比例(x,y) | x除以y。如果x=y=0,则返回0;如果x>0且y=0,则停止计算并返回错误。用于在链接上分布分区权重。 |
随机数由Mersenne Twister mt 19937算法生成。 A 623-dimensionally equidistributed uniform pseudo-random number generator" , Makoto Matsumoto and Takuji Nishimura , ACM Transactions on Modeling and Computer Simulation :关于均匀随机数生成的特殊问题,卷。 8 , No. 1 , January 1998 , pp. 3-30.
常数 | |
---|---|
信息 | 无穷大 |
— | — |
π | π |
变量 | |
---|---|
昂 | 角度变化 |
— | — |
欧洲共同体 | 欧氏距离 |
汞 | 高度增益 |
hl | 高度损失 |
FULLang | 整条多段线的角度更改 |
FULLeuc | 整条折线的欧氏距离 |
满hg | 整条多段线的高度增益 |
FULLhl | 整条多段线的高度损失 |
满 | 整条多段线的连接分数 |
前进 | 如果向前遍历此折线,则为True;如果向后遍历,则为false |
_x | (其中 x 是任意名称):临时变量(初始化为0) |
_x _轴 | (其中_ x__是不用作函数或其他值的任何名称)_:折线上的字段数据 |
上一页 *x* | (仅限交汇点度量):上一条多段线上的字段数据 |
下一个 *x* | (仅限交汇点度量):下一条多段线上的字段数据 |
任何变量都可以用 = 赋值,但是新的值只会影响当前正在计算的公式(例如,赋值给 ang
不会改变网络的形状!) . 建议只使用 \_x
形式的临时变量作为赋值目标。
创建区域表或矩阵文件
sDNA可以读取自定义分区数据,即附加到_分区_的数据,而不是网络中单个线路的数据。 这可以来自
- 一维区域表:将区域文件提供给sDNA的输入,然后以与使用网络数据相同的方式引用表达式中的变量。这将执行类似于数据库连接的功能,将分区数据链接到各个多段线。请参见分区数据和分区总和。
- 自定义起讫点(OD)矩阵:为sDNA提供一个二维表,它将覆盖所有其他权重
一维表可以以_列表_格式提供,并且二维表可以以_列表_或_矩阵_格式提供。 _列表_格式允许稀疏数据,即,不需要为所有区域给出数据,并且在未给出的情况下假定为零。
所有表格必须以CSV(逗号分隔)格式保存。
列表格式的** 1d **表格
列表 | 1 | ||
---|---|---|---|
区带 | 房屋 | 工作岗位 | 学校 |
韦斯特罗斯 | 2000 | 4000 | 4 |
罗伊斯顿瓦塞 | 1800 | 7 | 1 |
莫多尔 | 600 | 10000 | 0 |
纳尼亚 | 2100 | 500 | 3 |
列表格式的1d表必须具有
- 列表_和标题行中的_1
- 区域字段名称和数据名称。网络必须包含一个名称与区域字段名称匹配的文本字段(在本例中为"zone")
- 下面的区域和数据
列表格式的二维表格
列表 | 2 | |
---|---|---|
区带 | 区带 | 流动,流动 |
夏尔 | 瑞文戴尔 | 4 |
瑞文戴尔 | 莫多尔 | 6 |
莫多尔 | 夏尔 | 2 |
贡多尔 | 莫多尔 | 10000 |
莫多尔 | 贡多尔 | 5000 |
列表格式的二维表必须具有
- 列表_和标题行中的_2
- 第二行中的起始区域和目标区域字段名称,后跟数据名称。网络必须包含名称与区域字段名称匹配的文本字段。在这种情况下,起点和终点区域是从同一集合中绘制的,因此它们都被命名为"区域"。然而,支持用于起点和目的地的不同区域集合(例如,用于普查居住区和工作区)。
- 下面的区域和数据
矩阵格式的二维表格
矩阵 | 区带 | 区带 | ||
---|---|---|---|---|
流动,流动 | 夏尔 | 瑞文戴尔 | 贡多尔 | 莫多尔 |
夏尔 | 0 | 4 | 0 | 0 |
瑞文戴尔 | 0 | 0 | 0 | 6 |
贡多尔 | 0 | 0 | 0 | 10000 |
莫多尔 | 2 | 0 | 5000 | 0 |
此表显示的数据与上面列表格式的 2d 表相同
矩阵格式的二维表必须具有
- _矩阵_的第一行,后跟源区域字段名称,然后是目标区域字段名称。 网络必须包含名称与区域字段名称匹配的文本字段。在这种情况下,起点和终点区域是从同一集合中绘制的,因此它们都被命名为"区域"。然而,支持用于起点和目的地的不同区域集合(与上面的2d列表表一样)。
- 第二行以数据的名称开始,然后是每个目标区域的名称
- 从第3行向下的左列包含每个原点区域的名称
- 矩阵的其余部分包含数据
分区数据和分区总和
从表达式访问分区数据的方式与访问网络字段的方式相同。以下代码通过将_zonewight_(取自提供给sDNA的表)与每条折线的欧几里得长度相乘来计算原点权重:
origweightformula = zonewight * euc
在sDNA Integral的高级配置中使用_区域求和_,可以对网络区域上的数据求和。 这对于控制分区权重在多段线上的分布方式非常有用。下面的例子
- 提供了如何使用多分区方案的示例。它假设提供了两个区域变量;_residential_weight 在 res_zone_中为每个区域定义,_retail_weight 在 ret_zone__中_为每个区域定义。 在每种情况下,分区文件将指定字段名,该字段名告诉sDNA每条多段线属于哪个分区。
- 给出了如何计算多个区域和的示例。这些以 sum1= expr1@zonefield1 、 sum2 =expr2@zonefield2_、…_.配置创建两个区域总和字段,_eucsum_是每个住宅区中的总欧几里得长度(res_zone),以及_linksum_是每个零售区中的总链路计数(ret_zone)。
- 提供了如何在区域上分配区域权重的示例。origweightformula_在每个居住区域的网络长度上均匀分配_residential_weight_区域变量,而_destweightformula_在每个零售区域的链路上均匀分配_retail_weight_区域变量。 (Note多段线可以构成部分链接,因此使用_FULLf):
- zonesums = eucsum=euc@origzonefield,linksum=FULLlf@destzonefield; origweightformula = residential_weight*proportion(euc,eucsum); destweightformula = retail_weight*proportion(FULLlf,linksum)
proportion(x,y)函数将x除以y,这对于计算当前链接中区域权重的比例很有用。 它正确地处理了区域不包含权重的特殊情况。
请注意,_origweightformula_和_destweightformula_始终在离散空间而不是连续空间中计算。