Плагинов пока нет. Можете просто реализовать импорт на Delphi. Модули u_VectorItemTreeImporter*. Для парсинга JSon уже есть библиотека SuperObject (используется в u_GeoCoderByYandex и других местах). Реализовать, думаю будет совсем не сложно.DJ VK писал(а):Может ввод напрямую через плагин sas будет несложно реализовать? Существую ли плагины для импорта меток и полигонов и парочка примерчиков?
Вопросы по исходному коду
- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: Вопросы по исходному коду
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
- DJ VK
- Гуру
- Сообщения: 1468
- Зарегистрирован: 16 апр 2009, 13:57
- Откуда: 8 км. от МКАД
- Благодарил (а): 80 раз
- Поблагодарили: 314 раз
Re: Вопросы по исходному коду
Парсер Kml
u_KmlInfoSimpleParser
иерархию при импорте сохраняет или все в 1 категорию пихает?
как вообще категория меток учитывается? Я вижу только
u_KmlInfoSimpleParser
иерархию при импорте сохраняет или все в 1 категорию пихает?
как вообще категория меток учитывается? Я вижу только
Код: Выделить всё
FVectorDataFactory.BuildItem(
AVectorDataItemMainInfoFactory.BuildMainInfo(AIdData, AName, ADesc),
nil,
VGeometry
);- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: Вопросы по исходному коду
Не сохраняет. Это парсер используется только для викимапии и панарамио.DJ VK писал(а):Парсер Kml
u_KmlInfoSimpleParser
иерархию при импорте сохраняет или все в 1 категорию пихает?
Как я уже писал, смотреть нужно юниты u_VectorItemTreeImporter*.pas
Нужно создавать дерево из элементов TVectorItemTree
То есть, грузим все точки категории в массив IVectorItemSubset, все подкатегории в отдельные IVectorItemTree в IInterfaceListStatic, а потом создаем соответствующий TVectorItemTree.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
- DJ VK
- Гуру
- Сообщения: 1468
- Зарегистрирован: 16 апр 2009, 13:57
- Откуда: 8 км. от МКАД
- Благодарил (а): 80 раз
- Поблагодарили: 314 раз
Re: Вопросы по исходному коду
Это очень сложно.vdemidov писал(а):Не сохраняет. Это парсер используется только для викимапии и панарамио.DJ VK писал(а):Парсер Kml
u_KmlInfoSimpleParser
иерархию при импорте сохраняет или все в 1 категорию пихает?
Как я уже писал, смотреть нужно юниты u_VectorItemTreeImporter*.pas
Нужно создавать дерево из элементов TVectorItemTree
То есть, грузим все точки категории в массив IVectorItemSubset, все подкатегории в отдельные IVectorItemTree в IInterfaceListStatic, а потом создаем соответствующий TVectorItemTree.
Надеюсь что-нибудь с Вашей помощью да получится.
- скрытый текст: показать
1. Возможно как-то поддержать ввод доп.настроек пользователем для данного формата импорта ?
2. Есть конкретный пример TVectorItemTree или парсер где все это уже строится, и можно просто взять и подменить поля конкретных меток?
3. Как трактовать MultiPoint и MultiLineString. (Набор точек и набор незамкнутых линий)?
4. Сериализация может и упрощает задачу, но ограничивает область применения - 1 парсер на 1 узкоспецифичный вид GeoJSON. Вручную ведь не сильно медленнее ?
5. Как обрабатывать массив массивов в superobject?
[a, b] - массив значений. Метод d
[{},{}] - массив объектов. метод o
[[],[]] - Массив массивов/ метода нет???
- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: Вопросы по исходному коду
Ну так именно это и сделано. Ядро программы получает дерево из IVectorItemTree, в которых есть только названия категорий (параметры категорий не предусмотрены для импорта вообще) и сами метки каждой из категорий. Причем у меток не обязательно должны быть все атрибуты, а только геометрия, название и описание. А уже потом по этому дереву ядро программы создает недостающие категории, переназначает параметры оформления в соответствии с настройками импорта и запихивает метки в базу.DJ VK писал(а):Я в своих программах всегда стремлюсь поделить такого вида задачи на две части, в т.ч потому, что работаю часто в паре.
В нашем случае это будет так:
1. Парсер только строит дерево сущностей, которое должно быть внедрено.
например, TTreeNodes c типизированным Record вместо TObject.
Категория, Имя, Описание, Тип.
2. Ядро программы от всех парсеров получает однотипное дерево, и вклеивает в нужые категориии.
Как итог, ядро программы, которое не я обычно делаю и мне легко говорить, совсем чуть-чуть усложняется.![]()
Но зато парсеры потом создаются очень быстро.
Совсем не забивать свою голову внутренними сущностями программы - вот идеал. И для отладки не нужно тысячу uses=include тянуть. Вообще не нужна планета для этого и все её ежедневночные дампы и reqiures.![]()
Нет. Вам придется разбираться только в маленьком кусочке классов, которые касаются импорта\экспорта меток. Были бы плагины были бы ровно эти же классы, только еще усложненные необходимостью пробрасывать это все хозяйство между ядром и динамической библиотекой, следить за версиями всего этого и тд.DJ VK писал(а):Мне предстоит неделю или несколько даже пытаться разобраться в десятках или сотнях абсолютно мне чуждых классов. Да еще и под отладчиком их смотреть. А ведь вместо этой неприятной для меня работы, я мог бы уже грызть дальше Esri Shp и другие, если бы...
я не жалуюсь, это скорее сожаление о довольно сложной и враждебной структуре программы (без поддержки плагинов чуть ли не на любой чих.)
Делаете свой форк, а он в любом случае понадобится, и там хоть в одиночку, хоть с помощью всей планеты допиливаете фитчи, а когда они полностью готовы формируете окончательные коммиты и отпраляете пулл-реквест.DJ VK писал(а):ну и неудобно отсутсвие некого unstable репозитория для недоделанных до конца дополнений, которые в конечном итоге, после совместной доработки сообществом, могли бы дополнить таки программу.
Потому и работает до сих пор, что не доступен широким массам. Кому нужно - сам допилит. Я занимаюсь ядром приложения, а не отдельными фитчами рассчитанными на конкретные сервисы.DJ VK писал(а): Антибан г**гля кстати работает как часы уже полгода почти. Но "стараниями" сообщества доступен лишь мне одному
Так не бывает. Хотя как я уже писал форк делать придется в любом случае. А в своем форке можете делать все что угодно и никто не запретит и не ограничит.DJ VK писал(а):Я не оспариваю законность претензий. Я просто говорю, что продуктивнее коллективное взаимодействие без жесткого разграничения прав и обязанностей и взаимовыручка.
Уделяйте. Внедряйте.DJ VK писал(а):Предлагаю уделять немного внимания допиливанию таких вот нововеедений. И часть кода внедрять не коммитами и контролем версий, а Бейонд компэром прямо в папку с отлаживаемым проектом.
Чего не хватает?DJ VK писал(а):1. обсуждение новых бункций и алгоритмов их работы - багтрекер.
Уже есть битбукет. С возможность комментирования оналйн и тд.DJ VK писал(а):2. Публикация фрагментов будущего кода - надо площадку.
Тут сложнее. Тут и вопрос доверия к чужим изменениям и к чужому коду. ИМХО для попробовать достаточно выложить собранный exe на любой обменники или даже приаттачить в багтрекере.DJ VK писал(а):3. Публикация модифицированных исходников программы сделанных пользователями - надо площадку.
В общем вопрос не в технических средствах.
Пока никак, точнее там есть какие-то костыли, но именно костыли. Если есть предложения говорите.DJ VK писал(а):1. Возможно как-то поддержать ввод доп.настроек пользователем для данного формата импорта ?
u_VectorItemTreeImporterXML.pasDJ VK писал(а):2. Есть конкретный пример TVectorItemTree или парсер где все это уже строится, и можно просто взять и подменить поля конкретных меток?
MultiPoint как хотите. Пока такой сущности в САС нету. Можно размножить на несколько отдельных точек.DJ VK писал(а):3. Как трактовать MultiPoint и MultiLineString. (Набор точек и набор незамкнутых линий)?
MultiLineString как мультилинию.
В чем вопрос то?DJ VK писал(а):. Сериализация может и упрощает задачу, но ограничивает область применения - 1 парсер на 1 узкоспецифичный вид GeoJSON. Вручную ведь не сильно медленнее ?
Понятия не имею. Спросите у разработчиков superobjectDJ VK писал(а):5. Как обрабатывать массив массивов в superobject?
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
- DJ VK
- Гуру
- Сообщения: 1468
- Зарегистрирован: 16 апр 2009, 13:57
- Откуда: 8 км. от МКАД
- Благодарил (а): 80 раз
- Поблагодарили: 314 раз
Re: Вопросы по исходному коду
Дерево получил (пока что ttreeview). с суперобъектом разберусь.
u_VectorItemTreeImporterXML.pas неудачный пример
Большая часть его работы спрятана в недрах XmlVectorObjects и VSAGPS
А примера попроще нет.
1.метка создается судя по всему не напрямую, а через "фабрику" ?
2. У меня для каждой метки есть уникальный id( int64. По ним строится иерархическое дерево.) - куда его запихнуть при построении?
3. у меток в файле нет никаких параметров цветовой окраски. вместо VAppearance подставлять nil ?
u_VectorItemTreeImporterXML.pas неудачный пример
Большая часть его работы спрятана в недрах XmlVectorObjects и VSAGPS
А примера попроще нет.
1.метка создается судя по всему не напрямую, а через "фабрику" ?
Код: Выделить всё
VItem :=
FDataFactory.BuildItem(
FVectorDataItemMainInfoFactory.BuildMainInfo(FIdData, VName, VDesc),
VAppearance,
VGeometry
);
3. у меток в файле нет никаких параметров цветовой окраски. вместо VAppearance подставлять nil ?
- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: Вопросы по исходному коду
Увы. Никто пока не реализовал. Первым будешь. На самом деле, все сводится к простому рекурсивному построению дерева. В принципе можешь посмотреть в функциях CategoryTreeToMarkTreeHelper и CategoryListToCategoryTree, которые строят дерево категорий по списку со сложными именами, а потом по этому дереву уже результирующее с метками.DJ VK писал(а): u_VectorItemTreeImporterXML.pas неудачный пример
Большая часть его работы спрятана в недрах XmlVectorObjects и VSAGPS
А примера попроще нет.![]()
Через фабрику только что бы не морочиться каждый раз отдельно с хешами и пробрасыванием вычисления хэшей. Но ИМХО тебе так даже проще будет.DJ VK писал(а):1.метка создается судя по всему не напрямую, а через "фабрику" ?
А зачем он тебе?DJ VK писал(а): 2. У меня для каждой метки есть уникальный id( int64. По ним строится иерархическое дерево.) - куда его запихнуть при построении?
Пока есть два варианта.
Свой вариант наследник IVectorDataItemMainInfo, который будет хранить нужные тебе айдишки. Но они доживут только до сохранения в базу, после чего будут пересозданы так как в базе все равно такого поля нет.
Или просто в текст описания запихнуть в какой-то тег.
Да. Именно так. Если данных нет, то потом движок создаст их на основе настроек импорта.DJ VK писал(а): 3. у меток в файле нет никаких параметров цветовой окраски. вместо VAppearance подставлять nil ?
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: Вопросы по исходному коду
Вообще систему импорта как и экспорта нужно еще допиливать. Нужно добавить возможность им указывать какие в принципе могут быть типы меток. Например wpt поддерживает только точки, следовательно при импорте нет смысла показывать настройки импорта путей и полигонов, а при экспорте нужно предупредить, если в экспортируемых метках есть пути или полигоны и возможно спросить что с ними делать (можно размножать в отдельные точки, можно оставлять только первую точку пути, оставлять только точку центра полигона и тд).
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: Вопросы по исходному коду
Если тебе только для построения дерева, то проще держать отдельный внешний словарик на время пока идет импорт.vdemidov писал(а):А зачем он тебе?DJ VK писал(а): 2. У меня для каждой метки есть уникальный id( int64. По ним строится иерархическое дерево.) - куда его запихнуть при построении?
Пока есть два варианта.
Свой вариант наследник IVectorDataItemMainInfo, который будет хранить нужные тебе айдишки. Но они доживут только до сохранения в базу, после чего будут пересозданы так как в базе все равно такого поля нет.
Или просто в текст описания запихнуть в какой-то тег.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
- DJ VK
- Гуру
- Сообщения: 1468
- Зарегистрирован: 16 апр 2009, 13:57
- Откуда: 8 км. от МКАД
- Благодарил (а): 80 раз
- Поблагодарили: 314 раз
Re: Вопросы по исходному коду
А в программе наоборот, класс геометрии мультиточки и нету класса геометрии точки.
в целом уже понятно, что геометрия будет одним из классов TGeometryLonLat*** с указателем приведенным к IGeometryLonLat, а метка целиком TVectorItemTree. Можно даже дерево с ними получить на основе TTreeView для отладки.
Теперь как можно подробнее, пожалуйста, про структуру категорий и про деревья.
TVectorItemSubsetBuilderFactory Create
получаем TVectorItemSubsetBuilder через Build
и добавляем в него через Add метки TVectorItemTree полученные выше.
Это линейная структура. а как сделать разветвленную ?
это я так понимаю если напрямую делать не используя TGeometryLonLatFactory.TGeometryLonLatMultiPoint = class(TGeometryLonLatBase, IGeometryLonLat, IGeometryLonLatMultiPoint)
private
function GetEnum: IEnumLonLatPoint;
function IsSameGeometry(const AGeometry: IGeometryLonLat): Boolean;
function IsSame(const APoint: IGeometryLonLatMultiPoint): Boolean;
function GetGoToPoint: TDoublePoint;
public
constructor Create(
const ABounds: ILonLatRect;
const AHash: THashValue;
const APoints: IDoublePoints
);
end;
в целом уже понятно, что геометрия будет одним из классов TGeometryLonLat*** с указателем приведенным к IGeometryLonLat, а метка целиком TVectorItemTree. Можно даже дерево с ними получить на основе TTreeView для отладки.
Теперь как можно подробнее, пожалуйста, про структуру категорий и про деревья.
TVectorItemSubsetBuilderFactory Create
получаем TVectorItemSubsetBuilder через Build
и добавляем в него через Add метки TVectorItemTree полученные выше.
Это линейная структура. а как сделать разветвленную ?
- скрытый текст: показать