今天在实验室写了一个测试程序:用c# winform 调用百度地图。一切都很顺利,运行程序地图能够正常显示。但是晚上回到寝室后,同样的程序运行时,却出现了“BMap”未定义的错误。费劲周折,花费了近两个小时才找到问题所在,并解决。
首先说一下c#调用百度地图的基本思路:
①要有一个能显示百度地图的html文件,不论是在本地端还是服务器端;这里给出一个示例代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>c#与百度地图交互测试文件</title>
<style type="text/css">
body, html{width: 100%;height: 100%;margin:0;font-family:"微软雅黑";}
#map{height:100%;width:100%;}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=mgRIjArNHuol074XjsyDPQMu7g22hEjZ"></script>
</head>
<body>
<div id="map"></div>
</body>
</html>
<script type="text/javascript">
// 创建一个地图用于显示
var map = new BMap.Map("map");
map.centerAndZoom(new BMap.Point(117.269945,31.86713), 13);
map.enableScrollWheelZoom(true);
</script>
②其次要在winform中添加webBrowser控件,并设置其uri熟悉
using System; using System.Collections.Gener
ic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WebBrowser_test { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.webBrowser1.Url = new Uri(@"A:\download_file\document\GitHub\iTravel_project\iTravel_other\iTravel_syf\WebBrowser_test\WebBrowser_test\bin\map.html"); } } }接着探讨“BMap”未定义错误原因与解决:
大家的原因可能各有不同,http://blog.csdn.net/eastmount/article/details/51380996 中提及了各种情况值得参考,但是并没有快速精确地解决我的问题。
上述链接内容启示我webBrowser调用的是ie浏览器,可能是由于ie浏览器无法正常浏览网页的原因造成的。我打开ie浏览器,输入www.baidu.com,发现的确不能访问网页,那么是不是解决了ie浏览器上网的问题我们的问题就解决了呢?http://www.iefans.net/a/357.html 中提供了ie和edge不能正常上网的一种解决方案——>问题出在局域网设置上:
通过internet选项更改局域网设置,只保留自动检测设置,确认更改并应用。这样ie浏览器又可以正常使用了,之后测试程序,果然可以正常运行了。
能够解决问题了,但是还需要推敲一下原因。在实验室时,用的是实验室的网线,处于局域网中,可能一旦处于局域网中,ie和edge浏览器就会自动更改局域网设置。回到寝室后,使用是公网,但此时ie和edge的局域网设置并没有自动更改,因此产生了问题。
希望我的总结能对大家起到一定帮助。