使用ArcGIS for Desktop制作径向流图以显示短距离(20km)上的曲线吗?


10

ESRI提供了指导,就如何使径向流图,但我认为,曲线将只生产了很长的距离,像半个地球。

对于短距离(20公里),大地测量线可能仍会看起来很笔直。为了继续在短距离上使用此过程生成径向流图,我想我们可以编辑基准设置,以使地球更小,因此可以在很短的距离上获得一条漂亮的曲线。有人知道怎么做吗?

另外,ArcGIS Desktop 10.0中是否还有其他工具可用于制作曲线?我有90个点,我最多需要连接54个点,所以自动化它比手动绘制线条要好。


2
在非ArcGIS环境中,您的问题是在gis.stackexchange.com/questions/5204/…上提出的。您可能会发现有趣的答案。
ub

1
我和胡布的想法不同,但考虑到您的目标,他可能会更好。我只是以为可以在圆弧中添加任意数量的弯曲,类似于在圆弧图中所做的那样。然后可以根据流动方向改变顶点的方向。本质上,工作流程对于大圈子来说是相同的,将线串分成许多较小的直线段。但是,任意弯曲可以容纳任何局部投影。
Andy W

@AndyW,您的建议对我来说听起来更有用(尽管不冒犯,但谁为更多的用户提供了很好的建议)。我无法理解或执行胡伯的建议。我正在寻求一个简单的“开箱即用”解决方案,最好是一个ArcGIS扩展。我看着弧形图,那里有一些惊人的例子。我没有看到一个简单的静态地图的解决方案,该地图显示了逐出站点与重新安置站点之间的多对多(但通常是一对多)关系。
ndthl 2012年

Answers:


5

这是我在上面的注释中提到的工作流的图示,尽管我不知道有任何简单的预装例程可以执行此操作,但我附加了一个excel电子表格,可以导入一组原点-目的地坐标并然后,工作表会生成一组或圆形的线坐标(此处为电子表格)。它已经设置了公式,因此很容易导入新的OD坐标并扩展公式以填充结果,但是我将更明确地介绍该过程的逻辑,其他人则可以提供建议如何完全在其中编写脚本ArcMap(或其他)。

简而言之,我认为这对于可视化OD数据是合理的,主要是因为大圆线很受欢迎,它们提供了线之间的更多视觉区别。我建议的方法相对于大圆线也有一个优势,因为流的方向编码在半圆中。在该站点的其他答案中,我给出了用于流图的可视化技术的更一般的概述,除了制作这样的弧线之外,还可以应用许多相同的技术。

因此,要详细说明如何像我建议的那样画线,本质上我只需要3个步骤即可:1)找到流的方向,2)找到流的中点和距离,3)处理以圆心为中心,然后绘制圆弧(从原点到终点的半圆)。为了清楚起见,我从一组投影的原始坐标(x1,y1)和目标坐标开始(x2,y2)

所以1)找到流的方向。首先使用公式ATAN((y2 - y1)/(x2 - x1)),然后根据方向分配方向,具体取决于方向是向东还是向西。下面是一个示例伪代码(我将两个都位于相同坐标的OD点分配为零方向)。此处的变量or_rad意为“弧度方向”的简写,pi指的是pi的值。

#tan_or = ATAN((y2 - y1)/(x2 - x1)).
Do If x2 = x1 and y1 <= y2. 
    compute or_rad = 0.
Else if x2 = x1 and y1 > y2.
    compute or_rad = pi.
Else if x1 > x2.
    compute or_rad = 270/180*pi - #tan_or.
Else if x1 < x2.
    compute or_rad = 90/180*pi - #tan_or.
End If.

2)找到流的中点和距离。这非常简单,对于仅一组成对的坐标,(x,y)坐标的中点将为(x1+x2/2,y1+y2/2)。所以,让我们定义mid_x = (x1 + x2)/2mid_y = (y1 + y2)/2下一个零件。使用毕达哥拉斯定理的距离很简单distance = SQRT((x1 - x2)^2 + (y1 - y2)^2)

3)然后,根据给定的信息,绘制预先指定的度数和半径(是两点之间距离的一半)上的圆。例如,假设我们从处的一组OD坐标对开始(1,3):(3,2)。以度为单位的方向为〜116(以弧度为单位〜2),x,y中点为(2,2.5),两点之间的距离约为2.2。

假设我们要绘制180度左右的半圆。在pseduo代码中(使用我已经定义的变量),迭代看起来像;

for i in (0 to 180 degrees) 
    rad_i = i/180*pi. /*converts i from degrees to radians
    step_or = pi - rad_i /*for clarity, this makes the circle go from origin to destination
    radius = distance/2
    Arc_X = mid_x + sin(or_rad - step_or)*radius.
    Arc_Y = mid_y + cos(or_rad - step_or)*radius.

下面插入的是我上面指定的原始坐标的图表。从零开始并在180处结束,以确保存在点和终点在同一位置。将环路调整为具有更多阶跃(更详细的弧线)或更少(较少详细的弧线)应该是显而易见的。

在此处输入图片说明

注意,站点上的其他线程讨论了根据点数据创建线的方法(请参见标签)。我在随附的xls电子表格中有一个示例,并且利用ET Geo-wizards arcmap工具将电子表格坐标转换为shapefile线。所附电子表格中示例数据中的弧线如下所示;

在此处输入图片说明

对当前设置的一个简单但可能有用的更新将是更新公式,以允许预先指定的圆弧偏心率,尽管到目前为止我还不太确定如何做到这一点。我期待社区的建议和反馈。


1
这是一个非常棒的回应!尽管我不懂如何编码,但我认为我可以继续与朋友讨论。我知道et geowizards工具可以用直线将两个点连接起来-我只对用于制图目的的曲线感兴趣。
ndthl 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.