C#如何向js传递数组

来源:互联网 发布:js导致硬件死机 编辑:程序博客网 时间:2024/05/16 13:05

这两天,就研究怎么把经纬度数据显示在百度地图上,查阅了很多资料,诸多磨难,因为很多网上提供的信息不知道是不是不对还是我不会用,没有解决问题,探索之路记载下来。

1、C# 做的一个界面,想要实现鼠标移动实时显示当前经纬度,采用百度地图,涉及到C#与javascript交互的问题。

基本操作
js代码

// 百度地图API功能    var map = new BMap.Map("allmap");    var point = new BMap.Point(125.2589,43.9077);    map.centerAndZoom(point, 8);    map.addControl(new BMap.NavigationControl());   // 添加平移缩放控件      map.addControl(new BMap.ScaleControl());        // 添加比例尺控件      map.addControl(new BMap.OverviewMapControl());  //添加缩略地图控件     map.enableScrollWheelZoom();                    //启用滚轮放大缩小     // 编写自定义函数,创建标注    function addMarker(point)       {      var marker = new BMap.Marker(point);      map.addOverlay(marker);    }//添加监听,获取鼠标移动时地图的经纬度       map.addEventListener("mousemove", showInfo);       function showInfo(e)       {          result1 = e.point.lng ;          result2 = e.point.lat ;       }      function Getlng()        {           return result1;        }       function Getlat()        {           return result2;       }

①C#调用js的函数,可以获取js数据

  private void btnGetLocation_Click(object sender, EventArgs e)        {            if (btnGetLocation.Text == "开启实时坐标")            {                timer.Enabled = true;                btnGetLocation.Text = "关闭实时坐标";            }            else            {                btnGetLocation.Text = "开启实时坐标";                timer.Enabled = false;            }        } private void timer_Tick(object sender, EventArgs e)        {            var sx = webBrowser2.Document.InvokeScript("Getlng");//引号中是function的函数名,注意变量要用var型            var sy = webBrowser2.Document.InvokeScript("Getlat");//引号中是function的函数名,注意变量要用var型            double dou_lng = Convert.ToDouble(sx);//将var型转换            double dou_lat = Convert.ToDouble(sy);//将var型转换            this.toolStripStatusLabel2.Text = "当前坐标:" + dou_lng.ToString("F5") + "," + dou_lat.ToString("F5");                 }

C#想要获取JS数据,可以采取函数返回值的方式
webBrowser2.Document.InvokeScript(“Getlng”);

②C#数组传递给js
有一系列经纬度点,怎么传给js然后显示呢
网上找到这个方法,使用window.external.C#函数名();
js代码

var total_num = window.external.getRowsNumber();

C# 代码

int Rows_Num ; public int getRowsNumber()        {            return Rows_Num;        }

但是好像没有作用,希望有人能告知一二。
对于js的这段向地图添加标注,点聚合的代码

   // 随机向地图添加标注     function DrawRandomPoint(num)     {    var bounds = map.getBounds();    var sw = bounds.getSouthWest();    var ne = bounds.getNorthEast();    var lngSpan = Math.abs(sw.lng - ne.lng);    var latSpan = Math.abs(ne.lat - sw.lat);    var markers = [];        // var num = window.external.getNumber();        // var num = <%=_Num%>;//网页空白???    // var num  ="<%=_Num%>";        for (var i = 0; i < num; i ++)         {        var pt = new BMap.Point(sw.lng + lngSpan * (Math.random() * 0.7), ne.lat - latSpan * (Math.random() * 0.7));        addMarker(pt);        markers.push(new BMap.Marker(pt));    }       //最简单的用法,生成一个marker数组,然后调用markerClusterer类即可。    var markerClusterer = new BMapLib.MarkerClusterer(map, {markers:markers});      }

ps:
MarkerClusterer:多标注聚合器。此工具解决加载大量点要素到地图上造成缓慢,且产生覆盖现象的问题
对于var markerClusterer = new BMapLib.MarkerClusterer(map, {markers:markers});需要其起作用,还必须在js中添加这段代码

<script type="text/javascript" src="http://api.map.baidu.com/library/TextIconOverlay/1.2/src/TextIconOverlay_min.js"></script>    <script type="text/javascript" src="http://api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer_min.js"></script>

详见http://lbsyun.baidu.com/index.php?title=jspopular/guide/conflux

这个num的赋值,在C#中下面两种方法都可以实现

webBrowser2.Document.InvokeScript("DrawRandomPoint", new object[] {100 });//直接数字webBrowser2.Document.InvokeScript("DrawRandomPoint", new object[] {Rows_Num });//参数

然而 ,下面这三种办法都不行,不知道C#如何向js传值

// var num = window.external.getNumber();// var num = <%=_Num%>;//网页空白???// var num  ="<%=_Num%>";

C#数组如何向js传值呢,网上搜索找到了虎鲸数据管理平台,好不容易填好了表、字段
这里写图片描述
按照其提供的数据模板,数据上传也总是出粗。心又凉了半截

现在还有一个方法,就是不传递数组,既然我能以参数形式传递数据,那么我就在C#采用循环的方式,一个经纬度一个经纬度的方式进行传值,然后在地图上显示,这个方法很笨,但是我也想不出别的方法了。
js代码

 function DrawSinglePoint(inputLon,inputLat)  {        var pt = new BMap.Point(inputLon,inputLat);        addMarker(pt);    }

C#代码

 for (int i = 0; i <= 2 * Rows_Num - 1; i+=2)  {        webBrowser2.Document.InvokeScript("DrawSinglePoint", new object[] { pointArr[i], pointArr[i + 1] }); }
原创粉丝点击