地图项目的随笔(一)

1.在地图控件中,用c#调用.HTML文件中js的方法

   a.想用Describ调用IndexMap里的js里面Describ_Point方法,但是Describ是在主页面中btn 出来的,

传值也很重要。

    

b.现在Main.cs里声明Describ.cs文件和一些需要的变量

c.在Describ.cs中编写如下

Main.cs代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Security.Permissions;
using System.Collections;

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

    public partial class Main_F : Form
    {
        private string startX = string.Empty;
        private string startY = string.Empty;
        private string azimuth = string.Empty;
        private string count = string.Empty;
        private string distance = string.Empty;
        private Describ_F desceib_F;

        public Main_F()
        {
            InitializeComponent();
        }

        public 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;
            
        }

        private void add_control_Click(object sender, EventArgs e)
        {
            invokeControl("add_control"); 
        }

        private void delete_control_Click(object sender, EventArgs e)
        {
            invokeControl("delete_control");
        }

        private void open_GetDistance_Click(object sender, EventArgs e)
        {
            invokeControl("open_GetDistance");
        }

        private void Descript_Click(object sender, EventArgs e)
        {
            if (desceib_F == null)
            {
                desceib_F = new Describ_F();
            }
            desceib_F.ShowDialog();
            startX = desceib_F.startX;
            startY = desceib_F.startY;
            azimuth = desceib_F.azimuth;
            count = desceib_F.count;
            distance = desceib_F.distance;
            this.invokeControl("Describ_Point", new string[] { startX, startY, azimuth, count, distance });
        }
        public void invokeControl(String controlType, object[] args = null)
        {
            if (args != null && args.Length > 0)
            {
                webBrowser1.Document.InvokeScript(controlType, args);
            }
            else
            {
                webBrowser1.Document.InvokeScript(controlType);
            }

        }
        
   
      
    }
}

Describ.cs代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace winMap
{
    public partial class Describ_F : Form
    {
        
        private static int checkBoxCount = 1;

        private static int InitLocation = 13;

        private static int LocationAdd = 22;

        private int Location = 13;

        public string startX = string.Empty;
        public string startY = string.Empty;
        public string azimuth = string.Empty;
        public string count = string.Empty;
        public string distance = string.Empty;
        public Describ_F()
        {
            InitializeComponent();
        }

        private void Describ_F_Load(object sender, EventArgs e)
        {
      
      
        }
        private void View_Btn_Click(object sender, EventArgs e)
        {
            startX = this.StartPointlng_Text.Text;
            startY = this.StartPointlat_Text.Text;
            azimuth = this.Azimuth_Text.Text;
            count = this.Count_Text.Text;
            distance = this.Count_Text.Text;
            this.Hide();
        }

       

        private void Y_Btn_Click(object sender, EventArgs e)
        {
           // Describ_dataGridView.Rows.Add(this.Line_TextB.Text, this.StartPointlng_Text.Text, this.StartPointlat_Text.Text, this.Azimuth_Text.Text, this.Distance_Text.Text, this.Count_Text.Text);
            
            string checkText = this.Line_TextB.Text;
            if (HasCheckBox(checkText))
            {
                MessageBox.Show("此线号以存在。");
                return;
            }
            CheckBox newCheckBox = new CheckBox();
            newCheckBox.Text = checkText;
            DrawingCheckBox(newCheckBox);
            this.splitContainer1.Panel1.Controls.Add(newCheckBox);
            MessageBox.Show(newCheckBox.Location.ToString());

        }


        private bool HasCheckBox(string newText)
        {
            bool isExisted = false;

            foreach(Control control in this.splitContainer1.Panel1.Controls)//如果前面有值
            {
                if (control.Text.Equals(newText))
                {
                    isExisted = true;
                    break;
                }
            }


            return isExisted;
        }


        private void DrawingCheckBox(CheckBox checkbox)
        {
            
            if (checkBoxCount > 1)
            {
                Location = Location + LocationAdd;  
            }
            else 
            {
                Location = InitLocation;
                checkBoxCount++;
            }
            checkbox.Location = new System.Drawing.Point(14, Location);
            checkbox.AutoSize = true;
            checkbox.Size = new System.Drawing.Size(78, 16);
            checkbox.UseVisualStyleBackColor = true;
        }

        private void Describ_dataGridView_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)//设置DataGridView行号
        {
            Rectangle rectangle = new Rectangle(e.RowBounds.Location.X,
                 e.RowBounds.Location.Y,
                 Describ_dataGridView.RowHeadersWidth - 4,
                 e.RowBounds.Height);

            TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(),
                Describ_dataGridView.RowHeadersDefaultCellStyle.Font,
                rectangle,
                Describ_dataGridView.RowHeadersDefaultCellStyle.ForeColor,
                TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
        }

        private void Describ_dataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            


        }

        private void Line_TextB_TextChanged(object sender, EventArgs e)
        {

        }
        

        

       
        

        
    }
}

IndexMap.html代码

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">    
            body, html {width: 100%;height: 100%;margin:0;font-family:"微软雅黑";}
        #allmap{width:100%;height:100%;}
        p{margin-left:5px; font-size:14px;}
    </style>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=p9gxU4nY9XajuGDNGsktcGET"></script>
    <!--加载鼠标绘制工具-->
    <script type="text/javascript" src="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js"></script>
    <link rel="stylesheet" href="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css" />
    <!--加载检索信息窗口-->
    <script type="text/javascript" src="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.js"></script>
    <link rel="stylesheet" href="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.css" />
   <script type="text/javascript" src="http://api.map.baidu.com/library/DistanceTool/1.2/src/DistanceTool_min.js"></script>
    <title></title>
</head>
<body>
    <div id="allmap"  style="overflow:hidden;zoom:1;position:relative;">    
        <div id="map" style="height:100%;-webkit-transition: all 0.5s ease-in-out;transition: all 0.5s ease-in-out;"></div>
    </div>
    <div id="result">
        <input type="button" value="获取绘制的覆盖物个数" onclick="alert(overlays.length)"/>
        <input type="button" value="清除所有覆盖物" onclick="clearAll()"/>
    </div>

    <script type="text/javascript">
    // 百度地图API功能
    var map = new BMap.Map('map');// 创建Map实例
    var poi = new BMap.Point(116.404 , 39.915);// 初始化地图设置中心点坐标
    map.centerAndZoom(poi, 15);//设置地图级别
    map.enableScrollWheelZoom();  //开启鼠标滚轮缩放
    
    //鼠标绘制点线面
     
    var overlays = [];
    var overlaycomplete = function(e){
        overlays.push(e.overlay);
    };
    var styleOptions = {
        strokeColor:"red",    //边线颜色。
        fillColor:"red",      //填充颜色。当参数为空时,圆形将没有填充效果。
        strokeWeight: 3,       //边线的宽度,以像素为单位。
        strokeOpacity: 0.8,       //边线透明度,取值范围0 - 1。
        fillOpacity: 0.6,      //填充的透明度,取值范围0 - 1。
        strokeStyle: 'solid' //边线的样式,solid或dashed。
    }
    //实例化鼠标绘制工具
    var drawingManager = new BMapLib.DrawingManager(map, {
        isOpen: false, //是否开启绘制模式
        enableDrawingTool: true, //是否显示工具栏
        drawingToolOptions: {
            anchor: BMAP_ANCHOR_TOP_RIGHT, //位置
            offset: new BMap.Size(5, 5) //偏离值
        },
        circleOptions: styleOptions, //圆的样式
        polylineOptions: styleOptions, //线的样式
        polygonOptions: styleOptions, //多边形的样式
        rectangleOptions: styleOptions //矩形的样式
    }); 
     
     //添加鼠标绘制工具监听事件,用于获取绘制结果
    drawingManager.addEventListener('overlaycomplete', overlaycomplete);
    function clearAll() {
        for(var i = 0; i < overlays.length; i++){
            map.removeOverlay(overlays[i]);
        }
        overlays.length = 0   
    }

    //比例尺工具

    var top_left_control = new BMap.ScaleControl({anchor: BMAP_ANCHOR_TOP_LEFT});// 左上角,添加比例尺
    var top_left_navigation = new BMap.NavigationControl();  //左上角,添加默认缩放平移控件
    var top_right_navigation = new BMap.NavigationControl({anchor: BMAP_ANCHOR_TOP_RIGHT, type: BMAP_NAVIGATION_CONTROL_SMALL}); //右上角,仅包含平移和缩放按钮
    /*缩放控件type有四种类型:
    BMAP_NAVIGATION_CONTROL_SMALL:仅包含平移和缩放按钮;BMAP_NAVIGATION_CONTROL_PAN:仅包含平移按钮;BMAP_NAVIGATION_CONTROL_ZOOM:仅包含缩放按钮*/
    
    //添加控件和比例尺
    function add_control(){
        map.addControl(top_left_control);        
        map.addControl(top_left_navigation);     
        map.addControl(top_right_navigation);    
    }

    //移除控件和比例尺
    function delete_control(){
        map.removeControl(top_left_control);     
        map.removeControl(top_left_navigation);  
        map.removeControl(top_right_navigation); 
    }
          
     //鼠标测距
     function open_GetDistance() {  
         var myDis=new BMapLib.DistanceTool(map);//map为上面已经初始化好的地图实例  
         myDis.open();
    }
            
    function Describ_Point(startX, startY, azimuth, count,distance){
         startX=startX*1.000000;
         startY=startY*1.000000;
         var startPoint = new BMap.Point(startX , startY);  // 创建点坐标
         var startMarker = new BMap.Marker(startPoint);  // 创建标注
         map.addOverlay(startMarker);               // 将标注添加到地图中
         distance=distance*0.000008993216920097318;  //距离比例
         var endX;
         var endY;
         var i=0;
         var endPoint;
         var distanceT=0

         for(i=1;i<=count;i++){
             distanceT=distanceT+distance;
             endX=startX+Math.sin(azimuth)*distanceT;
             endY=startY+Math.cos(azimuth)*distanceT;
             var endPoint=new BMap.Point(endX , endY); 
             var endMarker = new BMap.Marker(endPoint);  // 创建标注
             map.addOverlay(endMarker);  
             var polyline = new BMap.Polyline([ startPoint,endPoint], {strokeColor:"red", strokeWeight:15, strokeOpacity:0.5});   //创建折线
             map.addOverlay(polyline);   //增加折线
            // var dis=(map.getDistance(startPoint,endPoint)).toFixed(6); //获取两点距离,保留小数点后两位  
            // alert(dis);
             
             startPoint=endPoint;
      }

}
</script>
</body>
</html>
原文地址:https://www.cnblogs.com/janeaiai/p/4819819.html