SASGIS

Веб-картография и навигация

Тип плагинов: Простой экспорт в файл

Форум для обсуждения деталей разработки программы SAS.Планета

Модераторы: vdemidov, Tolik

Re: Тип плагинов: Простой экспорт в файл

Сообщение zed » 19 авг 2010, 18:51

Что такое TDoubleRect и как мне узнать тип карты (sat,map и проч.) для формирования имени тайла в архиве?

Вот такой набросок юнита:
Код: Выделить всё
unit SasTar;

interface

uses Windows, Classes, TarWriter;

type
  TDoubleRect = record
    X1,Y1:Double;
    X2,Y2:Double;
  end;

  ISimpleTileProcessor = interface
    procedure ProcessTile(APos: Tpoint; Azoom: byte; ALonLatRect: TDoubleRect; ATileSize: Cardinal; ATileBuf: Pointer);
  end;

  IExportSimpleToFile = interface
    function GetSupportedContentTypes: WideString;
    function GetFileFilters: WideString;
    function GetFileExtDefault: WideString;
    function StartExport(ASourceContentType: WideString; AFileName: WideString): ISimpleTileProcessor;
  end;

  TExportSimpleToFile = class (TInterfacedObject, IExportSimpleToFile)
  public
    function GetSupportedContentTypes: WideString;
    function GetFileFilters: WideString;
    function GetFileExtDefault: WideString;
    function StartExport(ASourceContentType: WideString; AFileName: WideString): ISimpleTileProcessor;
  end;

  TSimpleTileProcessor = class (TInterfacedObject, ISimpleTileProcessor)
  private
    FTarWriter : TTarWriter;
    FStream    : TMemoryStream;
  public
    procedure ProcessTile(APos: Tpoint; Azoom: byte; ALonLatRect: TDoubleRect; ATileSize: Cardinal; ATileBuf: Pointer);
    constructor Create (ArcName:string);
    destructor  Destroy; OVERRIDE;
  end;

function GetIExportSimpleToFile: IExportSimpleToFile;

implementation

function GetIExportSimpleToFile: IExportSimpleToFile;
begin
  result := TExportSimpleToFile.Create;
end;

{ TExportSimpleToFile }

function TExportSimpleToFile.GetSupportedContentTypes: WideString;
begin
  result := '*';
end;

function TExportSimpleToFile.GetFileFilters: WideString;
begin
  result := '*.*';
end;

function TExportSimpleToFile.GetFileExtDefault: WideString;
begin
  result := 'tar';
end;

function TExportSimpleToFile.StartExport(ASourceContentType: WideString; AFileName: WideString): ISimpleTileProcessor;
begin
  result := TSimpleTileProcessor.Create(AFileName);
end;

{ TSimpleTileProcessor }

constructor TSimpleTileProcessor.Create (ArcName:string);
begin
  INHERITED Create;
  FTarWriter := TTarWriter.Create(ArcName);
  FStream    := TMemoryStream.Create;
end;

destructor TSimpleTileProcessor.Destroy;
begin
  FTarWriter.Free;
  FStream.Free;
  INHERITED Destroy;
end;

procedure TSimpleTileProcessor.ProcessTile(APos: Tpoint; Azoom: byte; ALonLatRect: TDoubleRect; ATileSize: Cardinal; ATileBuf: Pointer);
begin
  // запись в архив
end;

end.
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Тип плагинов: Простой экспорт в файл

Сообщение vdemidov » 19 авг 2010, 20:52

Вроде бы все правильно. Разве что вот здесь:
zed писал(а):
Код: Выделить всё
function TExportSimpleToFile.GetSupportedContentTypes: WideString;
begin
  result := '*';
end;

Нужно вместо '*' писать Tar Files (*.tar)|*.tar|All files (*.*)|*.*

zed писал(а):как мне узнать тип карты (sat,map и проч.) для формирования имени тайла в архиве?

Никак. Этот тип плагинов не предусматривает экспорт из нескольких источников. Сат, Мап и прочее будет предложено пользователю как дефолтное имя архива, но он сможет его легко поменять, если захочет.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 157 раз.

Re: Тип плагинов: Простой экспорт в файл

Сообщение vdemidov » 19 авг 2010, 20:56

zed писал(а):Что такое TDoubleRect

Ну ориентируйтесь на что-то такое:
Код: Выделить всё
type
  TDoublePoint = record
    X, Y: Double;
  end;

  TDoubleRect = packed record
    case Integer of
      0: (Left, Top: Double;
        Right, Bottom: Double);
      1: (TopLeft, BottomRight: TDoublePoint);
  end;
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 157 раз.

Re: Тип плагинов: Простой экспорт в файл

Сообщение zed » 19 авг 2010, 21:06

ASourceContentType это я так понимаю, расширение тайлов которые будем экспортировать?

Этот тип плагинов не предусматривает экспорт из нескольких источников

Хм, значит имя тайла в архиве будет без имени источника. Т.е. максимуму: Xi\X\Yi\Y.ext...

Делать в виде юнита или dll? Пишу на делфи 2007 как бы там нестыковок небыло с юнитом.
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Тип плагинов: Простой экспорт в файл

Сообщение zed » 19 авг 2010, 21:16

vdemidov писал(а):Вроде бы все правильно. Разве что вот здесь:
zed писал(а):
Код: Выделить всё
function TExportSimpleToFile.GetSupportedContentTypes: WideString;
begin
  result := '*';
end;

Нужно вместо '*' писать Tar Files (*.tar)|*.tar|All files (*.*)|*.*


Не понял:
Функция GetSupportedContentTypes возвращает список поддерживаемых плагинов типов исходных данных приблизительно в таком виде:
"image/jpeg"; "image/png"; "image/gif"; "application/vnd.google-earth.kml+xml"

т.е. GetSupportedContentTypes - какие типы мы можем обрабатывать.

Наверное маску надо писать для:
Код: Выделить всё
function TExportSimpleToFile.GetFileExtDefault: WideString;
begin
  result := 'tar';
end;

GetFileExtDefault - дефолтное имя контейнера?
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Тип плагинов: Простой экспорт в файл

Сообщение vdemidov » 19 авг 2010, 21:40

zed писал(а):ASourceContentType это я так понимаю, расширение тайлов которые будем экспортировать?

Нет. Это именно контент тайп того что экспортируется. Расширение на ваш выбор.
Для "image/jpeg" это jpg или jpeg
для "image/png" это png
для "image/gif" это gif
для "application/vnd.google-earth.kml+xml" это kml
zed писал(а):Хм, значит имя тайла в архиве будет без имени источника. Т.е. максимуму: Xi\X\Yi\Y.ext...

Ну да. У вас есть зум и координаты тайла. Можно перевести tqrs, можно в ES-формат, можно в 0123 формат. Можно в SAS-овском формате.
zed писал(а):Делать в виде юнита или dll? Пишу на делфи 2007 как бы там нестыковок небыло с юнитом.

Для начала сделай что бы просто работало у тебя. А там разберемся. Или пришлешь исходники, а я для начала встрою в Планету, или подождем поддержки Планетой плагинов и я предоставлю SDK для компиляции dll, разберемся.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 157 раз.

Re: Тип плагинов: Простой экспорт в файл

Сообщение vdemidov » 19 авг 2010, 21:43

zed писал(а):
vdemidov писал(а):Вроде бы все правильно. Разве что вот здесь:
zed писал(а):
Код: Выделить всё
function TExportSimpleToFile.GetSupportedContentTypes: WideString;
begin
  result := '*';
end;

Нужно вместо '*' писать Tar Files (*.tar)|*.tar|All files (*.*)|*.*


Не понял:
Функция GetSupportedContentTypes возвращает список поддерживаемых плагинов типов исходных данных приблизительно в таком виде:
"image/jpeg"; "image/png"; "image/gif"; "application/vnd.google-earth.kml+xml"

т.е. GetSupportedContentTypes - какие типы мы можем обрабатывать.


Упс. Точно. промахнулся я. Имелось в виду:
Код: Выделить всё
function TExportSimpleToFile.GetFileFilters: WideString;
begin
  result := '*.*';
end;
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 157 раз.

Re: Тип плагинов: Простой экспорт в файл

Сообщение zed » 19 авг 2010, 21:44

vdemidov писал(а):
zed писал(а):ASourceContentType это я так понимаю, расширение тайлов которые будем экспортировать?

Нет. Это именно контент тайп того что экспортируется. Расширение на ваш выбор.
Для "image/jpeg" это jpg или jpeg
для "image/png" это png
для "image/gif" это gif
для "application/vnd.google-earth.kml+xml" это kml

Блин, это теперь надо писать парсер всех возможных контент тайпов... Может есть готовая функция?
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Тип плагинов: Простой экспорт в файл

Сообщение vdemidov » 19 авг 2010, 21:50

zed писал(а):GetFileExtDefault - дефолтное имя контейнера?

Не имя, а расширение файла. По сути пропертя для TFileSaveDialog

zed писал(а):Блин, это теперь надо писать парсер всех возможных контент тайпов... Может есть готовая функция?
Давай для начала пропиши тупым кейсом пяток основных типов файлов и добавь их в список поддерживаемых вместо звездочки, а потом я сделаю сервис, который будет предоставлять хост программа, для получения дефолтного расширения файла. Просто не хочется добавлять еще и расширение, ибо оно будет слегка избыточно. И отказываться от Контент тайпа не хочется, так как он более информативен, чем расширение. Так что наверное пока так будет, а там посмотрим.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 157 раз.

Re: Тип плагинов: Простой экспорт в файл

Сообщение zed » 19 авг 2010, 22:05

Сегодня уже некогда погонять, но на первый взгляд должно работать. Завтра если будет время напишу тестовую утиль и погоняю под нагрузкой.
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Пред.След.

Вернуться в Раздел для разработчиков программы SAS.Планета

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0