GeoDMS, есть ли пример кода для преобразования файлов CSV непосредственно в файлы FSS? - PullRequest
2 голосов
/ 11 апреля 2019

Я создаю конфигурацию GeoDMS, которая считывает файлы GTFS (которые хранятся в формате csv), создает пространственно-временную сеть из этих файлов, а затем вычисляет матрицы времени прохождения OD на основе этой сети.

В настоящее время я читаю файлы csv, используя свойство StorageType = "gdal.grid", что полезно, потому что таким образом мне не нужно заранее указывать длину файла csv. Однако для ускорения вычислений я хотел бы преобразовать необработанные CSV-файлы в Gess-нативные fss-файлы, поскольку это значительно ускорило бы чтение данных.

Однако, если я не ошибаюсь, мне нужно было бы явно определить все атрибуты, которые я хотел бы сохранить в файле fss, правильно? Короче говоря, есть ли пример кода, в котором CSV-файлы хранятся в FSS-файлах?

В настоящее время загружаются файлы CSV и сохраняются промежуточные результаты в шейп-файл ... но это не очень элегантно. В идеале я получаю в свое распоряжение функцию, которая «копирует» 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'";

}

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Chris,

Настоящим рабочим примером для:
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;
}
0 голосов
/ 16 июля 2019

Если вы возьмете домен чтения из контейнера отключения, он должен работать.

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