我有带时间戳的空间跟踪数据(lat,long)。如果任何两个连续点之间的时间超过2小时,我就无法很好地分析数据,所以我想根据用户指定的时间阈值来分割数据集。最终目标是将它们作为形状文件(点)上传到ArcGIS中。很多拆分都是为了拆分成相等的行数或一些公共属性,但这将由用户指定,并因数据集而异。我对此非常陌生,所以没有一个不可笑的脚本,但我正在考虑读取新数据,然后创建空列表,只要时间(deltaseconds)小于一定量(比如30分钟或1800秒),就添加到这些列表中。一旦达到这个数量,将其保存为列表并创建一个输出文件,然后从下一点开始进入一个新列表。。。但在CSV中可能有办法做到这一点?这是csv:中的数据示例
Time Lat Lng Time deltaseconds
9/12/2015 21:52 16.5033 -85.87527 0:00:00 0
9/12/2015 21:52 16.5033 -85.87524 0:00:01 1
9/12/2015 21:53 16.5033 -85.8752 0:00:55 55
感谢您的帮助!!非常感谢。
我知道您希望根据"deltaseconds"字段中给定的时间段范围来拆分多个形状文件中的现有csv。首先手动将字段名称"deltaseconds"更改为"deltasec",因为shapefile的字段长度最多只能为10个字符。下面是您可以在arcpy中运行的脚本:
import arcpy
from arcpy import env
def export_multiple_shps(workspace,file,t):
# Define workspace
env.workspace=workspace
# Convert CSV to Shapefile, assuming that x-field is 'Lng' & y-field is 'Lat'
MakeXYEventLayer_management(file, "Lng", "Lat", "tracking.shp")
# Count no. of rows in tracking shapefile
arcpy.MakeTableView_management("tracking.shp","tableView")
row_count=int(arcpy.GetCount_management("tableView").getOutput(0))
k=1
j=0
# Loop to export shapefiles after every t sec increment in 'deltasec'
for i in range(t,row_count,t):
query1='"deltasec"<={}'.format(i)
query2='"deltasec"<={}'.format(j)
arcpy.SelectLayerByAttribute_management("tracking.shp","NEW_SELECTION",query1)
arcpy.SelectLayerByAttribute_management("tracking.shp","REMOVE_FROM_SELECTION",query2)
arcpy.CopyFeatures_management("tracking.shp","tracking"+str(k)+".shp")
j=i
k+=1
# Executing function, by assuming csv is placed in "D:/data" with name "tracking.csv", & we want to export shapefile after every "1800 sec". You can change the inputs as per requirement
export_multiple_shps(workspace="D:/data",file="tracking.csv",t=1800)
如果你的要求是别的,请告诉我。