GeoDMS,是否有将 csv 文件直接转换为 fss 文件的示例代码?
GeoDMS, is there example code to convert csv files directly to fss files?
我正在创建一个 GeoDMS 配置,它读取 GTFS 文件(以 csv 格式存储),从这些文件构建一个时空显式网络,然后根据该网络计算 OD 旅行时间矩阵。
我目前正在使用 StorageType = "gdal.grid" 属性 读取 csv 文件,这很有用,因为通过这种方式我不必预先指定 csv 文件的长度。但是,为了加快计算速度,我想将原始 csv 文件转换为 GeoDMS 原生 fss 文件,因为这会显着加快数据读取速度。
但是,如果我没记错的话,我需要明确定义我想存储到 fss 文件中的所有属性,对吗?简而言之,是否有将 csv 文件存储到 fss 文件中的示例代码?
当前正在加载 csv 文件,并将中间结果存储到 shapefile 中。但这不是很优雅。理想情况下,我可以使用 'copies' csv 文件转换为 fss 文件的功能,而无需先验地知道基数或字段名。如果我需要指定所有字段名,那也不是问题。
目前正在尝试以下非常幼稚的方法,但行不通。
Template LoadCsvThroughGDAL {
parameter<File_Structure> inFile;
unit<uint32> Data: StorageName = "= '%DataDir%/_feeds/'+AvailableFeeds/Name[inFeed]+'/'+File_Structure/Name[inFile]+'.csv'", StorageType = "gdal.vect", StorageReadOnly = "True";
unit<uint32> StoreFSS: expr = "Data", StorageName = "= '%DataDir%/_feeds/'+AvailableFeeds/Name[inFeed]+'/fss/'+File_Structure/Name[inFile]+'.fss'";
}
克里斯,
特此为以下工作示例:
1) 从 .csv 文件读取数据
2) 将数据写入 .fss 文件
3) 再次从此 .fss 文件中读取数据
无需显式配置属性名称。
parameter<string> SourceDir := '%SourceDataDir%/OV/GTFS_20190318';
container write_to_fss
{
unit<uint32> trip
: StorageName = "=SourceDir + '/trips.csv'"
, StorageType = "gdal.vect"
, StorageReadOnly = "True";
unit<uint32> name := SubItem_PropValues(trip,'name');
unit<uint32> fssdomain := trip;
container to_fss := for_each_nedv(name/name, 'trip/' + name/name, fssdomain, string)
, StorageName = "=SourceDir + '/trip.fss'"
{
unit<uint32> domain := fssdomain;
}
}
container readdomain: StorageName = "=SourceDir + '/trip.fss'"
, StorageReadOnly = "True"
{
unit<uint32> domain;
}
container trip := for_each_ndv(write_to_fss/name/name, readdomain/domain, string)
, StorageName = "=SourceDir + '/trip.fss'"
, StorageReadOnly = "True"
{
unit<uint32> domain;
}
如果您将读取域从旅行容器中取出,它应该可以工作。
parameter<string> SourceDir := '%SourceDataDir%/OV/GTFS_20190318';
container write_to_fss
{
unit<uint32> trip
: StorageName = "=SourceDir + '/trips.csv'"
, StorageType = "gdal.vect"
, StorageReadOnly = "True";
unit<uint32> name := SubItem_PropValues(trip,'name');
unit<uint32> fssdomain := trip;
container to_fss_domain : StorageName = "=SourceDir + '/trip_domain.fss'"
{
unit<uint32> domain := fssdomain;
}
container to_fss :=
for_each_nedv(
name/name
, 'trip/' + name/name
, to_fss_domain/domain
, string
)
, StorageName = "=SourceDir + '/trip.fss'";
}
container readdomain
: StorageName = "=SourceDir + '/trip_domain.fss'"
, StorageReadOnly = "True"
{
unit<uint32> domain;
}
container trip :=
for_each_ndv(
write_to_fss/name/name
, readdomain/domain
, string)
, StorageName = "=SourceDir + '/trip.fss'"
, StorageReadOnly = "True"
{
unit<uint32> domain := readdomain/domain;
}
我正在创建一个 GeoDMS 配置,它读取 GTFS 文件(以 csv 格式存储),从这些文件构建一个时空显式网络,然后根据该网络计算 OD 旅行时间矩阵。
我目前正在使用 StorageType = "gdal.grid" 属性 读取 csv 文件,这很有用,因为通过这种方式我不必预先指定 csv 文件的长度。但是,为了加快计算速度,我想将原始 csv 文件转换为 GeoDMS 原生 fss 文件,因为这会显着加快数据读取速度。
但是,如果我没记错的话,我需要明确定义我想存储到 fss 文件中的所有属性,对吗?简而言之,是否有将 csv 文件存储到 fss 文件中的示例代码?
当前正在加载 csv 文件,并将中间结果存储到 shapefile 中。但这不是很优雅。理想情况下,我可以使用 'copies' csv 文件转换为 fss 文件的功能,而无需先验地知道基数或字段名。如果我需要指定所有字段名,那也不是问题。
目前正在尝试以下非常幼稚的方法,但行不通。
Template LoadCsvThroughGDAL {
parameter<File_Structure> inFile;
unit<uint32> Data: StorageName = "= '%DataDir%/_feeds/'+AvailableFeeds/Name[inFeed]+'/'+File_Structure/Name[inFile]+'.csv'", StorageType = "gdal.vect", StorageReadOnly = "True";
unit<uint32> StoreFSS: expr = "Data", StorageName = "= '%DataDir%/_feeds/'+AvailableFeeds/Name[inFeed]+'/fss/'+File_Structure/Name[inFile]+'.fss'";
}
克里斯,
特此为以下工作示例:
1) 从 .csv 文件读取数据
2) 将数据写入 .fss 文件
3) 再次从此 .fss 文件中读取数据
无需显式配置属性名称。
parameter<string> SourceDir := '%SourceDataDir%/OV/GTFS_20190318';
container write_to_fss
{
unit<uint32> trip
: StorageName = "=SourceDir + '/trips.csv'"
, StorageType = "gdal.vect"
, StorageReadOnly = "True";
unit<uint32> name := SubItem_PropValues(trip,'name');
unit<uint32> fssdomain := trip;
container to_fss := for_each_nedv(name/name, 'trip/' + name/name, fssdomain, string)
, StorageName = "=SourceDir + '/trip.fss'"
{
unit<uint32> domain := fssdomain;
}
}
container readdomain: StorageName = "=SourceDir + '/trip.fss'"
, StorageReadOnly = "True"
{
unit<uint32> domain;
}
container trip := for_each_ndv(write_to_fss/name/name, readdomain/domain, string)
, StorageName = "=SourceDir + '/trip.fss'"
, StorageReadOnly = "True"
{
unit<uint32> domain;
}
如果您将读取域从旅行容器中取出,它应该可以工作。
parameter<string> SourceDir := '%SourceDataDir%/OV/GTFS_20190318';
container write_to_fss
{
unit<uint32> trip
: StorageName = "=SourceDir + '/trips.csv'"
, StorageType = "gdal.vect"
, StorageReadOnly = "True";
unit<uint32> name := SubItem_PropValues(trip,'name');
unit<uint32> fssdomain := trip;
container to_fss_domain : StorageName = "=SourceDir + '/trip_domain.fss'"
{
unit<uint32> domain := fssdomain;
}
container to_fss :=
for_each_nedv(
name/name
, 'trip/' + name/name
, to_fss_domain/domain
, string
)
, StorageName = "=SourceDir + '/trip.fss'";
}
container readdomain
: StorageName = "=SourceDir + '/trip_domain.fss'"
, StorageReadOnly = "True"
{
unit<uint32> domain;
}
container trip :=
for_each_ndv(
write_to_fss/name/name
, readdomain/domain
, string)
, StorageName = "=SourceDir + '/trip.fss'"
, StorageReadOnly = "True"
{
unit<uint32> domain := readdomain/domain;
}