csharp: WebBrowser read baidumap

setpoint.html:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>行政区域工具</title>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.4"></script>
</head>
<body>
<div style="width:520px;height:340px;border:1px solid gray" id="container"></div>
<p><input id="startBtn" type="button" onclick="startTool();" value="开启取点工具" /><input type="button" onclick="map.clearOverlays();document.getElementById('info').innerHTML = '';points=[];" value="清除" /></p>
<div id="info"></div>
<div id="lng"></div>
<div id="lat"></div>
</body>
</html>
<script type="text/javascript">
var map = new BMap.Map("container");                        // 创建Map实例
map.centerAndZoom("北京", 11);     // 初始化地图,设置中心点坐标和地图级别
map.addControl(new BMap.NavigationControl());    
map.addControl(new BMap.ScaleControl());  

var key = 1;    //开关
var newpoint;   //一个经纬度
var points = [];    //数组,放经纬度信息
var polyline = new BMap.Polyline(); //折线覆盖物

function startTool(){   //开关函数
if(key==1){
        document.getElementById("startBtn").style.background = "green";
        document.getElementById("startBtn").style.color = "white";
        document.getElementById("startBtn").value = "开启状态";
        key=0;
    }
    else{
        document.getElementById("startBtn").style.background = "red";
        document.getElementById("startBtn").value = "关闭状态";
        key=1;
    }
}
map.addEventListener("click",function(e){   //单击地图,形成折线覆盖物
    newpoint = new BMap.Point(e.point.lng,e.point.lat);
    if(key==0){
    //    if(points[points.length].lng==points[points.length-1].lng){alert(111);}
        points.push(newpoint);  //将新增的点放到数组中
        polyline.setPath(points);   //设置折线的点数组
        map.addOverlay(polyline);   //将折线添加到地图上
        document.getElementById("info").innerHTML += "new BMap.Point(" + e.point.lng + "," + e.point.lat + "),</br>";    //输出数组里的经纬度
       document.getElementById("lng").innerHTML= e.point.lng;
       document.getElementById("lat").innerHTML= e.point.lat;
    }
});
map.addEventListener("dblclick",function(e){   //双击地图,形成多边形覆盖物
if(key==0){
        map.disableDoubleClickZoom();   //关闭双击放大
var polygon = new BMap.Polygon(points);
        map.addOverlay(polygon);   //将折线添加到地图上
    }
});
</script>

  用Winform 读取百度地图的经纬度:

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

namespace baidudemo
{


    [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
    [System.Runtime.InteropServices.ComVisibleAttribute(true)] 
    public partial class Form2 : Form
    {

        /// <summary>
        /// 
        /// </summary>
        public Form2()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form2_Load(object sender, EventArgs e)
        {
            string str_url = Application.StartupPath + "\\baidu\\setpoint.html";
            Uri url = new Uri(str_url);
            webBrowser1.Url = url;
            webBrowser1.ObjectForScripting = this;

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            string tag_lng = webBrowser1.Document.GetElementById("lng").InnerText;
            string tag_lat = webBrowser1.Document.GetElementById("lat").InnerText;
            this.textBox1.Text = tag_lat;
            this.textBox2.Text = tag_lng;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void webBrowser1_LocationChanged(object sender, EventArgs e)
        {
;
        }
    }
}

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Web;
using System.Web.Script.Serialization; //引用System.Web.Extensions 
using System.Data;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Runtime.Serialization.Formatters;

  

 

    /// <summary>
    ///
    /// </summary>
    public class JsonHelper
    {
        //对应JSON的singleInfo成员
        public string singleInfo = string.Empty;

        protected string _error = string.Empty;
        protected bool _success = true;
        protected long _totalCount = 0;
        protected System.Collections.ArrayList arrData = new ArrayList();
        protected System.Collections.ArrayList arrDataItem = new ArrayList();

        public JsonHelper()
        {
            //
            //TODO: 在此处添加构造函数逻辑
            //
        }

        //对应于JSON的success成员
        public bool success
        {
            get
            {
                return _success;
            }
            set
            {
                //如设置为true则清空error
                if (success) _error = string.Empty;
                _success = value;
            }
        }

        //对应于JSON的error成员
        public string error
        {
            get
            {
                return _error;
            }
            set
            {
                //如设置error,则自动设置success为false
                if (value != "") _success = false;
                _error = value;
            }
        }

        public long totlalCount
        {
            get { return _totalCount; }
            set { _totalCount = value; }
        }


        //重置,每次新生成一个json对象时必须执行该方法
        public void Reset()
        {
            _success = true;
            _error = string.Empty;
            singleInfo = string.Empty;
            arrData.Clear();
            arrDataItem.Clear();
        }



        public void AddItem(string name, string value)
    {
        arrData.Add("/" + name + "/:" + "/" + value + "/");
    }



        public void ItemOk()
        {
            arrData.Add("<BR>");
            //返回总记录条数
            totlalCount++;
        }

        //序列化JSON对象,得到返回的JSON代码
        public override string ToString()
       {
        StringBuilder sb = new StringBuilder();
        sb.Append("{");
        sb.Append("/totalCount/:/" + _totalCount.ToString() + "/,");
        sb.Append("/success/:" + _success.ToString().ToLower() + "/,");
        sb.Append("/error/:/" + _error.Replace("/", "///") + "/,");
        sb.Append("/data/:/[");

        int index = 0;
        sb.Append("{");
        if (arrData.Count <= 0)
        {
            sb.Append("}");
        }
        else
        {
            foreach (string val in arrData)
            {
                index++;

                if (val != "<BR>")
                {
                    sb.Append(val + ",");
                }
                else
                {
                    sb = sb.Replace(",", "", sb.Length - 1, 1);
                    sb.Append("},");
                    if (index < arrData.Count)
                    {
                        sb.Append("{");
                    }
                }

            }
            sb = sb.Replace(",", "", sb.Length - 1, 1);
            sb.Append("]");
        }

        sb.Append("}");
        return sb.ToString();
    }

        public string ToSingleString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("{");

            sb.Append("success:" + _success.ToString().ToLower() + ",");

            sb.Append("data:");

            int index = 0;
            sb.Append("{");
            if (arrData.Count <= 0)
            {
                sb.Append("}");
            }
            else
            {
                foreach (string val in arrData)
                {
                    index++;

                    if (val != "<BR>")
                    {
                        sb.Append(val + ",");
                    }
                    else
                    {
                        sb = sb.Replace(",", "", sb.Length - 1, 1);
                        sb.Append("},");
                        if (index < arrData.Count)
                        {
                            sb.Append("{");
                        }
                    }

                }
                sb = sb.Replace(",", "", sb.Length - 1, 1);
                sb.Append("");
            }

            sb.Append("}");
            return sb.ToString();
        }



         public static string ObjectToJSON(object obj)    
         {        
             JavaScriptSerializer jss =new JavaScriptSerializer();        
             try        
             {            
                 return jss.Serialize(obj);        
             }        
             catch(Exception ex)        
             {            
                 throw new Exception("JSONHelper.ObjectToJSON(): "+ ex.Message);        
             }    
         }    
         public static List<Dictionary<string,object>>DataTableToList(DataTable dt)    
         {        
             List<Dictionary<string,object>> list=new List<Dictionary<string,object>>();        
             foreach(DataRow dr in dt.Rows)        
             {            
                 Dictionary<string,object> dic =new Dictionary<string,object>();            
                 foreach(DataColumn dc in dt.Columns)            
                 {                
                     dic.Add(dc.ColumnName, dr[dc.ColumnName]);            
                 }            
                 list.Add(dic);        
             }        return list;    
         }  
        /// <summary>
        /// 
        /// </summary>
        /// <param name="ds"></param>
        /// <returns></returns>
        public static Dictionary<string,List<Dictionary<string,object>>>DataSetToDic(DataSet ds)    
        {        
            Dictionary<string,List<Dictionary<string,object>>> result =new Dictionary<string,List<Dictionary<string,object>>>();        
            foreach(DataTable dt in ds.Tables)            
                result.Add(dt.TableName,DataTableToList(dt));        
            return result;    
        }    
        /// <summary>
        /// 
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static string DataTableToJSON(DataTable dt)    
        {        
            return ObjectToJSON(DataTableToList(dt));    
        }       
        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="jsonText"></param>
        /// <returns></returns>
        public static T JSONToObject<T>(string jsonText)    
        {        
            JavaScriptSerializer jss =new JavaScriptSerializer();        
            try        
            {            
                return jss.Deserialize<T>(jsonText);        
            }        
            catch(Exception ex)        
            {            
                throw new Exception("JSONHelper.JSONToObject(): "+ ex.Message);        
            }    
        }  
        /// <summary>
        /// 
        /// </summary>
        /// <param name="jsonText"></param>
        /// <returns></returns>
        public static Dictionary<string,List<Dictionary<string,object>>>TablesDataFromJSON(string jsonText)    
        {        
            return JSONToObject<Dictionary<string,List<Dictionary<string,object>>>>(jsonText);    
        }    
        /// <summary>
        /// 
        /// </summary>
        /// <param name="jsonText"></param>
        /// <returns></returns>
        public static Dictionary<string,object>DataRowFromJSON(string jsonText)    
        {        
            return JSONToObject<Dictionary<string,object>>(jsonText);    
        }

        

     public static string ToJsJson(object item)//参数要装换成JSON的对象  
    {  
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());  
        using(MemoryStream ms=new MemoryStream())  
        {  
            serializer.WriteObject(ms, item);  
            StringBuilder sb = new StringBuilder();  
            sb.Append(Encoding.UTF8.GetString(ms.ToArray()));  
            return sb.ToString();  
        }  
    }  
  
    //反序列化  
    //T指定要序列化的对象,jsonString是JSON字符串变量 
    public static T FromJsonTo<T>(string jsonString)  
    {  
        DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));  
        using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))  
        {  
            T jsonObject = (T)ser.ReadObject(ms);  
            return jsonObject;  
        }  
    }  
    }

  

/// <summary>
    /// 提供 Http 相关方法。
    /// </summary>
    public class HttpUtils
    {

        /// <summary>
        /// 执行HTTP GET请求。
        /// </summary>
        /// <param name="url">请求地址</param>
        /// <param name="parameters">请求参数</param>
        /// <returns>HTTP响应</returns>
        public static string DoGet(string url, IDictionary<string, string> parameters)
        {
            if (parameters != null && parameters.Count > 0)
            {
                if (url.Contains("?"))
                {
                    url = url + "&" + BuildPostData(parameters);
                }
                else
                {
                    url = url + "?" + BuildPostData(parameters);
                }
            }

            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.ServicePoint.Expect100Continue = false;
            req.Method = "GET";
            req.KeepAlive = true;
            req.UserAgent = "Test";
            req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";

            HttpWebResponse rsp = null;
            try
            {
                rsp = (HttpWebResponse)req.GetResponse();
            }
            catch (WebException webEx)
            {
                if (webEx.Status == WebExceptionStatus.Timeout)
                {
                    rsp = null;
                }
            }

            if (rsp != null)
            {
                if (rsp.CharacterSet != null)
                {
                    Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);
                    return GetResponseAsString(rsp, encoding);
                }
                else
                {
                    return string.Empty;
                }
            }
            else
            {
                return string.Empty;
            }
        }

        /// <summary>
        /// 把响应流转换为文本。
        /// </summary>
        /// <param name="rsp">响应流对象</param>
        /// <param name="encoding">编码方式</param>
        /// <returns>响应文本</returns>
        private static string GetResponseAsString(HttpWebResponse rsp, Encoding encoding)
        {
            StringBuilder result = new StringBuilder();
            Stream stream = null;
            StreamReader reader = null;

            try
            {
                // 以字符流的方式读取HTTP响应
                stream = rsp.GetResponseStream();
                reader = new StreamReader(stream, encoding);

                // 每次读取不大于256个字符,并写入字符串
                char[] buffer = new char[256];
                int readBytes = 0;
                while ((readBytes = reader.Read(buffer, 0, buffer.Length)) > 0)
                {
                    result.Append(buffer, 0, readBytes);
                }
            }
            catch (WebException webEx)
            {
                if (webEx.Status == WebExceptionStatus.Timeout)
                {
                    result = new StringBuilder();
                }
            }
            finally
            {
                // 释放资源
                if (reader != null) reader.Close();
                if (stream != null) stream.Close();
                if (rsp != null) rsp.Close();
            }

            return result.ToString();
        }

        /// <summary>
        /// 组装普通文本请求参数。
        /// </summary>
        /// <param name="parameters">Key-Value形式请求参数字典。</param>
        /// <returns>URL编码后的请求数据。</returns>
        private static string BuildPostData(IDictionary<string, string> parameters)
        {
            StringBuilder postData = new StringBuilder();
            bool hasParam = false;

            IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator();
            while (dem.MoveNext())
            {
                string name = dem.Current.Key;
                string value = dem.Current.Value;
                // 忽略参数名或参数值为空的参数
                if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value))
                {
                    if (hasParam)
                    {
                        postData.Append("&");
                    }

                    postData.Append(name);
                    postData.Append("=");
                    postData.Append(Uri.EscapeDataString(value));
                    hasParam = true;
                }
            }

            return postData.ToString();
        }
        /*
         GoBack():后退
        GoForward():前进
        Refresh():刷新
        Stop():停止
        GoHome():浏览主页
        WebBrowser控件的常用属性:
        Document:获取当前正在浏览的文档
        DocumentTitle:获取当前正在浏览的网页标题
        StatusText:获取当前状态栏的文本
        Url:获取当前正在浏览的网址的Uri
        ReadyState:获取浏览的状态
        WebBrowser控件的常用事件:
        DocumentTitleChanged,
        CanGoBackChanged,
        CanGoForwardChanged,
        DocumentTitleChanged,
        ProgressChanged,
        ProgressChanged
         
         */
        /// <summary>
        /// 根据Name获取元素
        /// </summary>
        /// <param name="wb"></param>
        /// <param name="Name"></param>
        /// <returns></returns>
        public HtmlElement GetElement_Name(WebBrowser wb, string Name)
        {
            HtmlElement e = wb.Document.All[Name];
            return e;
        }

        /// <summary>
        /// 根据Id获取元素
        /// </summary>
        /// <param name="wb"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public HtmlElement GetElement_Id(WebBrowser wb, string id)
        {
            HtmlElement e = wb.Document.GetElementById(id);
            return e;
        }

        /// <summary>
        /// 根据Index获取元素
        /// </summary>
        /// <param name="wb"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public HtmlElement GetElement_Index(WebBrowser wb, int index)
        {
            HtmlElement e = wb.Document.All[index];
            return e;
        }

        /// <summary>
        /// 获取form表单名name,返回表单
        /// </summary>
        /// <param name="wb"></param>
        /// <param name="form_name"></param>
        /// <returns></returns>
        public HtmlElement GetElement_Form(WebBrowser wb, string form_name)
        {
            HtmlElement e = wb.Document.Forms[form_name];
            return e;
        }


        /// <summary>
        /// 设置元素value属性的值
        /// </summary>
        /// <param name="e"></param>
        /// <param name="value"></param>
        public void Write_value(HtmlElement e, string value)
        {
            e.SetAttribute("value", value);
        }

        /// <summary>
        /// 执行元素的方法,如:click,submit(需Form表单名)等
        /// </summary>
        /// <param name="e"></param>
        /// <param name="s"></param>
        public void Btn_click(HtmlElement e, string s)
        {

            e.InvokeMember(s);
        }
    }

  工作流程图:

https://jsplumbtoolkit.com/demos/toolkit/flowchart-builder/index.html

posted @ 2016-01-04 17:55  ®Geovin Du Dream Park™  阅读(799)  评论(0编辑  收藏  举报