教程-Delphi调用百度地图API(XE8+WIN7)

Posted 我的学习笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了教程-Delphi调用百度地图API(XE8+WIN7)相关的知识,希望对你有一定的参考价值。

unit U_map;

interface
//---------------------------------------------------//
//----------COPY BY 无言 QQ:4252181 -----------------//
//---------------------------------------------------//
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, StdCtrls, MShtml, StrUtils, ActiveX,
  ExtCtrls;
//---------------------------------------------------//
//----------欢迎大家和我联系,软件开发 --------------//
//---------------------------------------------------//
type
  TF_map = class(TForm)
    grp1: TGroupBox;
    WebBrowser: TWebBrowser;
    grp2: TGroupBox;
    grp3: TGroupBox;
    grp4: TGroupBox;
    tmr1: TTimer;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    Edit1: TEdit;
    Edit2: TEdit;
    chk1: TCheckBox;
    Edit3: TEdit;
    Edit4: TEdit;
    edt1: TEdit;
    edt2: TEdit;
    edt3: TEdit;
    edt4: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure loadweb();
    procedure btn4Click(Sender: TObject);
    procedure AppMsg(var Msg: TagMsg; var Handled: Boolean);
    procedure GetWebContent();
    procedure tmr1Timer(Sender: TObject);
  private
    { Private declarations }
    lng, lat: string;
  public
    { Public declarations }
  end;

var
  F_map: TF_map;
  const
  Doc1: string = <html>
  + <head>
  + <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
  + <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  + <title>BAIDU MAP</title>
  + <style type="text/css">
  + html{height:100%} + body{height:100%;margin:0px;padding:0px}
  + #container{height:100%}
  + </style>
  + <script type="text/javascript"src="http://api.map.baidu.com/api?v=1.3"></script>
  + </head>
  + <body>
  + <div id="container"></div>
  //style="visibility:hidden; display:none">
  +<div id="centerweidu" style="visibility:hidden; display:none"></div>
  +<div id="centerjingdu" style="visibility:hidden; display:none"></div>
  +<div id="weidutemp" style="visibility:hidden;display:none"></div>
  +<div id="jingdutemp" style="visibility:hidden;display:none"></div>
  +<div id="weidu" style="visibility:hidden;display:none"></div>
  +<div id="jingdu" style="visibility:hidden;display:none"></div>
  +<div id="Distance" style="visibility:hidden;display:none"></div>
  + <script language="JavaScript" type="text/javascript">
  + var map = new BMap.Map("container");  // 创建地图实例
  + map.addControl(new BMap.NavigationControl());
  + map.addControl(new BMap.ScaleControl());
  + map.addControl(new BMap.OverviewMapControl());
  + map.addControl(new BMap.MapTypeControl(BMAP_ANCHOR_BOTTOM_RIGHT));   // 将标注添加到地图中
  + map.enableScrollWheelZoom();                  // 启用滚轮放大缩小。
  + map.enableKeyboard();                         // 启用键盘操作。
  + var centerpoint = new BMap.Point(126.666431,45.764502); // 创建点坐标  126.666431, 45.764502
  + var marker = new BMap.Marker(centerpoint);        // 创建标注
  + map.addOverlay(marker);
  + var label = new BMap.Label("哈尔滨海铭科技有限公司",{offset:new BMap.Size(20,-10)});
  + marker.setLabel(label);
  + map.centerAndZoom(centerpoint, 15); // 初始化地图,设置中心点坐标和地图级别‘

  + map.addEventListener("mousemove", function(e){
  + document.getElementById("weidutemp").innerHTML = e.point.lng;
  + document.getElementById("jingdutemp").innerHTML =  e.point.lat;});
  + map.addEventListener("click", function(f){
  + document.getElementById("weidu").innerHTML = f.point.lng;
  + document.getElementById("jingdu").innerHTML =  f.point.lat;});

  +function SetCarCenterPoint(newlng,newlat){
  +centerpoint=new BMap.Point(newlng,newlat);
  + var marker = new BMap.Marker(centerpoint);
  + map.addOverlay(marker);
  + var label = new BMap.Label("当前汽车坐标",{offset:new BMap.Size(20,-10)});
  + marker.setLabel(label);
  + map.panTo(centerpoint);
  +}

  +function SetAutoCenterPoint(newlng,newlat){
  +centerpoint=new BMap.Point(newlng,newlat);
  + var marker = new BMap.Marker(centerpoint);
  + map.addOverlay(marker);
  + var label = new BMap.Label("4S店坐标",{offset:new BMap.Size(20,-10)});
  + marker.setLabel(label);
  + map.panTo(centerpoint);
  +}

  +function PrintLine(newlng,newlat,oldlng,oldlat,biaoji){
  +var point = new BMap.Point(newlng,newlat); // 创建点坐标
  + map.panTo(point);
//  + ‘if (biaoji=‘‘0‘‘)‘
//  +‘{‘
//  + ‘var marker = new BMap.Marker(point);‘
//  + ‘map.addOverlay(marker);‘
//  +‘}‘
  + var polyline = new BMap.Polyline([
  + new BMap.Point(oldlng,oldlat),
  + new BMap.Point(point.lng, point.lat)
  + ], {strokeColor:"blue", strokeWeight:4, strokeOpacity:0.5});
  + map.addOverlay(polyline);
  +}

  +function GetCenter(){
  + var center = map.getCenter();
  + document.getElementById("centerweidu").innerHTML = center.lng;
  + document.getElementById("centerjingdu").innerHTML = center.lat;
  +}
  +function Distance(newlng,newlat){
  +var pointA=centerpoint;
  +var pointB=new BMap.Point(newlng,newlat);
  +document.getElementById("Distance").innerHTML = map.getDistance(pointA,pointB);
  +alert(‘‘距离是:‘‘+map.getDistance(pointA,pointB)+‘‘ 米。‘‘);
 // +‘return map.getDistance(pointA,pointB);‘
  +}
  + </script>
  + </body>
  + </html>;
implementation

{$R *.dfm}

procedure TF_map.AppMsg(var Msg: TagMsg; var Handled: Boolean);
var
  mPoint: TPoint;
begin
  if IsChild(WebBrowser.Handle, Msg.Hwnd) and (Msg.Message = WM_MOUSEMOVE) then
  begin
    GetCursorPos(mPoint);
    GetWebContent;
    Handled := True;
  end;
end;

function JavaScript(j: string): Boolean;
begin
  try
    // (F_map.WebBrowser.Document as IHTMLDocument2).parentWindow.execScript(j, ‘JavaScript‘);
    F_map.WebBrowser.OleObject.Document.parentWindow.execScript(j,
      JavaScript);
    Result := True;
  except
    Result := false;
  end;
end;

procedure TF_map.btn1Click(Sender: TObject);
var
  str: string;
begin
  self.WebBrowser.OleObject.Document.parentWindow.execScript(GetCenter(),
    JavaScript);
end;

procedure TF_map.btn2Click(Sender: TObject);
var
  str: string;
begin
  if (Edit1.Text <> ‘‘) and (Edit2.Text <> ‘‘) then
  begin
    self.WebBrowser.OleObject.Document.parentWindow.execScript
      (Distance( + Edit1.Text + , + Edit2.Text + ), JavaScript);
  end;
end;

procedure TF_map.btn3Click(Sender: TObject);
var
  biaoji: string;
begin
  if lng = ‘‘ then
  begin
    lng := 126.666431; // 126.666431,45.764502
  end;
  if lat = ‘‘ then
  begin
    lat := 45.764502;
  end;
  if chk1.Checked then
  begin
    biaoji := 1;
  end
  else
  begin
    biaoji := 0;
  end;
  if (Edit1.Text <> ‘‘) and (Edit2.Text <> ‘‘) then
  begin
    self.WebBrowser.OleObject.Document.parentWindow.execScript
      (PrintLine( + Edit1.Text + , + Edit2.Text + , + lng + , + lat +
        , + biaoji + ), JavaScript);
    lng := self.Edit1.Text;
    lat := self.Edit2.Text;
  end;
end;

procedure TF_map.btn4Click(Sender: TObject);
begin
  loadweb;
  lng := ‘‘;
  lat := ‘‘;
end;

procedure TF_map.Button1Click(Sender: TObject);
var
  str: string;
begin
  if (Edit3.Text <> ‘‘) and (Edit4.Text <> ‘‘) then
  begin
    self.WebBrowser.OleObject.Document.parentWindow.execScript
      (SetAutoCenterPoint( + Edit3.Text + , + Edit4.Text +
        ), JavaScript);
  end;
end;

procedure TF_map.loadweb();
var
  sl: TStringList;
  ms: TMemoryStream;
begin
  self.WebBrowser.Silent := True;
  WebBrowser.Navigate(about:blank); (WebBrowser.Document as IHTMLDocument2)
  .URL := http://127.0.0.1/;
  while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
    Application.ProcessMessages;
  if Assigned(WebBrowser.Document) then
  begin
    sl := TStringList.Create;
    try
      ms := TMemoryStream.Create;
      try
        sl.Text := Doc1;
        sl.SaveToStream(ms);
        ms.Seek(0, 0); (WebBrowser.Document as IPersistStreamInit)
        .Load(TStreamAdapter.Create(ms));
      finally
        ms.Free;
      end;
    finally
      sl.Free;
    end;
  end;
end;

procedure TF_map.tmr1Timer(Sender: TObject);
begin
  GetWebContent;
end;

procedure TF_map.FormCreate(Sender: TObject);
begin
  loadweb;
  //Application.OnMessage:=AppMsg;
end;

procedure TF_map.FormShow(Sender: TObject);
begin
  lng := ‘‘;
  lat := ‘‘;
  tmr1.Enabled := True;
end;

procedure TF_map.GetWebContent();
var
  html: IHTMLDocument2; // 定义网页元素
  submitbutton: OleVariant; // 定义按钮
  centerweidu, centerjingdu, weidu, jingdu, weidutemp,
    jingdutemp: IHTMLElement; // 定义网页输入元素
begin
  try
    html := self.WebBrowser.Document as IHTMLDocument2;
    centerweidu := html.all.item(centerweidu, 0) as IHTMLElement;
    centerjingdu := html.all.item(centerjingdu, 0) as IHTMLElement;
    weidu := html.all.item(weidu, 0) as IHTMLElement;
    jingdu := html.all.item(jingdu, 0) as IHTMLElement;
    weidutemp := html.all.item(weidutemp, 0) as IHTMLElement;
    jingdutemp := html.all.item(jingdutemp, 0) as IHTMLElement;
    edt1.Text := centerweidu.innerText;
    edt2.Text := centerjingdu.innerText;
    edt3.Text := weidutemp.innerText;
    edt4.Text := jingdutemp.innerText;
    Edit1.Text := weidu.innerText;
    Edit2.Text := jingdu.innerText;
  except
  end;
end;

end.

 

以上是关于教程-Delphi调用百度地图API(XE8+WIN7)的主要内容,如果未能解决你的问题,请参考以下文章

delphi 调用百度地图api

delphi 调用百度地图WEBSERVICE转换GPS坐标 转

如何调用百度地图API

如何调用百度地图API

如何在网页中调用百度地图api

如何调用百度地图API