天天看点

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

  从本随笔的标题中不难看出是为了实现显示图层属性的,而且可以获取图层与数据库关联的ID来从数据库中找到相应的附属信息。要实现此功能当然是先从数据库入手了,为此我们来建立几张数据库的表;其次是使用MapNet控件为我们提供的某些接口来实现这些功能。 

1、点击MapNet控件查询数据的代码如下:

 1

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

using System;

 2

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

using System.Collections;

 3

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

using System.ComponentModel;

 4

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

using System.Data;

 5

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

using System.Drawing;

 6

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

using System.Web;

 7

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

using System.Web.SessionState;

 8

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

using System.Web.UI;

 9

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

using System.Web.UI.WebControls;

10

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

using System.Web.UI.HtmlControls;

11

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

using System.Xml;

12

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

using StudioAT.IMS;

13

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

using StudioAT;

14

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

15

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

……

16

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

17

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

/**//// <summary>

18

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

/// 单击地图时显示相关的属性信息和坐标信息

19

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

/// </summary>

20

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

/// <param name="rct">点的大小范围信息</param>

21

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

private void MapNet1_Click(StudioAT.IRect rct)

22

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

        {

23

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            IMapNet myMapNet = this.MapNet1;

24

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            XmlElement myXmlEle = null;

25

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            XmlDocument myXmlDoc = (XmlDocument)ArcXML.BuildRequest(ArcXML.enuRequest.GET_FEATURES, ref myXmlEle);

26

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            myXmlEle.SetAttribute(ArcXML.AttributeOutputmode,"newxml");

27

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            myXmlEle.SetAttribute(ArcXML.AttributeGeometry, "true");

28

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            myXmlEle.SetAttribute(ArcXML.AttributeEnvelope, "true");

29

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            myXmlEle.SetAttribute(ArcXML.AttributeCompact, "true");

30

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            XmlElement xmlELayer = myXmlDoc.CreateElement(ArcXML.NodeLayer);

31

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            xmlELayer.SetAttribute(ArcXML.AttributeId, this.DDL_Layer.SelectedValue);

32

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            myXmlEle.AppendChild(xmlELayer);

33

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            XmlElement xmlESQ = myXmlDoc.CreateElement(ArcXML.NodeSpatialquery);

34

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

35

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            myXmlEle.AppendChild(xmlESQ);

36

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            XmlElement xmlESF = myXmlDoc.CreateElement(ArcXML.NodeSpatialfilter);

37

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            xmlESF.SetAttribute(ArcXML.AttributeRelation, "area_intersection");

38

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            xmlESQ.AppendChild(xmlESF);

39

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            XmlElement xmlEEnv = (XmlElement)ArcXML.CreateExtent(ref myXmlDoc,rct);

40

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            xmlESF.AppendChild(xmlEEnv);

41

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            string strResponse = myMapNet.RequestArcXML(myXmlDoc.InnerXml, ArcXML.enuCustomService.Query);

42

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            myXmlDoc = new XmlDocument();

43

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            myXmlDoc.LoadXml(strResponse);

44

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            if(myXmlDoc.GetElementsByTagName("FIELD").Count > 2)

45

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            {

46

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                this.TB_BZ.Text = myXmlDoc.InnerXml;

47

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            }

48

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

        }

49

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

50

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

此时我们可以通过查找myXmlDoc.GetElementsByTagName中遍历不同域名Name来获得Value中的值(因为我们在第26行中已经申明了一个newxml的对象,和申明xml对象所产生的返回值不同,具体内容请参考ArcXML的相关文档),如果你想让地图和后台数据库交互,那么你就必须让所有需要交互的图层中包含一个和数据库图层表中数据一一对应的外建关系,可以命名为GIS_ID或者其他有意义的并且唯一的字段,这里我们假设此处用的是GIS_ID。那么我们就可以将第46行的代码换成查询到的“GIS_ID”的值的代码,然后再通过从地图中获得的这个GIS_ID的值到数据库中相应的图层表中查询到该条记录,以便完成图层中元素附属属性的现实。当然需要知道的是在此项开始之前,一定要做到一个导入工作将地图中每个数据库文件表(这里我们用的是ArcGIS,所有图层都会有一个*.dbf的文件,可以用Excel打开来查看或修改里面的内容)数据导入到相应的数据库表中,GIS_ID是必须被导入的。

     这样我们就完成了地图的属性查询工作。 

2、点击DataGrid中的某条数据在MapNet中显示相应的元素,代码如下(其中的DataGrid是第三方控件):

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

private void UWG_Result_DblClick(object sender, Infragistics.WebUI.UltraWebGrid.ClickEventArgs e)

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询
GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            string GisID = e.Row.Cells[int.Parse(Session["GIS_IDindex"].ToString())].ToString().Trim();//获得点击数据的GisID值

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            IMapNet myIMapNet = MapNet1;

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            string SearchStr = String.Empty; 

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            ICollectionLayers myICL = myIMapNet.CollectionLayers;

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            IGetFeatures myIGF = null;

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            ISimpleMarkerSymbol myISMS = new SimpleMarkerSymbolProperty();

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            IMapNetAcetateObjects myIMNAO = (IMapNetAcetateObjects)myIMapNet;

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            myIMNAO.Clear();

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            IObjectAcetateLayer myIOAL;

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            IPoint myIP1;

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

            try

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询
GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                ILayer myIL = (ILayer)myICL.FindById (Session["LayerID"].ToString());

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                ISpatialQuery2 myISQ2 = new SpatialQuery();

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                DataSet ds = myIL.Recordset(myISQ2, true, false, myIGF);//根据图层读取数据

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                for (int k = 0; k < ds.Tables[0].Columns.Count; k++)

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                {

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                    switch (ds.Tables[0].Columns[k].ColumnName)

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                    {

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                        case "#ID#":

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            ds.Tables[0].Columns[k].ColumnName = "序号";

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            break;

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                        case "EnvelopeXMin":

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            ds.Tables[0].Columns[k].ColumnName = "最小经度";

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询
GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                        case "EnvelopeXMax":

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            ds.Tables[0].Columns[k].ColumnName = "最大经度";

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询
GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                        case "EnvelopeYMin":

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            ds.Tables[0].Columns[k].ColumnName = "最小纬度";

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询
GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                        case "EnvelopeYMax":

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            ds.Tables[0].Columns[k].ColumnName = "最大纬度";

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询
GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                        default:

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询
GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                    }

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                }

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                if(GisID != "" && GisID != null)

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询
GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                    string ColumnsName = "GIS_ID";

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                    SearchStr = ColumnsName + " Like '%" + GisID + "%'";

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                    DataRow[] drs  = ds.Tables[0].Select(SearchStr);

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                    if(drs.Length > 0)

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询
GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                        double xMin = double.Parse(drs[0]["最小经度"].ToString());

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                        double xMax = double.Parse(drs[0]["最大经度"].ToString());

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                        double yMin = double.Parse(drs[0]["最小纬度"].ToString());

51

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                        double yMax = double.Parse(drs[0]["最大纬度"].ToString());

52

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                        if(xMin == xMax)

53

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                        {

54

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            //设置显示的比例尺及点参数

55

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            myIMapNet.SetScale(5500);

56

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            myISMS.Color = Color.Red;

57

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            myISMS.Width = 20;

58

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            myISMS.Type = StudioAT.IMS.ArcXML.enuTypePoint.star;

59

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            myISMS.OutLineColor = Color.Red;

60

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            myIP1 = new StudioAT.Point(xMin,yMin);

61

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            myIOAL = new ObjectPoint(myIP1, (ISymbolPointObject)myISMS);

62

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            myIOAL.Unit = ArcXML.enuUnit.database;

63

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            myIMNAO.Add((ObjectAcetateLayer)myIOAL);

64

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            myIMapNet.CenterAt(myIP1);

65

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                        }

66

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                        else//定位线和面对象

67

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

68

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            //设置显示范围

69

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

70

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            myISMS.Width = 100;

71

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            myISMS.Type = StudioAT.IMS.ArcXML.enuTypePoint.square;

72

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

73

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            myISMS.Transparency = 0;

74

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            myISMS.Shadow = Color.Transparent;

75

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            myIP1 = new StudioAT.Point(((xMax+xMin)/2),((yMax+yMin)/2));//计算范围中心

76

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

77

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

78

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

79

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

80

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                            myIMapNet.Refresh(xMin,yMin,xMax,yMax);

81

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

82

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

                        ……//在此编写访问数据库的代码。通过GisID来查找相应属性。

83

GIS开发随笔(4)——使用MapNet控件和DataGrid实现图层数据互相查询

}

GisID是图层表和数据库表的关联字段,只要获得了此数据值就能遨游在电子地图和数据库表之间了。

本文转自刚刚博客园博客,原文链接:http://www.cnblogs.com/lijigang/archive/2007/02/12/635514.html,如需转载请自行联系原作者