GIS二次开发实验系统需求分析报告

时间:2024.4.2

GIS二次开发实验系统需求分析报告

一、背景

随着全球化、网络化和知识经济的蓬勃发展,地理信息系统的理论和技术方法也得到了飞速发展,其已被广泛用于环境整治、城市管理等多个领域。所以对于地理信息系统软件的需求也日益扩大,这些地理信息系统软件的功能包括对于地图的简单浏览、数据查询、修改、专题地图的制作、空间分析等。任何系统的开发都是为了满足用户的需求,如何开发一个令用户满意的系统,对用户需求的分析显得无比重要,所以就需要进行基本的开发尝试,熟悉地理信息系统的基础功能。

二、开发软件和插件介绍

2.1 VB软件的概述:VB是Visual Basic的简称,本次系统开发实验是在VB平台上实现的。它能够很比较容易的实现各种数据库的链接,能够嵌套其他的如MO的控件,快速的实现GIS基本功能。

2.2 MO的概述:MO是MapObjects的简称,它包括一个OLE控件(OCX)叫做Map(Map control)和一组(三十多个)OLE对象(objects)。它适用于工业标准程序环境。如VB6.0,Delphi2.0,PowerBuilder,MS Access等。。

通过MO可以实现以下的甚至更多的功能:

l  显示一张多个Layer地图(道路,河流,边界)。

l  放大,缩小,漫游。

l  生成图形元素,如点、线、圆、多边形。

l  说明注记

l  识别地图上被选中的元素。

l  通过线,方框,区域,多边形,圆拾取物体。

l  拾取某参照物特定范围内的物体。

l  通过SQL描述来选择物体。

l  对选取物体进行基本统计。

l  对所选地图元素的属性进行更新,查询。

l  绘制专题图。

l  标注地图元素。

l  从航片或卫星图片上截取图像。

l  动态显示实时或系列时间组数据。

三、系统设计目标

   本次系统设计主要是以熟悉并实现GIS系统的基本功能为主,同时还重点的实现一种空间分析:最短路径分析。

具体详细的设计目标:

1、该系统能够实现图的放大、缩小、平移、全视图等操作,从而使用户能够快速的大致理解当前图的内容。

2、该系统能够实现基本的属性查询,从而使用户能够精确的定位其感兴趣的目标

3、该系统能够快速的查询最短路径,并能够以精确的数字信息和详细的文字信息呈现出来

四、需求分析

   4.1 功能需求

通过对用户的需求调查,收集数据,并对数据进行处理,为整个系统设计做好前期准备

1.用户可以通过系统根据类的关键字查询相关的属性信息,如根据区县的名称可获取其在图上的具体位置

2.用户需要该系统提供最短路径分析并获取最短路径的距离、经过的地方等。

3.系统的稳定性,系统具有一定的容错纠错的能力

4.整个系统界面布局美观大方,各功能模块分布合理

5.运行效率,系统具有较好的运行效率。

6.系统操作简单、用户可以轻易的学会使用方法

   4.2 数据来源

本次系统开发设计的数据是利用网络下载的重庆范围内的影像数据,通过对需要的类别进行矢量跟踪来获取,同时也使用VB软件只带的一些实例数据。

五、功能模块设计

本系统是以SHP数据为基础,用户不仅可以利用本系统的基本功能快速浏览数据,还可以通过属性查询,获取自己感兴趣区域的集体位置及其他属性。整个系统的功能划分为9大功能模块,如下:

其中每个功能模块下的子功能模块如下

文件功能模块:能够实现单个SHO文件、多个SHP文件的添加、可到处为JPG格式图片、退出本系统。

视图功能模块:比例尺窗口、地图前景色、地图背景色。

图层功能模块:放大、多小、平移、全视图、获取当前图层、获取图层数、删除当前图层、删除所有图层。

数据库功能模块:显示当前图层的属性表。

绘图功能模块:实现画点、画线、画矩形、画多边形、画圆、文本添加。

查询功能模块:点击查询、按属性查询。

测量功能模块:自定义线路长度计算、自定义多边形周长计算、自定义多边形面积机计算。

专题地图功能模块:字段渲染专题图、分级渲染专题图、点值渲染专题图、图表渲染专题图、标注渲染专题图、事件渲染专题图 、组渲染专题图。

空间分析功能模块:最短路径查询。

六、各功能模块具体实现

 在VB平台上加载MO插件,对每一个单独的功能模块进行具体的编码设计,然后把所有的功能模块组建起来,进行测试,修改问题,完善BUG。

    

   

   


第二篇:GIS二次开发试验报告


GIS二次开发程序设计实习报告

实验课程:GIS二次开发程序设计

     

实验名称:设计程序完成图像基本操作 

 班级:      地信101 

      

        学号:      1022062011       

    姓名:     汪翔

          

实验日期:   20##   4    5  


GIS二次开发程序设计实习报告..................................................... 1

一.选题名称.................................................................................... 3

二.研究现状.................................................................................... 3

三.研究思路与方法........................................................................ 3

四.编程与实现................................................................................ 4

Arcmap下实现.................................................................................. 4

vb代码................................................................................................4

实现结果..........................................................................................12

VS下实现.........................................................................................13

C#代码..............................................................................................14

五.结果与分析.............................................................................. 21


一.选题名称

   本次GIS二次程序设计实习中我所研究的是空间信息量算分析中的延伸率分析。

二.研究现状

GIS的发展引领着空间分析也在迅速的走向成熟,因为空间分析作为GIS的核心技术,同时也是区别于其它信息系统的主要特征,能够根据地理对象的位置和形态特征等采用相关分析模型对其进行综合性的分析、预测乃至决策和支持。本文针对空间分析在城市发展建设中的作用以及具体内容进行了探讨研究。

我所研究的延伸率是反应城市空间离散程度的一个重要指标,它的计算公式为:延伸率=L/L

L为区域最长轴的长度,L’为区域最短轴的长度

三.研究思路与方法

  当把城市当作单个面状目标看待时,可以直接使用面状目标的形状系数,如延伸率,形状比,紧凑度,圆形率等。这些指标计算较简单,反应一个抽象的形状。当把城市看成是面状目标的几何,可以使用放射状指数,标准面积指数等较为复杂的指标来计算。反应了城市内部的具体联系。根据这些指标,可以为政府决策,商业运行,旅游开发等一系列经济文化活动带来较为科学的评价指标和行为指导。在本次实习中,我所研究的方向是利用延伸率来研究城市的空间。

    延伸率反应城市空间的带状延伸程度,带状延伸越明显则城市延伸率越大,反应城市的离散程度越大。

四.编程与实现

 本次实习中主要利用的平台有ArcMap 以及Visual Studio,用于实现的语言有C#及VB,我在老师的指导和查阅书籍的情况下,分别用两种语言实现延伸率的量算,现将结果展示如下:

1)在ArcMap下利用VB进行实现:

1.创建一个UI按钮控件,重命名为延伸率,打开代码编辑窗口。

2.编写代码如下:

Private Sub UIButtonControl1_Click()

Dim pDoc As IMxDocument

Dim pMap As IMap

Dim pGraphic As IGraphicsContainer

Dim pLayer As ILayer

Dim pFeatLyr As IFeatureLayer

Dim pFeatCls As IFeatureClass

Dim pFeatCur As IFeatureCursor

Dim pFeat As IFeature

Dim pFld As IField

Dim pFldEdit As IFieldEdit

Dim iFldID As Integer

Dim pPlg As IPolygon

Dim pColl As New Collection

Dim dMinW As Double

Dim dMaxW As Double

Set pDoc = ThisDocument

Set pMap = pDoc.FocusMap

Set pLayer = pDoc.SelectedLayer

Set pGraphic = pMap

If pLayer Is Nothing Then

MsgBox "没有选中图层"

End If

If Not TypeOf pLayer Is IFeatureLayer Then

Exit Sub

End If

Set pFeatLyr = pLayer

Set pFeatCls = pFeatLyr.FeatureClass

iFldID = pFeatCls.FindField("shapeR")

If iFldID = -1 Then

    Set pFld = New Field

    Set pFldEdit = pFld

    With pFldEdit

       .Name = "shapeR"

       .Type = esriFieldTypeDouble

       .Precision = 6

       .Scale = 2

    End With

    pFeatCls.AddField pFld

End If

iFldID = pFeatCls.FindField("shapeR")

Set pFeatCur = pFeatCls.Update(Nothing, False)

Set pFeat = pFeatCur.NextFeature

If pFeat Is Nothing Then

Exit Sub

End If

Do While Not pFeat Is Nothing

   Set pPlg = pFeat.Shape

   Set pColl = MaxDiameter(pPlg)

   dMaxW = CalLength(pColl)

   dMinW = MinWidth(pPlg, pColl)

   shpR = dMaxW / dMinW

   pFeat.Value(iFldID) = shpR

   pFeatCur.UpdateFeature pFeat

   Set pFeat = pFeatCur.NextFeature

Loop

If MsgBox("计算结束,是否显示属性表?", vbYesNo) = vbYes Then

   Dim pTableWin As ITableWindow2

   Dim pTableWinExit As ITableWindow

   Set pTableWin = New TableWindow

   Set pTableWinExit = pTableWin.FindViaLayer(pFeatLyr)

   If pTableWinExit Is Nothing Then

   Set pTableWin.Layer = pFeatLyr

    

pTableWin.TableSelectionAction = esriDrawFeatures

pTableWin.ShowSelected = False

pTableWin.ShowAliasNamesInColumnHeadings = True

Set pTableWin.Application = Application

Else

    Set pTableWin = pTableWinExit

    MsgBox "dddddddddd"

End If

    If Not pTableWin.IsVisible Then

    pTableWin.Show True

  End If

 End If

   End Sub

Function MinWidth(ByVal aPlg As IPolygon, ByVal aCol As Collection) As Double

    Dim aMin As Double

    Dim pPntColl As IPointCollection

    Set pPntColl = aPlg

    Dim min As Double

    Dim max As Double

    Dim x1 As Double

    Dim y1 As Double

    Dim x2 As Double

    Dim y2 As Double

    Dim p1 As Double

    Dim p2 As Double

    Set p1 = aCol.Item(1)

    Set p2 = aCol.Item(2)

    x1 = p1.X

    y1 = p1.Y

    x2 = p2.X

    y2 = p2.Y

    Dim A As Double

    Dim B As Double

    Dim C As Double

    A = y2 - y1

    B = x1 - x2

    C = x1 * (y2 - y1) + y1 * (x2 - x1)

    Dim ICount As Long

    ICount = pPntColl.PointCount

    Dim pPnt As IPoint

    For i = 0 To ICount - 1

      Set pPnt = pPntColl.Point(i)

      X = pPnt.X

      Y = pPnt.Y

      dis = (A * X + B * Y + C) / (A * A + B * B) ^ 0.5

      If max = 0 Then

      max = dis

      ElseIf max < dis Then

      max = dis

      End If

      If min = 0 Then

      min = dis

      ElseIf min > dis Then

      min = dis

      End If

Next

MinWidth = Abs(min - max)

End Function

Function MaxDiameter(ByVal plg As IPolygon) As Collection

Dim dMax As Double

Dim pPntColl As IPointCollection

Dim pPnt1 As IPoint

Dim pPnt2 As IPoint

Dim pLin As ILine

Dim dis As Double

Dim pM1 As IPoint

Dim pM2 As IPoint

Set pPntColl = plg

Dim ICount As Long

ICount = pPntColl.PointCount

For i = 0 To ICount - 1

    Set pPnt1 = pPntColl.Point(i)

    For j = i + 1 To ICount - 1

        Set pPnt2 = pPntColl.Point(j)

        Set pLin = New Line

        pLin.PutCoords pPnt1, pPnt2

        dis = pLin.Length

        If dMax = 0 Then

          dMax = dis

          Set pM1 = pPnt1

          Set pM1 = pPnt2

        ElseIf dMax < dis Then

          dMax = dis

          Set pM1 = pPnt1

          Set pM1 = pPnt2

        End If

    Next

Next

    Dim aCol As New Collection

    aCol.Add pM1

    aCol.Add pM2

    Set MaxDiameter = aCol

End Function

Function CalLength(ByVal aCol As Collection) As Double

  Dim pLin As ILine

  Set pLin = New Line

  Dim p1 As IPoint

  Dim p2 As IPoint

  Set p1 = aCol.Item(1)

  Set p2 = aCol.Item(2)

  pLin.PutCoords p1, p2

  CalLength = pLin.Length

End Function

3.经过调试 其结果显示如下:

2)根据在ArcMap中利用VB的程序设计结果,我在VS中利用C#从新编写代码,其步骤如下:

1.新建项目—>ArcGis下选择Extending ArcOpjects中的Class Library(命名为yanshenlv)—>选择DeskTop ArcMap下的Esri.ArcGis.SystemUI.—>删除Class1.cs,添加一个新建项—>选择Extending ArcOpjects中的Base Command(命名为yanshenlv)—>在接下来的对话框里面选择MapControl or PageLaYouControl Command

2以上基本准备工作已完成,进入程序的编写阶段,参照vb 代码。首先添加引用:

ESRI.ArcGIS.ArcMapUI;

ESRI.ArcGIS.Carto;

ESRI.ArcGIS.Framework;

ESRI.ArcGIS.Geodatabase;

ESRI.ArcGIS.Geometry;

System.Windows.Forms;

System.Collections;

所编写的代码如下:

ArcMap.Application.CurrentTool=null;

IApplicationpApp=ArcMap.Application;

IMxDocumentpDoc=pApp.DocumentasIMxDocument;

IMappMap=pDoc.FocusMap;

ILayerpLayer=pDoc.SelectedLayerasILayer;

IGraphicsContainerpGraphic=pMapasIGraphicsContainer;

            if (pLayer==null)

            {

                MessageBox.Show("当前图层为空");

                return;

            }

            if (!(pLayerisIFeatureLayer))

            {

                MessageBox.Show("当前图层不是多边形图层");

                return;

            }

            {

IFeatureLayerpFeatLyr=pLayerasIFeatureLayer;

IFeatureClasspFeatCls=pFeatLyr.FeatureClass;

if (pFeatCls.ShapeType==esriGeometryType.esriGeometryPolygon)

                {

                    intiFldID=pFeatCls.FindField("延伸率");

                    if (iFldID<0)

                    {

IFieldpFld=CreateFld("延伸率", esriFieldType.esriFieldTypeDouble, 14, 10, 6);

pFeatCls.AddField(pFld);

FldID=pFeatCls.FindField("延伸率");

IFeatureCursorpFeatCur=pFeatCls.Update(null, false);

IFeaturepFeat=pFeatCur.NextFeature();

  while (pFeat!=null)

         {

           IPolygonpPlg=pFeat.ShapeasIPolygon;

ArrayListpColl=MaxDiameter(pPlg);

doubledMaxW=CaclLength(pColl);

doubledMinW=MinWidth(pPlg, pColl);

doubleJiSuan= (dMaxW/dMinW);

pFeat.set_Value(iFldID, JiSuan);

pFeatCur.UpdateFeature(pFeat);

pFeat=pFeatCur.NextFeature();

           }

         }

 }

     else

          {

         MessageBox.Show("当前文?档选中的图层不是矢量图层");

         return;

           }     

       MessageBox.Show("计算结束,打开属性表看看有没有数据");

           }

        }

  publicIFieldCreateFld(stringname, esriFieldTypetype, intiLen, intiPrecision, intiScale)

        {

            IFieldpFld=newFieldClass();

            IFieldEdit2pFldEdit= (IFieldEdit2)pFld;

            pFldEdit.Name_2=name;

            pFldEdit.Type_2=type;

            pFldEdit.Length_2=iLen;

            pFldEdit.Precision_2=iPrecision;

            pFldEdit.Scale_2=iScale;

            returnpFld;

        }

        publicArrayListMaxDiameter(IPolygon  plg)

        {

            doubledMax=0;

            doubledis;

            IPointpPnt1;

            IPointpPnt2;

            IPointPM1=newPoint();

            IPointPM2=newPoint();

            IPointCollectionpPntColl=plgasIPointCollection;

            longiCount=pPntColl.PointCount;

            for (inti=0; i<iCount; i++)

            {

                pPnt1=pPntColl.get_Point(i);

                for (intj=i+1; j<iCount; j++)

                {

                    pPnt2=pPntColl.get_Point(j);

                    ILinepLin=newLine();

                    pLin.PutCoords(pPnt1, pPnt2);

                    dis=pLin.Length;

                    if (dMax==0)

                    {

                        dMax=dis;

                        PM1=pPnt1;

                        PM2=pPnt2;

                    }

                    else

                    {

                        dMax=dis;

                        PM1=pPnt1;

                        PM2=pPnt2;

                    }

                }

            }

            ArrayListaCol=newArrayList();

            aCol.Add(PM1);

            aCol.Add(PM2);

            returnaCol;

        }

        publicdoubleMinWidth(IPolygonaPlg, ArrayListaCol)

        {

            IPointp1=aCol[0] asIPoint;

            IPointp2=aCol[1] asIPoint;

            doubledis;

            doublex1=p1.X;

            doublex2=p2.X;

            doubley1=p1.Y;

            doubley2=p2.Y;

            doubleA=y2-y1;

            doubleB=x1-x2;

            doubleX=0;

            doubleY=0;

            doubleC= (x1* (y2-y1) + (x2-x1) *y1);

            doublemax=0;

            doublemin=0;

            IPointpPnt=newPoint();

            IPointCollectionpPntColl=aPlgasIPointCollection;

            longiCount=pPntColl.PointCount;

            inti;

            for (i=0; i<=iCount; i++)

            {

                pPnt=pPntColl.get_Point(i);

                X=pPnt.X;

                Y=pPnt.Y;

                dis=Math.Sqrt((A*X+B*Y+C) / (A*A+B*B));

                if (max==0)

                {

                    max=dis;

                }

                else

                {

                    max=dis;

                }

                if (min==0)

                {

                    min=dis;

                }

                else

                {

                    min=dis;

                }

            }

            returnMath.Abs(min-max);

        }

        publicdoubleCaclLength(ArrayListaCol)

        {

            ILinepLin=newLine();

            IPointp1=aCol[0] asIPoint;

            IPointp2=aCol[1] asIPoint;

            pLin.PutCoords(p1, p2);

            returnpLin.Length;

        }

3.调试程序,生产解决方案:

如图所示,解决方案生成成功

4.将生成成功的解决方案导入到一个建好的WindowsFormApplication 的Form1.cs设计窗口中(在toolbar属性的Item里面加载)这样我们就在系统中添加了一个用于计算图形延伸率的小控件。

五.结果与分析

  这次的实习中所计算的延伸率是众多图形量算方法的其中一个,它在分析城市的离散性方面有着自己的作用。但是对于一个城市的形状评价不能单单从某一个方面来判断。对于一个城市形状的分析必须是城市建立在众多综合指标以及一些较复杂的指数上的。所以我们应该实现数据的共享,集成多种形状分析计算的功能,建立一个较为系统的形状分析计算的集合。而VS恰恰为我们提供了这样的平台,同时在学习过程中不断完善该系统的功能,实现对城市更为客观的分析。

更多相关推荐:
系统需求分析报告

系统需求分析报告关于成都信息工程学院学籍管理系统计本995毛彩霞990311521概述随着社会的发展经过本院全体师生的共同努力学校的规模不断的扩大日常教学活动中提取相关信息以反映教学情况传统的手工操作方式易发生...

系统需求分析报告-范例2

编号学年第学期实验报告实验课程名称教学管理信息系统专业班级学号学生姓名实验指导教师浙江大学城市学院教学管理信息系统需求分析报告第一章浙江大学城市学院教学管理信息系统开发项目介绍一新系统的目标和功能1新系统的名称...

用户需求分析报告(范本)

window命令大全11需求分析报告111引言编写目的阐明编写需求分析报告的目的项目背景应包括a项目的委托单位开发单位和主管部门b该软件系统与其他系统的关系名词解释列出文档中所用到的专门术语的定义和缩写词的原文...

新闻发布系统需求分析报告

新闻发布系统需求分析报告第一章引言随着互连网的进一步发展网络媒体在人们心中的地位进一步提高新闻发布系统做为网络媒体的核心系统其重要性是越来越重要一方面它提供一个新闻管理和发布的功能另一方面现在的新闻发布要求实现...

图书管理系统需求分析报告

图书管理系统需求规格说明书盛旭张驰1引言随着计算机技术的不断应用和提高计算机已经深入到社会生活的各个角落计算机软件也在各方面得到广泛的应用但是很多图书馆仍采用手工管理图书的方法不仅效率低易出错手续繁琐而且耗费大...

教务管理系统需求分析报告

苏州大学应用技术学院09计算机转教务管理系统需求分析报告曹晓飞黄涛张伟耿赛柳20xx年12月15日苏州大学应用技术学院09计算机转目录第一章引言111编写目的112背景说明113系统目标1第二章系统的需求分析2...

电子商务平台系统需求分析报告

电子商务平台系统需求说明书项目名称电子商务平台系统指导老师学号姓名1目录1引言311编写目的312背景313字符定义314参考资料32任务概述421目标422用户特点423假定和约束43总体设计4311需求规定...

进销存管理系统需求分析报告

文档中国httpWwwDoc126Com进销存管理系统需求分析1背景111问题的提出112问题分析32系统设计目标421系统设计的长远目标422系统设计近期目标53系统总体设计731系统设计思想732数据流图8...

教室管理系统需求分析报告

软件工程课程设计教室统一管理系统需求分析报告学校XXXX学院系别信息管理系班级XXXX姓名XXX学号XXXXX目录第I页1引言111编写目的112项目背景113名词定义114参考资料22任务概述221要求222...

系统需求分析报告要求

系统需求分析报告要求系统需求分析报告对整个项目实施过程中起着极其关键的重要性系统需求分析报告作为系统设计开发以及最后验收的重要依据使开发人员看到后不会产生歧义能够完全按照需求分析进行系统的设计和开发要求各组在确...

图书管理系统需求分析报告

设计名称课程名称姓名班级授课教师信息工程学院课程设计图书管理系统需求分析报告软件需求2薄文正12软件工程1班邱老师目录第一章引言211编写目的212项目背景213产品范围214术语说明215参考文献3第二章项目...

图书管理系统需求分析报告

图书管理系统需求分析报告目录图书管理系统需求分析报告21引言211编写目的212项目背景213相关定义22需求概述321目标322用户类和特征323运行环境33需求分析331数据需求332事物需求433系统的业...

系统需求分析报告(47篇)