csharp: WebBrowser read baidumap

来源:http://www.cnblogs.com/geovindu/archive/2016/01/04/5099819.html
-Advertisement-
Play Games

setpoint.html:行政區域工具 用Winform 讀取百度地圖的經緯度:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Dra....


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

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我們首先來看看官方的文檔怎麼說:如果用戶在微信客戶端中訪問第三方網頁,公眾號可以通過微信網頁授權機制,來獲取用戶基本信息,進而實現業務邏輯。關於網頁授權回調功能變數名稱的說明1、在微信公眾號請求用戶網頁授權之前,開發者需要先到公眾平臺官網中的開發者中心頁配置授權回調功能變數名稱。請註意,這裡填寫的是功能變數名稱(是一個字元...
  • 1.在使用ExtJS在Server端進行網頁開發時,常常會出現關鍵字對應錯誤的問題。例如app\store\xxx\XXX.js中的totalProperty:'XXX',XXX對應的是Action中resultMap.put("aaa",bbb)的aaa。這個是固定的頁面統計條數的方法。root:...
  • 代碼中常有類似的如下的輸入迴圈 char c; while((c=getchar())!=EOF).... 如果輸入 字元+換行時,迴圈的代碼會執行兩次,主要是換行鍵作為字元存到了緩存隊列中,第一次c為輸入的值,第二次c為換行符 ,可以通過fflush(stdin);清除 ...
  • fdisk 分區fdisk /dev/sdb-p查看當前分區-t 改分區號-w將分區表寫進磁碟-n創建分區 -p主分區 -e拓展分區partprobe 讓內核更新分區信息cat /proc/partitions 查看磁碟分區創建文件系統(格式化文件系統)mke2fs -t ext4 /...
  • 1、http協議(這一塊兒有時間的話會做記錄)2、常用的兩種RPC方式基於http協議:HttpClient和JDK自己的Http操作類基於TCP或UDP協議:mina2和netty(這一部分以後有時間做記錄)3、HttpClient工具類的編寫(只列出了兩個最常用的方法get和post)使用場合:...
  • 前言: 新的一年開始了,今年的主要目標就是javascript,最近在看javascript高級程式設計(第三版),單純的看書也是個很枯燥的事,所以就把看完的東西再寫一遍吧,一方面加深印象,一方面理解不正確的也好讓園子裡面的大神們給提提意見。 這本書前兩章主要是javascript簡介以及在...
  • 1.ctrl+shift+p ; 輸入ssvvp ; 回車2.輸入markdown-preview進行安裝3.打開任意.md文件 ; 按ctrl-shift-m 進行預覽
  • 1、代碼實現給出的屬性文件:http.properties(位於類路徑下)1 #每個路由的最大連接數2 httpclient.max.conn.per.route = 20 3 #最大總連接數4 httpclient.max.conn.total = 4005 #連接超時時間(ms)6 http.....
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...