В прошлой статье мы рассмотрели работу со стилями различных элементов KML, таких как линии, полигоны, подписи к меткам. Однако возможности KML не ограничиваются работой только с этими элементами и сегодня мы будем изменять стиль отображения подсказок к меткам, используя Delphi.
По умолчанию в Google Earth используется вот такой стиль метки:
Подсказка появляется, как и положено, при клике на определенной метке и содержит её название, описание, а также две служебные ссылки для показа пути от метки и до метки. Однако, не всегда такой внешний вид метки нам необходим. Например, я точно знаю, что мои метки на карте будут располагаться в местах, куда машина не доедет и самолет не долетит — зачем мне лишние ссылки в подсказке?
Чтобы изменить стиль метки, нам необходимо в элементе Style (см. предыдущую статью) определить элемент BalloonStyle, который является наследником абстрактного элемента SubStyle:
В 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 вы можете со страницы с исходниками:
Следующая статья: «KML Reference в Delphi по-русски #6: Изменяем стиль иконок«
Книжная полка
![]() |
Описание Подробно рассматривается библиотека FM, позволяющая создавать полнофункциональное программное обеспечение для операционных систем Windows и OS X, а также для смартфонов и планшетных компьютеров, работающих под управлением Android и iOS
|
![]() |
![]() |
Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
|
![]() |
![]() |
Название: О чем не пишут в книгах по Delphi
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
|
![]() |






