对于Web应用来说,集成地图功能,是客户非常需要的,将数据地图化显示,对用户了解其业务意义重大。基于此,国内运营地图的公司,也都开放了其SDK,让开发者集成到自己的项目中,满足用户的需求。

对于Delphi开发者来说,做Web应用最好的方案是使用uniGUI,但是uniGUI只增加了支持Google地图组件,并不支持国内的地图,鉴于此,ChinaCock为其开发了地图组件,将高德地图SDK封装成组件,直接支持Delphi uniGUI开发者!

这对于Delphi uniGUI开发者来说,绝对是一件让人兴奋的事情,你也可以在自己的uniGUI项目中,实现专业的地图功能了!为什么呢?

一、是地图在uniGUI中的运行效率,那是相当的快。我以前通过自己做的网页使用百度地图,也就是自己通过url去访问百度地图,实现经纬度的采样功能,当时没感觉慢,但是用上CCuniGUIAMap后,才知道差别太大了,简直一个天上一个地下。

二、是对地图的控制,你可以深度去使用地图的功能,也就是说,地图SDK提供的功能,你都可以轻松使用了,在下面实例中我会进一步说明。

三、与uniGUI现在控件一样,完美结合,可视化设计你的应用,因为CCuniGUIAMap就是一个可视控件。

四、百分百的封装成Delphi控件,所有功能,都是Delphi代码来实现,这简化或者说规避了html,css,js等的使用,提升开发效率的同时,还让你完美发挥Delphi的开发经验。

五、深度定制,上一点提到规避了html,css,js等的使用,但如果你在这方面有经验,就想用html,css,js等功力深化地图应用的细节,你也可以使用其来深度使用CCuniGUIAMap,因为作者为我们提供了CustomClientEvents属性等,让你发挥这方面的长项。

接下来,我们以最简单的例子,介绍如何在uniGUI Web项目中使用地图控件TCCuniGUIAMap:

1.建一个uniForm或者uniFrame

2.拖放地图控件TCCuniGUIAMap到Form上

高德地图app架构 高德地图产品结构图_高德地图app架构

TCCuniGUIAMap是一个可视控件,拖放之后是这样的:

高德地图app架构 高德地图产品结构图_高德地图app架构_02

然后,你可以象操作其他uniGUI可视控件一样,非常方便的设置他的布局方式、边距等。

3.初始化TCCuniGUIAMap

我们需要在Form.OnCreate事件中初始化一下地图:

procedure TWhhChartFrame1.UniFrameCreate(Sender: TObject);
begin

  with self.CCuniGUIAMap1.Options do
  begin
    // 地图是否可通过双击鼠标放大地图,默认为true。此属性可被setStatus/getStatus 方法控制
    DoubleClickZoom := False;
    Zoom := 7; // 默认缩放级别

    with Center do // 默认地图中心点
    begin
      Lng := 126.536079;
      Lat := 45.799689;
    end;

    ViewMode := TCCuniGUIAMap.TViewMode.ViewMode_3D;

    // 设置倾斜角度与旋转角度,不设置看不出2D与3D差别
    // rotateEnable := true;
    // pitch := 50;
    // rotation := -15;
    with Zooms do
    begin
      Min := 2;
      Max := 20;
    end;
  end;

end;

这是我从实际项目中复制过来的,你也可以复制过去直接使用。从中可以看到,完全是你熟悉的Delphi代码,是不是感觉很亲切!

4.加载地图元素

有些内容,在上面一步是无法处理的,需要在地图加载完成后处理,对应是TCCuniGUIAMap控件的OnMapComplete事件。下面代码,在地图上显示工具条及导航。

procedure TWhhChartFrame1.CCuniGUIAMap1MapComplete(Sender: TObject);
begin
  // 组合了旋转、倾斜、复位在内的地图控件。
  with self.CCuniGUIAMap1.ControlBar do
  begin
    // Options.Position := '{right:"10px",top:"10px"}';
    AddToMap;
  end;
  // 地图操作工具条插件。可支持方向导航、位置定位、视野级别缩放、视野级别选择等操作。
  with self.CCuniGUIAMap1.ToolBar do
  begin
    // Options.Position := '{right:"40px",top:"110px"}';
    AddToMap;
  end;

//这里你可以继续填加内容

end;

在Form显示一个地图的工作,基本完成了。

5.设置高德地图的ApiKey

接下来,我们还需要使用另一个控件TCCuniGUIAMapKeys,来处理高德地图的ApiKey,让我们去先高德地图的官方申请一个Key回来,官方地址:https://lbs.amap.com/。

有了申请的Key,我们拖放一个TCCuniGUIAMapKeys到uniMainModule上,然后设置他的属性:

procedure TUniMainModule.UniGUIMainModuleCreate(Sender: TObject);
begin
  // 设置高德地图的ApiKey
  self.CCuniGUIAMapKeys1.APIKey := '申请回来的AK';
  self.CCuniGUIAMapKeys1.SecurityJsCode := '申请回的SK';
  self.CCuniGUIAMapKeys1.ApiVersion := '1.4.18';
  self.CCuniGUIAMapKeys1.Active := true;

end;

现在运行项目,如果上面处理正确,可以在窗口中显示地图了:

高德地图app架构 高德地图产品结构图_控件_03

一切都是这么熟悉的Delphi味道!