论文需要想画一个用线段粗细表示两个地市之间的交通量的图,本来打算用echarts,但是发现arcgis自己本身就可以画,所以找了一下教程。
这里参考了:https://www.cnblogs.com/orchidLan/p/8903588.html
1、生成结果表
但是不怎么习惯用VBA,所以用python写了一个可以制作源表的程序,如下:
import pandas as pd
def xy2line(tablepath): # 单一站点+XY坐标表的地址
xy_table = dict(pd.read_excel(tablepath))
sn, sx, sy = xy_table["STATIONNAME"], xy_table["STARTX"], xy_table["STARTY"] # 坐标表的字段名是STATIONNAME、STARTX、STARTY
station_num = len(sn)
result_dict = {"STARTSTATIONNAME": [], "STARTX": [], "STARTY": [], "ENDSTATIONNAME": [], "ENDX": [],
"ENDY": [],"SNEN":[]} # 输出表的字段
for i in range(station_num - 1): # 循环
for j in range(i + 1, station_num):
result_dict["STARTSTATIONNAME"].append(sn[i])
result_dict["STARTX"].append(sx[i])
result_dict["STARTY"].append(sy[i])
result_dict["ENDSTATIONNAME"].append(sn[j])
result_dict["ENDX"].append(sx[j])
result_dict["ENDY"].append(sy[j])
result_dict["SNEN"].append(sn[i]+","+sy[j])
df = pd.DataFrame(result_dict) # 转成DF输出到excel
df.to_excel("xytoline2.xlsx", index=False)
if __name__ == "__main__":
xy2line("xytoline1.xlsx")
其中的坐标表xytoline1.xlsx示例如下:
结果表xytoline2.xlsx示例如下:
之后在arcgis中,ArcToolbox→Data Management Tools→Features→XY To Line,并输入相应参数即可,我的是中文版本的,所以直接在搜索里面搜“XY转线”就能找到这个工具了。
2、添加起始点信息
如果只要线要素的话,就到此为止了,然而我还想根据地点输入两个地市之间的流量。
但是用arcgis生成之后发现,生成的线要素的属性表只显示xy坐标,如果指定id的话也只是显示一个地点的信息,无法显示两个地点的信息,所以我又加了加了“SNEN”,表示“STARTSTATIONANME,ENDSTATIONNAME”,使其作为“XY转线”工具中可选的ID字段,之后分割成两个字段。
之后在生成的线要素图层中打开属性表,新建STARTNAME和ENDNAME两个字段,右击字段,选择“字段计算器”,选择python解析程序:
STARTNAME的代码为:!SNEN!.split(',')[0]
ENDNAME的代码为:!SNEN!.split(',')[1]
这样就可以根据我想要的交通流量表愉快地进行表关联啦!