zoukankan      html  css  js  c++  java
  • ArcServer 9.3 下线性参考定位的实现。

    首先要生成路径(route)数据,然后在路径(route)数据的基础上生成点事件以及线事件。

    这样就可以利用esri提供的Imsegmentation接口, 通过Imsegmentation 接口的GetPointsAtM 和GetSubcurveBetweenMs 就可以找到
    M 值(里程值)为某一特定值的所有点以及M值在某一特定区间内的线。以下面例子为例,实现的是管线上具有某一里程值(距离管线起始点的管线线上距离)的点的定位。

                          //连接远程地图服务

                        ESRI.ArcGIS.ADF.Identity id = new ESRI.ArcGIS.ADF.Identity("Administrator", "123456", "gis2-trq");
                        ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection agsconn;
                        agsconn = new ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection("10.150.38.34", id);
                        agsconn.Connect();

                        if (!agsconn.IsConnected)
                        {
                            agsconn.Dispose();
                            return "";
                        }

                        //得到对应的地图服务以及对应的featureclass
                        ESRI.ArcGIS.Server.IServerObjectManager som = agsconn.ServerObjectManager;
                        string servertype = "MapServer";
                        string serverobjectname = "LCZ";
                        ESRI.ArcGIS.Server.IServerContext sc = som.CreateServerContext(serverobjectname, servertype);
                        IMapServer pMapServer = sc.ServerObject as IMapServer;
                        IMapServerObjects pMapServerObjs = pMapServer as IMapServerObjects;
                        IMap pMap = pMapServerObjs.get_Map(pMapServer.DefaultMapName);


                        IFeatureLayer pFLayer = pMap.get_Layer(2) as IFeatureLayer;
                        IFeatureClass pFeatureClass = pFLayer.FeatureClass;

                        ESRI.ArcGIS.Geodatabase.QueryFilter qFilter = sc.CreateObject("esriGeodatabase.QueryFilter") as ESRI.ArcGIS.Geodatabase.QueryFilter;

                           //mile 为一特定的里程值
                        qFilter.WhereClause = String.Format("From_M<={0} AND End_M>={1}", mile, mile);
                        IFeatureCursor fCursor = pFeatureClass.Search(qFilter, true);
                        IFeature feature;
                        ESRI.ArcGIS.Geometry.IPolyline polyline = null;
                        while ((feature = fCursor.NextFeature()) != null)
                        {
                            polyline = feature.Shape as ESRI.ArcGIS.Geometry.IPolyline;
                        }

                        ESRI.ArcGIS.Geometry.IMSegmentation mseg = null;
                        ESRI.ArcGIS.Geometry.IPointCollection pColl = null;
                      //得到 IMSegmentation接口对象

                        mseg = (ESRI.ArcGIS.Geometry.IMSegmentation)polyline;
                        double M = mile;

                       //得到满足里程条件的点集
                        pColl = mseg.GetPointsAtM(M, 0) as ESRI.ArcGIS.Geometry.IPointCollection;
                      // projectpoint为一坐标转换函数,将pColl.get_Point(0).X得到的beijing54坐标转换为WGS84经纬度坐标。这样做可能会有误差影响定位结果。

                             //最好能保持坐标一致,就不用转换了,就不会有误差产生。

      ESRI.ArcGIS.Geometry.IPoint pt = projectpoint(pColl.get_Point(0).X, pColl.get_Point(0).Y, false);
                           ESRI.ArcGIS.ADF.Web.Geometry.Point pSelGeo = new ESRI.ArcGIS.ADF.Web.Geometry.Point(pt.X, pt.Y);
                         ClearTempElementInMap(map);//清除定位标记
                  ESRI.ArcGIS.ADF.Web.Geometry.Envelope pEnv = new ESRI.ArcGIS.ADF.Web.Geometry.Envelope(pSelGeo.X - 0.001, pSelGeo.Y - 0.001, pSelGeo.X + 0.001, pSelGeo.Y + 0.001);
                        map.Extent = pEnv;
                        AddTempGraphicElement(pSelGeo, false, "", false, System.Drawing.Color.Red, 30, map);//添加定位点标记符号

                        ESRI.ArcGIS.ADF.Web.UI.WebControls.Toolbar toolbar = (ESRI.ArcGIS.ADF.Web.UI.WebControls.Toolbar)map.Page.FindControl("Toolbar1");
                        map.CallbackResults.CopyFrom(toolbar.CallbackResults);
                        return map.CallbackResults.ToString();

    一起学习GIS及其二次开发,一起进步!
  • 相关阅读:
    Net core 关于缓存的实现
    2018年自己的技术心得
    DataSet
    弹错:正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码
    c#中结构与类的区别
    TEQC使用说明
    TEQC软件及使用方法
    <深度工作>笔记
    Gtest学习系列三:断言
    Gtest学习系列二:Gtest基本介绍
  • 原文地址:https://www.cnblogs.com/tuncaysanli/p/1411676.html
Copyright © 2011-2022 走看看