Тип плагинов: Геокодирование

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

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

Тип плагинов: Геокодирование

Сообщение vdemidov » 22 июн 2010, 12:51

Нужен класс который, будет реализовывать интерфейс IGeoCoder, описанный в юнтие i_GeoCoder.pas
Код: Выделить всё
  IGeoCoder = interface
    ['{D9293293-080A-44B7-92F8-3093D35A551B}']
    function GetLocations(ASearch: WideString; ACurrentPos: TDoublePoint): IGeoCodeResult; safecall;
  end;

При создании класс получает настройки прокси с интерфейсом IProxySettings
При вызове GetLocations он должен взять полученный текст запроса, обратится к сервису геокодирования, например Гугл, Яндекс или еще что-то, или к своей локальной базе (Пока настройки для плагинов не реализованы название файла с базой зашивать в коде) и вернуть пользователю объект с интерфейсом IGeoCodeResult
Код: Выделить всё
  IGeoCodeResult = interface
    ['{C90929AD-3A6C-4906-A554-E1DA363ED060}']
    function GetSearchText: WideString; safecall;
    function GetResultCode: Integer; safecall;
    function GetMessage: WideString; safecall;
    function GetPlacemarks: IEnumUnknown; safecall;
    function GetPlacemarksCount: integer; safecall;
  end;


GetSearchText - возвращает сам текст поискового запроса (На всякий случай)
GetResultCode - код результата (Ориентируйтесь на коды HTTP, тоесть 200 все хорошо, 404 не найдено, 5xx ошибка сети и тд.)
GetMessage - Текстовое сообщение с пояснением в случае ошибки
GetPlacemarksCount - количество найденных точек
GetPlacemarks - Перебор найденных точек с интерфейсом IGeoCodePalcemark

Код: Выделить всё
  IGeoCodePalcemark = interface
    ['{744CAB70-0466-433A-AF57-00BD5AFD9F45}']
    function GetPoint: TDoublePoint; safecall;
    function GetAddress: WideString; safecall;
    function GetAccuracy: Integer; safecall;
  end;

GetPoint - собственно говоря координаты найденной точки
GetAddress - название или адресс точки
GetAccuracy - точность нахождения. Взято из API геокодирования гугла.

Функция должна быть тредсейфовой. Тобишь допускать паралельный вызов из нескольких потоков.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1166
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 92 раз.
Поблагодарили: 52 раз.

Re: Тип плагинов: Геокодирование

Сообщение vdemidov » 22 июн 2010, 12:54

В порядке обсуждения в другой ветке появилась идея также через этот интерфейс сделать парсер координат введенных в произвольном формате.
Например такие форматы:
47.487427 33.762386
N47.487427° E33.762386°
N47°29.246' E33°45.743'
N47°29'14.7" E33°45'44.6"
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1166
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 92 раз.
Поблагодарили: 52 раз.

Re: Тип плагинов: Геокодирование

Сообщение VJean » 28 июн 2010, 16:22

vdemidov писал(а):В порядке обсуждения в другой ветке появилась идея также через этот интерфейс сделать парсер координат введенных в произвольном формате.
Например такие форматы:
47.487427 33.762386
N47.487427° E33.762386°
N47°29.246' E33°45.743'
N47°29'14.7" E33°45'44.6"

тогда уж:
Код: Выделить всё
  IGeoCodePalcemark = interface
...
    function GetPoint(Coordinates:byte): TDoublePoint; safecall;
...
  end;

где, в зависимости от Coordinates
0: 47.487427 33.762386
1: N47.487427° E33.762386°
2: N47°29.246' E33°45.743'
3: N47°29'14.7" E33°45'44.6"
но начиная с п.1, тип уже не Double, это String..
простите за грязь, писал не князь. =)
Аватара пользователя
VJean
Новичок
 
Сообщения: 9
Зарегистрирован: 06 май 2010, 14:09
Откуда: HZ
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Тип плагинов: Геокодирование

Сообщение vdemidov » 30 июн 2010, 00:24

Нафига козе баян? Сконвертить из координат строку я и сам смогу.
Да и зная точный формат координат я сам их распарсить из строки могу. Речь идет о том, что пользователь вбил в строку ввода какие-то циферки, а из них получить координаты попытавшись распознать конкретный из четырех или даже больше возможных шаблонов. На самом деле шаблонов там может быть мульен штук: с точками, с запятыми в качестве разделителей, с знаками градусов, минут и секунд, без них, с N и E или с + и - и тд.
Кому нужен свой собственный формат ввода, например в каких-то хитрых квадратах или метрах - на здоровье, пишет плагин и использует.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1166
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 92 раз.
Поблагодарили: 52 раз.


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

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

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