- Код: Выделить всё
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 геокодирования гугла.
Функция должна быть тредсейфовой. Тобишь допускать паралельный вызов из нескольких потоков.