组件式GIS
实验报告册
二零一三年
实验报告1 GIS基本功能设计
地点: 时间: 节次:
一、 实验目的
1. 安装配置组件式GIS开发环境
2. 设计GIS基本功能
二、 实验内容
1. 实验01 SuperMap Objects 安装,开发环境VS2010 安装
2. 实验02地图浏览功能设计
3. 实验03量算设计
4. 实验04基本查询设计
5. 实验05空间查询设计
三、 实验结果
1. 实验01 SuperMap Objects 安装,开发环境VS2010 安装
结果: 在VS2010 C#开发环境下建立的第一个项目,在设计窗体上添加SuperMap Objects核心控件后,整个设计环境的截图。
截图:
2. 实验02地图浏览功能设计
设计的地图浏览功能及其代码:
private void Form1_Load(object sender, EventArgs e)
{
axSuperMap1.Connect(axSuperWorkspace1.CtlHandle);
String strSpaceFileName;
strSpaceFileName = @"E:\My project\world.smw";
axSuperWorkspace1.Open(strSpaceFileName, "");
axSuperMap1.OpenMap("世界地图");
}
private void buttton1_Click(object sender, EventArgs e)
{
this.axSuperMap1.Action = SuperMapLib.seAction.scaPan;
}
private void button1_Click(object sender, EventArgs e)
{
axSuperMap1.Action = SuperMapLib.seAction.scaZoomOut;
}
private void button2_Click(object sender, EventArgs e)
{
axSuperMap1.Action = SuperMapLib.seAction.scaZoomIn;
}
private void button3_Click(object sender, EventArgs e)
{
axSuperMap1.Action = SuperMapLib.seAction.scaZoomFree;
}
private void button4_Click(object sender, EventArgs e)
{
this.axSuperMap1.ViewEntire();
}
系统运行截图:
3. 实验03量算设计
坐标、距离、面积、方位角等量算功能代码:
string temp;
private void toolStripButton1_Click(object sender, EventArgs e)
{
temp = "A";
this.axSuperMap1.Action = seAction.scaTrackPoint;
}
private void toolStripButton2_Click(object sender, EventArgs e)
{
temp = "B";
axSuperMap1.TrackingLayer.ClearEvents();
axSuperMap1.TrackingLayer.Refresh();
axSuperMap1.Action = SuperMapLib.seAction.scaTrackPolyline;
}
private void toolStripButton3_Click(object sender, EventArgs e)
{
temp = "C";
axSuperMap1.TrackingLayer.ClearEvents();
axSuperMap1.TrackingLayer.Refresh();
axSuperMap1.Action = SuperMapLib.seAction.scaTrackPolygon;
}
private void toolStripButton4_Click(object sender, EventArgs e)
{
temp = "D";
axSuperMap1.TrackingLayer.ClearEvents();
axSuperMap1.TrackingLayer.Refresh();
axSuperMap1.Action = SuperMapLib.seAction.scaTrackPolyline;
}
private void axSuperMap1_Tracking(object sender, AxSuperMapLib._DSuperMapEvents_TrackingEvent e)
{
string strCoordinateUnit;
strCoordinateUnit = this.axSuperWorkspace1.Datasources[1].PJCoordSys.CoordUnits.ToString();
switch(temp)
{
case "A": this.toolStripStatusLabel1.Text = "x:" + Math.Round(e.x, 4).ToString() + strCoordinateUnit + " " + "y:" + Math.Round(e.y, 4).ToString() + strCoordinateUnit; break;
case "B": this.toolStripStatusLabel2.Text = "当前长度:" + e.dCurrentLength.ToString() + "总长度:" + e.dTotalLength.ToString(); break;
case "C": this.toolStripStatusLabel3.Text = "总面积:" + e.dTotalArea.ToString(); break;
case "D": this.toolStripStatusLabel4.Text = "方位角:" + e.dCurrentAngle.ToString(); break;
}
}
面积量算截图:
实验04基本查询设计
图查属性代码:
private void button5_Click(object sender, EventArgs e)
{
this.axSuperMap1.Action = seAction.scaSelect;
}
private void axSuperMap1_GeometrySelected(object sender, AxSuperMapLib._DSuperMapEvents_GeometrySelectedEvent e)
{
soSelection objSel;
soRecordset objRecordset;
String strValue;
objSel = axSuperMap1.selection;
if (objSel.Count != 0)
{
objRecordset = objSel.ToRecordset(false);
objRecordset.MoveFirst();
strValue = objRecordset.GetFieldValue("Capital").ToString();
MessageBox.Show(strValue, "");
}
}
属性查图代码:
private void button6_Click(object sender, EventArgs e)
{
string strQueryTxt;
soDataset objDt;
soDatasetVector objDtv;
soRecordset objRd;
Double dRatio;
dRatio = 2;
objDt = this.axSuperWorkspace1.Datasources["World"].Datasets["Countries"];
objDtv = (SuperMapLib.soDatasetVector)objDt;
strQueryTxt = "Country like '*" + this.textBox1.Text + "*'";
objRd = objDtv.Query(strQueryTxt, true, null, "");
this.axSuperMap1.selection.FromRecordset(objRd);
this.axSuperMap1.EnsureVisibleRecordset(objRd, dRatio);
this.axSuperMap1.Refresh();
}
图查属性截图:
属性查图截图:
4. 实验05空间查询设计
空间查询算子
基本查询模式:scsExtentOverlap、scsLinCross、scsContaining、scsContainedBy、scsOverlap、scsDisjoint、scsTouch、scsIdentical、scsAreaIntersect
常用查询模式:scsCentroidInPolygon、scsCommonPoint、scsCommonLine
组合查询模式:scsContainedByNoEdgeTouch、scsContainingNoEdgeTouch、scsContainOrOverlap、scsPointInPolygon、scsTouchNoCross、scsCommonLineOrOverlap、scsCommonPointOrLineCross、scsEdgeTouchOrAreaIntersect、scsAreaIntersectNoEdgeTouch
空间查询功能代码:
private void button7_Click(object sender, EventArgs e)
{
axSuperMap1.TrackingLayer.ClearEvents();
axSuperMap1.selection.RemoveAll();
axSuperMap1.TrackingLayer.Refresh();
this.axSuperMap1.Action = seAction.scaTrackPolyline;
}
private void axSuperMap1_Tracked(object sender, EventArgs e)
{
soGeometry objSearchGeo =axSuperMap1.TrackedGeometry;
if (objSearchGeo == null)
{
MessageBox.Show("未获得用于搜索的对象", "提示");
return;
}
soStyle objStyle = new soStyleClass();
objStyle.PenColor = (uint)ColorTranslator.ToOle(Color.Red);
axSuperMap1.TrackingLayer.AddEvent(objSearchGeo, objStyle, "");
soDatasetVector objDtv;
objDtv = (SuperMapLib.soDatasetVector)axSuperWorkspace1.Datasources["World"].Datasets["Countries"];
soRecordset objSearchRd = null;
objSearchRd = objDtv.QueryEx(objSearchGeo, seSpatialQueryMode.scsLineCross, "");
if (objSearchRd.RecordCount == 0)
{
MessageBox.Show("没有找到符合条件的对象", "提示");
return;
}
axSuperMap1.selection.FromRecordset(objSearchRd); this.axSuperGridView1.Connect(objSearchRd);
axSuperMap1.TrackingLayer.Refresh();
axSuperMap1.Refresh();
axSuperGridView1.Refresh();
}
空间查询运行截图:
四、 其它的实验内容
显示信息随鼠标移动,利用地图控件的MouseMove事件,代码编写:
l label1.Left = 10+e.x;
l label1.Top = e.y;
l label1.Text = axSuperMap1.PixelToMapX(e.x).ToString();
五、 实验中你发现的问题及解决的方法?
运行的时候出现错误,显示上次运行失败是否继续运行,点击是之后,显示有错误,显示程序正在运行中。解决方法:启动任务管理器,将其关闭,再次进行运行。
应用程序中发成了未经处理的异常。
解决方法:所找数据集名字与原图数据集名字不符,进行修改(Datasets),使之与原图数据集名字一致。
第二篇:组件式GIS-实验报告1 - 20xx版
组件式GIS
实验报告册
学 年: 20## -2014__
学 期: 第二学期
专 业:地理系新系统
班 级: 地信112
学 号: 110716223
姓 名: 师明圣
指导教师: 尹涛
山东交通学院土木工程系
二零##年
实验报告1 GIS基本功能设计
地点: 土木楼 时间: 20##-04-18 节次: 1
一、 实验目的
1. 安装配置组件式GIS开发环境
2. 设计GIS基本功能
二、 实验内容
1. 实验01 SuperMap Objects 安装,开发环境VS2010 安装
2. 实验02地图浏览功能设计
3. 实验03量算设计
4. 实验04基本查询设计
5. 实验05空间查询设计
三、 实验结果
1. 实验01 SuperMap Objects 安装,开发环境VS2010 安装
结果: 在VS2010 C#开发环境下建立的第一个项目,在设计窗体上添加SuperMap Objects核心控件后,整个设计环境的截图。截图:
2. 实验02地图浏览功能设计
设计的地图浏览功能及其代码: private void Form1_Load(object sender, EventArgs e)
{
axSuperMap1.Connect(axSuperWorkspace1.CtlHandle);
String sp;
sp = @"D:\supermap\Samples\World\World.smw";
bool a, b;
a = axSuperWorkspace1.Open(sp, "");
b = axSuperMap1.OpenMap("世界”);
if (!a)
{
MessageBox.Show("打开工作空间失败”);
}
if(!b)
MessageBox.Show("打开地图失败”);
}
系统运行截图:
3. 实验03量算设计
坐标、距离、面积、方位角等量算功能代码: private void button1_Click(object sender, EventArgs e)
{
axSuperMap1.Action = seAction.scaZoomIn;
}
private void button2_Click(object sender, EventArgs e)
{
axSuperMap1.Action = seAction.scaZoomOut;
}
private void button3_Click(object sender, EventArgs e)
{
axSuperMap1.Action = seAction.scaPan;
}
private void button4_Click(object sender, EventArgs e)
{
axSuperMap1.ViewEntire();
}
private void button5_Click(object sender, EventArgs e)
{
axSuperMap1.Action = seAction.scaZoomFree;
}
面积量算截图:
4. 实验04基本查询设计
图查属性代码:
private void button6_Click(object sender, EventArgs e)
{
axSuperMap1.Action = seAction.scaSelect;
}
private void axSuperMap1_GeometrySelected(object sender, AxSuperMapLib._DSuperMapEvents_GeometrySelectedEvent e)
{
soSelection objs;
soRecordset objr;
objs = axSuperMap1.selection;
objr = objs.ToRecordset(false);
objr.MoveFirst();
String str;
str = objr.GetFieldValue("Country").ToString();
MessageBox.Show(str);
}
属性查图代码: private void button7_Click(object sender, EventArgs e)
{
string str;
soDataset objt;
soDatasetVector objDtv;
soRecordset obj;
Double dRatio;
dRatio = 2;
objt = this.axSuperWorkspace1.Datasources["World"].Datasets["Countries"];
objDtv = (SuperMapLib.soDatasetVector)objt;
str = "country like '*" + this.textBox2.Text + "*'";
obj = objDtv.Query(str, true, null, "");
this.axSuperMap1.selection.FromRecordset(obj);
this.axSuperMap1.EnsureVisibleRecordset(obj, dRatio);
this.axSuperMap1.Refresh();
}
图查属性截图:
属性查图截图:
5. 实验05空间查询设计
空间查询算子:ExtentOverlap,LineCross,Containing,ContainedBy ,Overlap, Disjoint ,Touch,Identical,AreaIntersect,CentroidInPolygon ,CommonPoint,CommonLine,ContainedByNoEdgeTouch ,ContainingNoEdgeTouch,ContainOrOverlap,PointInPolygon,CommonLineOrOverlap,CommonPointOrLineCross,AreaIntersectNoEdgeTouch,
空间查询功能代码: private void axSuperMap1_Tracked(object sender, EventArgs e)
{
soGeometry objSearchGeo = axSuperMap1.TrackedGeometry;
soDatasetVector objDtv;
if (objSearchGeo == null)
{
MessageBox.Show("未获得用搜索的对象");
return;
}
soStyle objStyle = new soStyleClass();
objStyle.PenColor = (uint)ColorTranslator.ToOle(Color.Red);
axSuperMap1.TrackingLayer.AddEvent(objSearchGeo, objStyle, "");
objDtv = (SuperMapLib.soDatasetVector)axSuperWorkspace1.Datasources["World"].Datasets["Countries"];
soRecordset objSearchRd;
objSearchRd = objDtv.QueryEx(objSearchGeo, seSpatialQueryMode.scsLineCross, "");
if (objSearchRd.RecordCount == 0)
{
MessageBox.Show("没有找到条件 ");
return;
}
axSuperMap1.selection.FromRecordset(objSearchRd);
this.axSuperGridView1.Connect(objSearchRd);
axSuperGridView1.Refresh();
axSuperMap1.TrackingLayer.Refresh();
axSuperMap1.Refresh();
}
}
空间查询运行截图:
四、 其它的实验内容
五、 学了如果地图或空间打开失败时的判断方法以及提示;如图所示:
六、 实验中你发现的问题及解决的方法?
1,有事打开时,不显示地图,可能打开了supermapdesk,先关掉他
2,为变量使用别名:
3,数据源如果是字母,要注意大小写;