实验报告4地图图形绘制.docx
- 文档编号:14825864
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:15
- 大小:423.97KB
实验报告4地图图形绘制.docx
《实验报告4地图图形绘制.docx》由会员分享,可在线阅读,更多相关《实验报告4地图图形绘制.docx(15页珍藏版)》请在冰点文库上搜索。
实验报告4地图图形绘制
南京工程学院
实验报告
课程名称地理信息系统
实验项目名称图形绘制实验
实验学生班级多媒体111
实验学生姓名梁同辉
学 号202110124
同组学生姓名无
实验时间
实验地点信息楼A213
实验成绩评定
指导教师签字 年 月 日
一、实验目的和要求
1.理解地图叠加层的概念并使用。
包括:
①从数据库动态获取地图的点,线,面数据并将数据传到页面中。
②将这些点组织成marker,polyline,polygon,要动态设置样式。
2.上机调试之前必须携带已经编写完毕的程序源代码,实验过程中主要是进行调试。
3.上机时间不足以完成实验项目的同学利用课外时间做完所有项目。
4.根据所选实验内容完成实验报告。
二、实验主要仪器和设备
计算机,操作系统Windows7,VisualStudio2010集成开发环境,
BaiduMapAPI
三、实验方法与步骤(需求分析、算法设计思路、流程图等)
1.设计思路
a.编写HTML文件
b.引入BaiduMapAPI,实例并显示地图
c.创建数据库表,插入覆盖物的坐标数据
d.添加后台代码,操作数据库,获取数据库的数据
e.对数据库数据进行处理,格式化为一个字符串,存入Session
中,以提供给前台使用
f.根据Session中的数据,添加对应的覆盖物到地图上
2.开发步骤:
a.打开VisualStudio2010,创建一个Web应用程序的工程,
并添加一个Web窗体,如下图(图一)所示:
图一:
添加Web窗体
b.在HTML中,引入BaiduMapAPI,添加div块,设置页面的样
式,实例化地图对象,代码如下:
//api.map.bai body,html,#allmap{width: 100%;height: 100%;overflow: hidden;margin: 0;font-family: "微软雅黑";} #allmap{height: 600px;}
varmap=newBMap.Map("allmap");
varpoint=newBMap.Point(118.886575,31.927937);
map.centerAndZoom(point,15);
c.创建数据库OverlayDB)(图二),添加Overlays和Position
表(图三),插入覆盖物的坐标数据,如下图所示:
图二:
创建OverlayDB数据库
图三:
添加Overlays表和Position表
d.编写MapOverlayDB.aspx.cs后台代码,在Page_Load函数中,
连接数据库,获取数据库的数据,代码如下:
//获取连接数据库的字符串
stringconnectionString=WebConfigurationManager.Conn
ectionStrings["ConnectionString"].ConnectionString;
//创建数据库连接
SqlConnectionconnection=newSqlConnection(connection
String);
//判断数据库库的状态
if(connection.State==ConnectionState.Closed||
connection.State==ConnectionState.Broken)
{
//打开数据库
connection.Open();
}
//创建命令对象
SqlCommandcmd=newSqlCommand();
cmd.Connection=connection;
//执行数据查询的SQL语句
cmd.CommandText="selectlongitude,latitudefromPosTable";
//查询数据
SqlDataAdaptersda=newSqlDataAdapter(cmd);
//创建数据集对象
DataSetds=newDataSet();
//使用数据适配器查到的数据结果,填充数据集对象
sda.Fill(ds);
//获取数据集中的第一张数据表
DataTabledt=ds.Tables[0];
e.对数据库数据进行处理,格式化为一个字符串,存入Session
中,以提供给前台使用,代码如下:
//字符串清空
stringposMsg="";
boolisFirst=true;
stringnumber="";
//遍历数据表,将数据存入到posMsg字符串中
for(inti=0;i
if(isFirst){
number=markerData.Rows[i]["NO"].ToString();
isFirst=!
isFirst;
}
if(number!
=markerData.Rows[i]["NO"].ToString()){
if(posMsg.Length>0)
posMsg=posMsg.Substring(0,posMsg.Length-1);
posMsg+=")";
number=markerData.Rows[i]["NO"].ToString();
}
posMsg+=markerData.Rows[i]["longitude"]+","
+markerData.Rows[i]["latitude"]+"|";
}
if(posMsg.Length>0)//判断字符串中是否存有数据
//将字符串中的最后一个逗号截掉
posMsg=posMsg.Substring(0,posMsg.Length-1);
//将获取的数据存入Session中,便于前台的使用
Session.Add(keyName,posMsg);
connection.Close();//关闭数据口连接
f.根据Session中的数据,添加对应的覆盖物到地图上,关键
代码如下:
varmarkerPos="<%=(Session["markerPos"])%>";
if(markerPos.length>0)
addMarkers(markerPos);//添加Marker覆盖物
varpolylinePos="<%=(Session["polylinePos"])%>";
if(polylinePos.length>0)
addPoly(polylinePos,"polyline");//添加polyline覆盖物
varpolygonPos="<%=(Session["polygonPos"])%>";
if(polygonPos.length>0)
addPoly(polygonPos,"polygon");//添加polygon覆盖物
//添加覆盖物函数
functionaddMarkers(positions){
varposList=positions.split(")");
//获得坐标值
for(vari=0;i //根据坐标,创建标记 varpt=posList[i].split(","); if(pt.length==2){ varmarker=newBMap.Marker(newBMap.Point( pt[0],pt[1]));//创建点 marker.addEventListener("click",showMsg); map.addOverlay(marker);//增加点 } } } 4、实验原始纪录(源程序、数据结构等) 源代码: //MapOverlayDB.aspx文件(前台) //www.w3.org/1999/xhtml"> charset=utf-8"/> user-scalable=no"/> body,html,#allmap{width: 100%;height: 100%;overflow: hidden;margin: 0;font-family: "微软雅黑";} #allmap{height: 600px;} //api.map.baidu. com/api? v=2.0&ak=NOre0dKA9pG7pNwrnfdL6Uc2">