уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

В прошлой статье мы рассмотрели работу со стилями различных элементов KML, таких как линии, полигоны, подписи к меткам. Однако возможности KML не ограничиваются работой только с этими элементами и сегодня мы будем изменять стиль отображения подсказок к меткам, используя Delphi.

По умолчанию в Google Earth используется вот такой стиль метки:

Подсказки для метки в Google Earth

Подсказка появляется, как и положено, при клике на определенной метке и содержит её название, описание, а также две служебные ссылки для показа пути от метки и до метки. Однако, не всегда такой внешний вид метки нам необходим. Например, я точно знаю, что мои метки на карте будут располагаться в местах, куда машина не доедет и самолет не долетит — зачем мне лишние ссылки в подсказке?

Чтобы изменить стиль метки, нам необходимо в элементе Style (см. предыдущую статью) определить элемент BalloonStyle, который является наследником абстрактного элемента SubStyle:

Часть иерархии элементов KML (https://developers.google.com/kml/documentation/kmlreference)

В Delphi элемент BaloonStyle будет выглядеть следующим образом:

TBaloonDisplayMode = (bmDefault, bmHide);
 
TKmlBaloonStyle = class(TKmlSubStyle)
  private
    FBgColor: string;
    FTextColor: string;
    FText: string;
    FDisplayMode: TBaloonDisplayMode;
  protected
    function GetName:string;override;
  public
    function Save(AParentNode: IXMLNode): IXMLNode; override;
    property BgColor: string read FBgColor write FBgColor;
    property TextColor: string read FTextColor write FTextColor;
    property Text: string read FText write FText;
    property DisplayMode: TBaloonDisplayMode read FDisplayMode write FDisplayMode;
  end;

Свойства TKmlBaloonStyle следующие:

Свойство  Тип Описание
BgColor string Цвет фона. Про определение цветов в KML  см. предыдущую статью.
TextColor string Цвет текста
Text string Текст подсказки. Если текст не указан, то показывается подсказка по умолчанию (название, выделенное жирным цветом, описание и направление движение). Более подробное описание свойства см. ниже.
DisplayMode TBaloonDisplayMode Если значение равно bmHide, то подсказка для метки не будет показываться

Что касается свойства Text, то в этом свойстве можно ссылаться на свойства элемента Feature (см. эту статью) — название, краткое описание, подробное описание, адрес и так далее. Для этого, в свойстве Text могут использоваться следующие служебные теги:

Тег Описание
$[name] заменяется на название элемента
$[description] заменяется на подробное описание элемента
$[address] заменяется на адрес элемента
$[id] заменяется на идентификатор элемента
$[Snippet]
заменяется на краткое описание элемента
$[geDirections]
заменяется на направление движения (ссылки «отсюда» и «сюда»)

Для того, чтобы продемонстрировать работу со стилем подсказки, воспользуемся нашим демонстрационным приложением, которое было разработано в этой статье и добавим в него следующий код:

var Style: TKmlStyle;
begin
  //добавляем новую метку на карту
  ADocument.Placemark.Add(TKmlPlacemark.Create(TKmlPoint));
  with ADocument.Placemark.Last do
  begin
    ID:='MyPlacemark';
    Name := edPlaceName.Text;
    Snippet := edPlaceSnippet.Text;
    Description := memPlaceDescr.Text;
    Visibility := chkPlaceVisible.Checked;
    StyleUrl:='#MySharedStyle';
    TKmlPoint(Geometry).Extrude := chkPlaceExtrude.Checked;
    TKmlPoint(Geometry).AltitudeMode := TAltitudeModeEnum(cbAltitudeModeEnum.ItemIndex);
    TKmlPoint(Geometry).Coordinates.Latitude := StrToFloat(edLatitude.Text);
    TKmlPoint(Geometry).Coordinates.Longtitude := StrToFloat(edLongtitude.Text);
    TKmlPoint(Geometry).Coordinates.Altitude := StrToFloat(edAltitude.Text);
  end;
  lbPlacemark.Items.Add(Format('(%s, %s, %s)', [edLatitude.Text, edLongtitude.Text, edAltitude.Text]));
 
  //добавляем стиль отображения подсказки для новой метки
  Style:=TKmlStyle.Create;
  Style.Id:='MySharedStyle';
  Style.AddStyle(TKmlBaloonStyle);
  TKmlBaloonStyle(Style.SubStyle.Last).BgColor:='ff00ff00';
  TKmlBaloonStyle(Style.SubStyle.Last).TextColor:='7fff00ff';
  TKmlBaloonStyle(Style.SubStyle.Last).DisplayMode:=bmDefault;
  TKmlBaloonStyle(Style.SubStyle.Last).Text:='Эта метка с идентификатором $[id] и названием $[name] имеет описание $[description]';
  ADocument.Styles.Add(Style);
end;

В результате мы получим на карте метку с вот такой подсказкой:

Аналогичным образом мы можем изменять стили отображения других меток, например, назначать каждой метке в KML своё уникальное описание, используя свойство Text, задавать цвет фона, текста или вообще скрывать подсказки для определенных меток.

Скачать обновленный модуль kml.pas для работы с KML в Delphi вы можете со страницы с исходниками:

Исходники — Google API

Книжная полка

Описание Подробно рассматривается библиотека FM, позволяющая создавать полнофункциональное программное обеспечение для операционных систем Windows и OS X, а также для смартфонов и планшетных компьютеров, работающих под управлением Android и iOS
купить книгу delphi на ЛитРес
Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
купить книгу delphi на ЛитРес
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
купить книгу delphi на ЛитРес
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии