SASGIS

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

SAS.Wiki

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

Инструменты пользователя

Инструменты сайта


pluginapi:plugintype:геокодирование

Нужен класс который, будет реализовывать интерфейс IGeoCoder, описанный в юните i_GeoCoder.pas

При вызове GetLocations он должен взять полученный текст запроса, обратится к сервису геокодирования, например Гугл, Яндекс или еще что-то, или к своей локальной базе (Пока настройки для плагинов не реализованы название файла с базой зашивать в коде) и вернуть пользователю объект с интерфейсом IGeoCodeResult

Методы IGeoCodeResult:

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

Методы IGeoCodePalcemark:

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

Функция должна быть тредсейфовой. Тобишь допускать паралельный вызов из нескольких потоков.

i_GeoCoder.pas
unit i_GeoCoder;
 
interface
 
uses
  ActiveX,
  t_GeoTypes;
 
type
  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;
 
  IGeoCodePalcemark = interface
    ['{744CAB70-0466-433A-AF57-00BD5AFD9F45}']
    function GetPoint: TDoublePoint; safecall;
    function GetAddress: WideString; safecall;
    function GetAccuracy: Integer; safecall;
  end;
 
  IGeoCoder = interface
    ['{D9293293-080A-44B7-92F8-3093D35A551B}']
    function GetLocations(ASearch: WideString; ACurrentPos: TDoublePoint): IGeoCodeResult; safecall;
  end;
 
implementation
 
end.
Перевод этой страницы: