C# 调用百度地图web服务API

1.关于百度提供的接口中的方法的实用,这里有很多官方提供的DEMO(http://developer.baidu.com/map/jshome.htm).

2.为了能与JS交互,首先引入using System.Security.Permissions;

在命名空间里添加:

        [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
        [System.Runtime.InteropServices.ComVisibleAttribute(true)]   

3.初始化webBrowser组件

        private void Form1_Load(object sender, EventArgs e)
        {
             string str_url = Application.StartupPath + "\\IndexMap.html";
             Uri url = new Uri(str_url);
             webBrowser1.Url = url;
             webBrowser1.ObjectForScripting = this;
             timer1.Enabled = true;
        }

4.获取坐标

        private void timer1_Tick(object sender, EventArgs e)
        {
            try
           {
               string tag_lng = webBrowser1.Document.GetElementById("mouselng").InnerText;
               string tag_lat = webBrowser1.Document.GetElementById("mouselat").InnerText;
               double dou_lng, dou_lat;
               if (double.TryParse(tag_lng, out dou_lng) && double.TryParse(tag_lat, out dou_lat))
               {
                   this.toolStripStatusLabel1.Text ="当前坐标:"+ dou_lng.ToString("F5") + "," + dou_lat.ToString("F5");
               }
           }
           catch (Exception ee)
           {
               MessageBox.Show(ee.Message);
           }
        }

5.一些方法的调用

1. webBrowser1.Document.InvokeScript("drawRec");//画矩形

2.webBrowser1.Document.InvokeScript("drawCircle");//画圆形

3.webBrowser1.Document.InvokeScript("openGetDistance");//测距

.........

.........

6.百度提供的DEMO

关于更详细的,可以参考:http://blog.csdn.net/kkkkkxiaofei/article/details/8645856

 <!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Hello Map</title>
<script type="text/javascript"src="http://api.map.baidu.com/api?key=59db371659c04947a1ff044e80565718&v=1.4&services=true">
</script>
<!--加载鼠标测距工具-->
<script src="DistanceTool_min.js" type="text/javascript"></script>
<!--加载鼠标绘制工具-->
<script type="text/javascript" src="DrawingManager_min.js"></script>
<link rel="stylesheet" href="DrawingManager_min.css" />  

</head>
<body>
<div id="mouselng" style="visibility:hidden"></div>
<div id="mouselat" style="visibility:hidden"></div>
<div style="width:1000px;height:600px;border:1px solid gray" id="container">
</div>
</body>
</html>
<script type="text/javascript">
    var map = new BMap.Map("container");
    map.centerAndZoom(new BMap.Point(108.876433, 36.269395), 5);
    map.addControl(new BMap.ScaleControl()); //添加比例尺控件(左下角显示的比例尺控件)
    map.addControl(new BMap.OverviewMapControl());// 缩略图控件
    var ctrl_nav = new BMap.NavigationControl({ anchor: BMAP_ANCHOR_TOP_LEFT, type: BMAP_NAVIGATION_CONTROL_LARGE });
    map.addControl(ctrl_nav);//添加标准地图控件(左上角的放大缩小左右拖拽控件)

    map.enableDragging(); //启用地图拖拽事件,默认启用(可不写)
    map.enableScrollWheelZoom(); //启用地图滚轮放大缩小
    map.enableDoubleClickZoom(); //启用鼠标双击放大,默认启用(可不写)
    map.enableKeyboard(); //启用键盘上下左右键移动地图
    map.enableContinuousZoom();   // 开启连续缩放效果
    map.enableInertialDragging(); // 开启惯性拖拽效果  

  //实时显示地图坐标 strat
    map.addEventListener("mousemove",GetlngAndlat);
    function GetlngAndlat(e) {
    if(e.point.lng!=null)
     {
      document.getElementById("mouselng").innerHTML=e.point.lng;
      document.getElementById("mouselat").innerHTML=e.point.lat;
     }
}
   //实时显示地图坐标 end
   //测量距离 strat
    function openGetDistance() {  

     var myDis=new BMapLib.DistanceTool(map);//map为上面已经初始化好的地图实例
     myDis.open();
    }
    //测量距离 end

    //左右击鼠标给地图上放marker strat 放标注,并且将JS的数据传送给WINFORM
    function PUTANDSEND() {
       //右键标记
        map.addEventListener("rightclick", putAndsend);
        //左键标记
        //map.addEventListener("click", putAndsend);
  }
  var marker_num = 0;
    function putAndsend(e)
    {
      //放标注
      var p1=new BMap.Point(e.point.lng,e.point.lat);
        var myIcon = new BMap.Icon("png-0003.png", new BMap.Size(24, 24));
        var marker = new BMap.Marker(p1, { icon: myIcon });  // 创建标注
        map.addOverlay(marker);              // 将标注添加到地图中 

      marker_num++;//标注索引,这个是个全局变量
      var whichCar=window.external.setWhichCar();
      var label=new BMap.Label(whichCar+"号车-坐标"+marker_num+":"+
    "("+e.point.lng+","+e.point.lat+")",{offset:new BMap.Size(20,-10)});
      marker.setLabel(label);
      //给WINFORM传值
      window.external.PutIntotextBox(marker_num,whichCar,e.point.lng,e.point.lat);  

    }
    //左右击鼠标给地图上放marker end

     //在地图上画轨迹 strat
    function DrawOrit1()
    {
     var Array=[];
    var total_num= window.external.getRowsNumber();
    for(var i=0;i<=2*total_num-1;i++)
    {
     Array.push(window.external.Getpoints(i));
    }  

    var PointArr=[];
    for(var i=0;i<=Array.length-1;i+=2)
    {//偶数索引存经度,奇数存维度
      PointArr.push(new BMap.Point(Array[i],Array[i+1]));
    }
    var polyline = new BMap.Polyline(PointArr, {strokeColor:"blue", strokeWeight:6,   strokeOpacity:0.5});  //定义折线
      map.addOverlay(polyline);
    window.external.ClearRows_num();//重置窗体计数器
    }
    //在地图上画轨迹 end

    //在地图上画圆形或者方形 strat
    // 编写自定义函数,创建标注
    function addMarker(point) {
        var myIcon = new BMap.Icon("png-0003.png", new BMap.Size(24, 24));
        var marker = new BMap.Marker(point, { icon: myIcon });  // 创建标注
        map.addOverlay(marker);              // 将标注添加到地图中
    }

    var overlays = [];
    var complete=function(e)
   {
    overlays.push(e.overlay);
    if (e.drawingMode == BMAP_DRAWING_CIRCLE)
          {
            //随便赋值,刷新一遍数据库(此方法只为演示,实际中要另考虑算法)
          var test=  window.external.SearchAllCars(0);   

         var circle_radius=e.overlay.getRadius();//半径
          //圆心
         var circle_point=new BMap.Point(e.overlay.getCenter().lng,e.overlay.getCenter().lat);
         //从WINFORM里取出数据
         var dangerCars=[];
         var pointlen=window.external.GetdangerNum();  

         for(var k=0;k<=pointlen-1;k++)
          {
             dangerCars.push(window.external.SearchAllCars(k));
          }
         var BMappoints=[];//创建百度地图接口规定的数组
         for(var j=0;j<=dangerCars.length-1;j+=2)
          {
            BMappoints.push(new BMap.Point(dangerCars[j],dangerCars[j+1]));
          }  

          for(var i=0;i<=BMappoints.length-1;i++)
          {
            if(map.getDistance(circle_point,BMappoints[i])<=circle_radius)
            {
                //AddMarker(BMappoints[i]);//调用添加标注版本V3.0
                var myIcon = new BMap.Icon("png-0003.png", new BMap.Size(24, 24));
                var marker1 = new BMap.Marker(BMappoints[i], { icon: myIcon });  // 创建标注
                map.addOverlay(marker1);              // 将标注添加到地图中
            }
          }  

        }  

      };
//线条样式
    var styleOptions = {
        strokeColor:"blue",    //边线颜色。
        fillColor:"blue",      //填充颜色。当参数为空时,圆形将没有填充效果。
        strokeWeight: 3,       //边线的宽度,以像素为单位。
        strokeOpacity: 1,    //边线透明度,取值范围0 - 1。
        fillOpacity: 0.3,      //填充的透明度,取值范围0 - 1。
        strokeStyle: 'solid' //边线的样式,solid或dashed。
    }
    //实例化鼠标绘制工具
    var drawingManager = new BMapLib.DrawingManager(map, {
        isOpen: true, //是否开启绘制模式
        enableDrawingTool: true, //是否显示工具栏
        drawingToolOptions: {
            anchor: BMAP_ANCHOR_TOP_RIGHT, //位置
            offset: new BMap.Size(5, 5), //偏离值
            scale: 0.8, //工具栏缩放比例
            drawingTypes : [
            BMAP_DRAWING_CIRCLE,
            BMAP_DRAWING_RECTANGLE
         ]  

        },
        circleOptions: styleOptions, //圆的样式
        rectangleOptions: styleOptions //矩形的样式
    });

    //添加鼠标绘制工具监听事件,用于获取绘制结果
    drawingManager.addEventListener('overlaycomplete', complete);
    //回调获得覆盖物信息,未使用该版本
    var overlaycomplete = function (e) {
        overlays.push(e.overlay);
        var result = "";

        result += e.drawingMode + ":";

        if (e.drawingMode == BMAP_DRAWING_CIRCLE) {

            var circle_radius = e.overlay.getRadius();
            var circle_point = new BMap.Point(e.overlay.getCenter().lng, e.overlay.getCenter().lat);
            alert(map.getDistance(circle_point, tests[1]));
            for (var i = 0; i < 3; i++) {
                if (map.getDistance(circle_point, tests[i]) <= circle_radius) {
                    //AddMarker(tests[i]);
                    var myIcon = new BMap.Icon("png-0003.png", new BMap.Size(24, 24));
                    var marker1 = new BMap.Marker(tests[i], { icon: myIcon });  // 创建标注
                    map.addOverlay(marker1);              // 将标注添加到地图中
                }
            }
            alert(result);
        }
        if (e.drawingMode == BMAP_DRAWING_POLYLINE || e.drawingMode == BMAP_DRAWING_POLYGON || e.drawingMode == BMAP_DRAWING_RECTANGLE) {
            result += ' 所画的点个数:' + e.overlay.getPath()[1].lng;
            alert(result);
        }
    };  

 //drawingManager.enableCalculate();
    //----------------------公用方法,用元素id获取元素的值-------------------
    function $(id){
        return document.getElementById(id);
    }  

    //------------------画矩形,让WINFORM调用---------------
    function drawRec(){
drawingManager.setDrawingMode(BMAP_DRAWING_RECTANGLE);}
    //------------------画圆,让WINFORM调用----------------
     function drawCircle(){
drawingManager.setDrawingMode(BMAP_DRAWING_CIRCLE);}
    //------------------清除所有已画图形,让WINFORM调用--------------------
    function clearAll() {
        for(var i = 0; i < overlays.length; i++){
            map.removeOverlay(overlays[i]);
        }
        overlays.length = 0
    }
    //在地图上画圆形或者方形 end 

</script>



时间: 2024-10-06 14:53:48

C# 调用百度地图web服务API的相关文章

Node.js调用百度地图Web服务API的Geocoding接口进行点位反地理信息编码

(从我的新浪博客上搬来的,做了一些修改.) 最近迷上了node.js以及JavaScript.现在接到一个活,要解析一个出租车点位数据的地理信息.于是就想到使用Node.js调用百度地图API进行解析. 使用的库主要就是有fs.request. // 请求包 var fs = require('fs');var request = require('request'); // 设置百度API的参数var baiduApiKey = "cQV9U4QhamoOjg6rjdOTAQSiUMxxxxx

【完全开源】百度地图Web service API C#.NET版,带地图显示控件、导航控件、POI查找控件

目录 概述 功能 如何使用 参考帮助 概述 源代码主要包含三个项目,BMap.NET.BMap.NET.WindowsForm以及BMap.NET.WinformDemo. BMap.NET 对百度地图Web Service API 的一些封装,每个接口返回的都是JObject类型(参见Json.NET): BMap.NET.WindowsForm(开始少写了一个s ,后来一直没改) 提供一系列可以在Winform中使用的控件,包括地图显示控件.导航控件.POI查找控件等等: BMap.NET.

利用百度地图WEB服务APIGeoCoding API批量地址解析

Geocoding API包括地址解析和逆地址解析功能: 地理编码:即地址解析,由详细到街道的结构化地址得到百度经纬度信息,例如:“北京市海淀区中关村南大街27号”地址解析的结果是“lng:116.31985,lat:39.959836”.同时,地理编码也支持名胜古迹.标志性建筑名称直接解析返回百度经纬度,例如:“百度大厦”地址解析的结果是“lng:116.30815,lat:40.056885” ,通用的POI检索需求,建议使用Place API. 逆地理编码:即逆地址解析,由百度经纬度信息得

Delphi XE6 通过JavaScript API调用百度地图

参考昨天的内容,有朋友还是问如何调用百度地图,也是,谁让咱都在国内呢,没办法,你懂的. 首先去申请个Key,然后看一下百度JavaScript的第一个例子:http://developer.baidu.com/map/jsdemo.htm 下一步,就是把例子中的代码,移动TWebBrower中. unit Unit3; interface uses  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Var

苹果手机 微信调用百度地图Javascript API 频繁闪退问题

最近在网页中调用百度地图API js大众版,但是在IOS8系统中,缩放的时候频繁闪退,安卓手机没有这个问题! 在网上查询了下,有网友回答说不要频繁的去new marker,而是初始化话一定量的marker,然后setPosition.但是我的页面中匹配当前城市 注入marker也没有几个,所以排除这答案. 最后发现有网友说版本不稳定引起的,于是把百度地图API回退到了1.5,结果还真是可以了.

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&