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;
}