1. 程式人生 > 其它 >圖文解說ChinaCock高德地圖元件-使用LabelMarker顯示海量標註(五)

圖文解說ChinaCock高德地圖元件-使用LabelMarker顯示海量標註(五)

前文介紹了使用TMarker物件在地圖上畫多個標註,這隻適用於小量標註的情況,如果標註量大於500,請按本文內容實現,才不會卡頓。

接下來是TLabelMarker物件出場!

function TFrame1.AddLabelMarker(ALabelsLayer:TCCuniGUIAMap.TLabelsLayer; ALng, ALat: Double; AName: string): TCCuniGUIAMap.TLabelMarker;
begin
  // 新增LabelMarker
  result:= ALabelsLayer.LabelMarkers.Add;

  with result do
begin Options.Icon.Image:='/images/ai_32x32.png' // 圖示所用圖片大小,根據所設定的大小拉伸或壓縮圖片,等同於CSS中的background-size屬性。可用於實現高清屏的高清效果 with Options.Icon.Size do begin width := 32; height := 28; end; Options.Name := AName; CustomParams.Values['name'] := AName; with Options.Position do
begin Lng := ALng; Lat := ALat; end; end; end;

先實現一個方法,根據給定的經緯度,在指定的LabelsLayer物件上畫標註,注意,LabelsLayer是一個新的物件,表示地圖上的一個圖層,我們先在這個圖層上畫LabelMarker。

接下來,我們要建立這個LabelsLayer圖層:

procedure TFrame1.CCuniGUIAMap1MapReady(Sender: TObject);
begin
  //complete是地圖切片都下載好了 沒必要等地圖切片下載好 onmapready就是地圖物件已經存在  至於裡面的切片等它慢慢渲染
//在mapready裡面 程式響應更快 加marker 地圖下載它的切片(網路慢時不影響你等它下完在加marker) //填加LabelsLayer圖層 with self.CCuniGUIAMap1.LabelsLayers.Add do begin with Options do begin with Zooms do begin Min := 3; Max := 20; end; ZIndex := 2; collision := false; allowCollision := false; end; //將圖層新增到地圖 AddToMap; end; end;

看上面的程式碼,原來CCuniGUIAMap用LabelsLayers來管理標籤圖層,你可以加N多個圖層,並且在對應的圖層上建立標註,然後你就可以控制每個圖層的顯示與隱藏!

注意:我們是在地圖的OnMapReady事件中建立的圖層,這樣可以提高效率。

準備好了圖層,接一下,我們就可以迴圈呼叫AddLabelMarker,建立批量標註。

procedure TWhhChartFrame.DrawLabelMarkers;
var
  LabelsLayer: TCCuniGUIAMap.TLabelsLayer;
  LabelMarker: TCCuniGUIAMap.TLabelMarker;
begin

  LabelsLayer := Self.CCuniGUIAMap1.LabelsLayers[0];
  LabelsLayer.Clear;//清空圖層的所有標註

  with q do
  begin
    First;
    while not eof do
    begin
       LabelMarker := AddLabelMarker(LabelsLayer, FieldByName('FJD').AsFloat, FieldByName('FWD').AsFloat, FieldByName('fname').AsString);
      next;
    end;
  end;

  LabelsLayer.AddLabelMarkersToLayer;//把標註加到圖層,必須呼叫

  CCuniGUIAMap1.SetFitView();//正好按地圖顯示

  LabelsLayer.Show;//顯示圖層

end;

程式碼我都註釋了,沒有什麼好解釋的,相信你一看也會明白。