SASGIS

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

Вопросы по исходному коду

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

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

Re: Вопросы по исходному коду

Сообщение Alex54 » 25 мар 2015, 13:29

vdemidov писал(а):IGpsTrackRecorder возвращает итератор последних полученных точек IEnumGPSTrackPoint, который затем передается в создаваемую ренредилку TBitmapLayerProviderForGpsTrack, которая уже и занимается рисованием трека в битмапках. Вам нужно сделать свой аналог класса TBitmapLayerProviderChangeableForGpsTrack, который будет не запрашивать трек, а сам его считывать из файла. Что-то в таком духе. Точнее зависит от того, что же вы хотите получить и зачем.

Виктор, спасибо огромное за быстрые и лаконичные ответы, сделал итератор, все получилось.
Точнее зависит от того, что же вы хотите получить и зачем.

Сделал загрузку треков из специфических гео-форматов РНИЦ, а также треков kml, navitel.

Коллекция подгружается при старте программы здесь (в методе InitLayers)
Код: Выделить всё
  VProvider :=
    TBitmapLayerProviderChangeableForGpsTrack.Create(
      VPerfList,
      GState.GUISyncronizedTimerNotifier,
      FConfig.LayersConfig.GPSTrackConfig,
      GState.Bitmap32StaticFactory,
      GState.GpsTrackRecorder
    );

1. Скажите пожалуйста, как правильнее сделать такую загрузку трека "динамически", чтобы во время работы программы можно было загрузить другой трек (удалив предыдущий) ?
2. Где в интерфейсе спрятана настройка цвета трека от входящих данных, т. е. скорости ?
P. S. Извините, что мучаю вопросами, но уж больно интересная программа.
Alex54
Новичок
 
Сообщения: 28
Зарегистрирован: 18 фев 2015, 12:14
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Re: Вопросы по исходному коду

Сообщение vdemidov » 25 мар 2015, 14:18

Alex54 писал(а):1. Скажите пожалуйста, как правильнее сделать такую загрузку трека "динамически", чтобы во время работы программы можно было загрузить другой трек (удалив предыдущий) ?

Смотря как вы это динамически представляете. В любом случае, я бы предложил выделить интерфейс GpsTrackProvider, который бы реализовывали GState.GpsTrackRecorder и ваш отдельный менеджер треков. Тогда не придется менять TBitmapLayerProviderChangeableForGpsTrack, а достаточно будет добавить создание еще одного экземпляра. И ГУЙ для своего менеджера треков тогда можете делать любой удобный вам.
Alex54 писал(а):2. Где в интерфейсе спрятана настройка цвета трека от входящих данных, т. е. скорости ?

FConfig.LayersConfig.GPSTrackConfig
Alex54 писал(а):P. S. Извините, что мучаю вопросами, но уж больно интересная программа.

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

Re: Вопросы по исходному коду

Сообщение Alex54 » 25 мар 2015, 14:25

Под динамической загрузкой имею ввиду загрузку новой коллекции тем же образом и отображение уже другого трека, скажем, по вызову некоторой процедуры (или по событию). Как заставить программу снова обратиться к коллекции и загрузить ее, удалив предыдущую ? Наверное, спрошу по-другому, где программа хранит уже отображенный трек ? По структуре понял, так и буду делать.
Alex54
Новичок
 
Сообщения: 28
Зарегистрирован: 18 фев 2015, 12:14
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Re: Вопросы по исходному коду

Сообщение vdemidov » 25 мар 2015, 15:42

Alex54 писал(а):Наверное, спрошу по-другому, где программа хранит уже отображенный трек ?

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

Re: Вопросы по исходному коду

Сообщение Alex54 » 25 мар 2015, 16:15

vdemidov писал(а):
Alex54 писал(а):Наверное, спрошу по-другому, где программа хранит уже отображенный трек ?

Если речь про сами данные трека, то они хранятся в GpsTrackRecorder. Если речь про отрендеренные тайлы, то они хранятся в соответствующей матрице тайлов.

ОК, про GpsTrackRecorder вижу, а как тогда "стереть" нарисованный трек ? Заново отобразить тайлы, которые он "зацепил" ?
Alex54
Новичок
 
Сообщения: 28
Зарегистрирован: 18 фев 2015, 12:14
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Re: Вопросы по исходному коду

Сообщение vdemidov » 25 мар 2015, 16:46

Alex54 писал(а):как тогда "стереть" нарисованный трек ? Заново отобразить тайлы, которые он "зацепил" ?

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

Re: Вопросы по исходному коду

Сообщение Alex54 » 25 мар 2015, 17:46

vdemidov писал(а):
Alex54 писал(а):как тогда "стереть" нарисованный трек ? Заново отобразить тайлы, которые он "зацепил" ?

Просто уведомить, что исходные данные изменились. Все остальное система сделает сама.

Подскажите, какой метод для этого вызывается ? )
Я верно понимаю, что это метод DoChangeNotify(), вызываемый внутри некоторых методов TGPSTrackRecorder ? Или класс, который загружает трек (в нашем случае это аналог TGPSTrackRecorder), должен наследовать IChangeable ?
Alex54
Новичок
 
Сообщения: 28
Зарегистрирован: 18 фев 2015, 12:14
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Re: Вопросы по исходному коду

Сообщение vdemidov » 25 мар 2015, 17:54

Alex54 писал(а):класс, который загружает трек (в нашем случае это аналог TGPSTrackRecorder), должен наследовать IChangeable ?

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

Re: Вопросы по исходному коду

Сообщение Alex54 » 25 мар 2015, 19:09

vdemidov писал(а):
Alex54 писал(а):класс, который загружает трек (в нашем случае это аналог TGPSTrackRecorder), должен наследовать IChangeable ?

Именно. Для этого проще всего отнаследоваться от TChangeableBase и в нужное время дергать метод DoChangeNotify()

Скажите, если наследоваться от TChangeableBase, его конструктор принимает некий параметр IReadWriteSync. Если экземпляр создается в frm_Main, что передается в качестве этого IReadWriteSync ?
P. S. А если делаю от TChangeableWithSimpleLockBase, то не работает (
Alex54
Новичок
 
Сообщения: 28
Зарегистрирован: 18 фев 2015, 12:14
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Re: Вопросы по исходному коду

Сообщение vdemidov » 25 мар 2015, 19:22

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

Пред.След.

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

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

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