教程-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.

原文地址:https://www.cnblogs.com/westsoft/p/8353111.html

时间: 2024-10-15 16:02:10

教程-Delphi调用百度地图API(XE8+WIN7)的相关文章

delphi 调用百度地图api

一.调用javascript的方法 两种: 第一种:采用自编函数的方法 function ExecuteJavaScript(WebBrowser:TWebBrowser; Code: string):Variant;var //发送脚本Document:IHTMLDocument2;Window:IHTMLWindow2;begin// execute javascript in webbrowserDocument:=WebBrowser.Document as IHTMLDocument2

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

百度地图的API说明 使用方法 第一步,申请密钥(ak),作为访问服务的依据: 第二步,按照请求参数说明拼写发送http请求的url,注意需使用第一步申请的ak: 第三步,接收返回的数据(json或者xml格式). 注:本接口支持回调. 服务地址 http://api.map.baidu.com/geoconv/v1/? 组成说明: 域名:http://api.map.baidu.com 服务名:geoconv 服务版本号:v1 服务参数说明 参数 含义 取值范围 是否必须 默认取值 coord

HTML5 调用百度地图API地理定位

<!DOCTYPE html> <html> <title>HTML5 HTML5 调用百度地图API地理定位实例</title> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="ht

HTML5页面直接调用百度地图API,获取当前位置,直接导航目的地(转)

HTML5页面直接调用百度地图API,获取当前位置,直接导航目的地 我是应用在微信中,自定义菜单,菜单直接链接到这个HTML5页面,获取当前位置后,页面中定好目的地,这样打开页面后直接进入导航页面 可以省下先发送位置信息后,点确定再出导航,省一步, <!DOCTYPE html> <html lang="zh-cmn-Hans"> <meta charset="UTF-8"> <meta name="viewpor

C#调用百度地图API入门&amp;解决BMap未定义问题

本文主要是最近帮助好友研究JavaScript的百度地图API,同时显示到C# Winform界面.同时遇到了BMap未定义的错误(BMap is not defined)及解决方法.以前写过基于Android的百度地图,其实原理都差不多,希望文章对你有所帮助吧! 一. C#显示百度地图 使用C# Winform显示百度地图主要包括两个步骤: 1.调用百度地图API,通过申请的密钥AK访问JavaScript版本地图: 2.再在C#中webBrowser浏览器控件中访问JS文件,显示地图到窗口.

HTML5调用百度地图API进行地理定位实例

自从HTML5的标准确定以后,越来越多的网站使用HTML5来进行开发.虽然对HTML5支持的浏览器不是很多,但是依然抵挡不了大伙对HTML5开发的热情.今天为大家带来的是使用HTML5调用百度地图API进行地理定位实例.请看下面代码: <!DOCTYPE html> <html> <title>HTML5调用百度地图API进行地理定位实例</title> <head> <meta http-equiv="Content-Type&

调用百度地图Api实现的查看地图功能的小插件

1. 功能 bMap.js 可根据地理位置调用出百度地图,采用弹出框形式 2.用法 var city = '青岛市'; var address = '香港中路'; bMap.init({ city : city, address : address }); 3.依赖 需自行引入jquery以及layer.js(弹出框插件) 4. 局限 各模块之间耦合度过于紧密,插件化程度太低,依赖性太强 5. demo下载 地址 :http://pan.baidu.com/s/1pJAxOnT 6. 源码预览

ionic 调用百度地图API,并定位当前位置示例

首先,可以参考JS版本的百度地图API示例. 由于在ionic程序中,我们一般使用的ES5 或 ES6 或者是Typescript. 这与JS 还有有一些区别的.所以,在我们的程序中,代码与官方示例代码格式上不完全相同. 下面,简单说明一下如何在 ionic 程序中 调用 百度地图API. 1. 在ionic程序中,定位到文件: \src\index.html.  添加如下代码 , 注意将"您的密钥" 替换成 您申请的密钥 <script type="text/java

C#调用百度地图 api

转  http://blog.csdn.net/kkkkkxiaofei/article/details/8663377 这一篇,记录一下我调用的地图API实现的功能.下面介绍的都是一些片段的节选,不能直接复制就运行.在实现之前肯定要加载地图,先放一个webbroser控件,然后如下: [csharp] view plaincopyprint? private void Form1_Load(object sender, EventArgs e) { string str_url = Appli