如何利用ArcServer实现地图查询

如何利用ArcServer实现地图查询,第1张

首先引入相应的命名空间:
using ESRIArcGISADF;
using ESRIArcGISADFConnection;
using ESRIArcGISADFConnectionAGS;
using ESRIArcGISServer;
using ESRIArcGISCarto;
using ESRIArcGISGeometry;
using ESRIArcGISGeodatabase;
1指定连接用的用户
ESRIArcGISADFIdentity id = new ESRIArcGISADFIdentity();
idUserName = "Administrator";
idPassword = "password";
idDomain = "服务器的计算机名字";
string agsServerName = "服务器的IP地址";
2连接到服务器。
要通过程序来连接到GISServer,主要有两个对象可以使用:ESRIArcGISServerGISServerConnection(实现了IGISServerConnection2接口)和ESRIArcGISADFConnectionAGSAGSServerConnection。前者是com对象,后者是原生的net对象。
先来看ESRIArcGISServerGISServerConnection。使用方法如下:
ESRIArcGISServerIGISServerConnection2 pGISSC = new ESRIArcGISServerGISServerConnectionClass();
pGISSCConnect("yourservername");
ESRIArcGISServerIServerObjectAdmin pAdm = pGISSCServerObjectAdmin;
注意,要成功获得pGISSCServerObjectAdmin属性得有一个前提条件,就是运行当前AGS程序的用户必须是agsadmin组里的成员。那么接下来就可以通过IServerObjectAdmin来对GISServer进行管理了;如果运行当前AGS程序的用户只是agsuser组里的成员,那么你只能获得ServerObjectManager,从而通过IServerObjectManager来创建AO对象,但是不能对GISServer进行管理;如果运行当前AGS程序的用户既不是agsuser成员也不是agsadmin成员,那么在connect的时候就会报错了。可以看出ESRIArcGISServerGISServerConnection对象不能显式指定连接GIS Server的用户。
下面再来看ESRIArcGISADFConnectionAGSAGSServerConnection。这是ADF中的net对象,通常推荐使用这个对象来进行连接工作,因为它可以指定使用特定的账户身份来连接GIS Server,就是下面的Identity:
ESRIArcGISADFIdentity identity = new ESRIArcGISADFIdentity("username", "password", "domain");
ESRIArcGISADFConnectionAGSAGSServerConnection agsconnection = newESRIArcGISADFConnectionAGSAGSServerConnection("yourgisservername",identity);
agsconnectionConnect();
ESRIArcGISServerIServerObjectAdmin pAdm = agsconnectionServerObjectAdmin;
同样的,要成功获得pAdm,Identity中指定的用户必须是agsadmin成员。如果你的网站,在调试时可以运行,而发布后“拒绝访问”,那么首先检查webconfig的identity,如果使用了以上代码,请确保使用的user在正确的用户组中。
这里我就采用第一种方法,如下:
AGSServerConnection agsConn = new AGSServerConnection(agsServerName, id);
try
{
agsConnConnect();
if (!agsConnIsConnected)
{
agsConnDispose();
return "";
}
}
catch (Exception ex)
{
return "";
}
3获取SOM对象。
IServerObjectManager som = agsConnServerObjectManager;
4设置对应的地图名字和服务类型,获取上下文(IServerContext)
要获取当前的severContext。而获取IServerContext有两种方法:
1)、通过当前Resorces得到
UIComponent form = facesContextgetViewRoot()findComponent((String)paramMapget("formId"));
if (form == null)
{
return;
}
MapControl mapControl = (MapControl)formfindComponent((String)paramMapget("mapId"));
if (mapControl == null)
{
return;
}
WebMap webMap = mapControlgetWebMap();
WebContext webContext = webMapgetWebContext();
// 得到当前服务的IServerContext
AGSLocalMapResource mapResource = (AGSLocalMapResource)webContextgetResources()get("ags1");
MapServer mapServer = mapResourcegetLocalMapServer();
IServerContext serverContext =mapResourcegetServerContext();
2)、通过IP链接得到(也就是我要用的方法)
IServerObjectManager som = agsConnServerObjectManager;
string servertype = "MapServer";
string serverobjectname = "GZ"; //对应的地图名
IServerContext severContext = somCreateServerContext(serverobjectname, servertype);
IMapServer pMapServer = severContextServerObject as IMapServer;
IMapServerObjects pMapServerObjs = pMapServer as IMapServerObjects;
IMap pMap =pMapServerObjsget_Map(pMapServerDefaultMapName);
5获取IMapServerObjects
IMapServer pMapServer = severContextServerObject as IMapServer;
IMapServerObjects pMapServerObjs = pMapServer as IMapServerObjects;
6通过IMapServerObjects获取IMap对象
IMap pMap = pMapServerObjsget_Map(pMapServerDefaultMapName);
7获取要查询的图层和属性
//得到查询的图层
ILayer workAreaLayer = pMapget_Layer(7);
IFeatureLayer loopFeatureLayer = (FeatureLayer)(workAreaLayer);
IFeatureClass loopFeatureClass =loopFeatureLayerFeatureClass;
8设置查询用的Filter
ISpatialFilter spatialFilter = (ISpatialFilter)severContextCreateObject("esriGeoDatabaseSpatialFilter");
string shpFld = loopFeatureClassShapeFieldName;
spatialFilterGeometryField = shpFld;
//指定要使用的空间 *** 作
spatialFilterSpatialRel = esriSpatialRelEnumesriSpatialRelIntersects;
//创建where表达式,这里只要要素
spatialFilterWhereClause = "图号='" + no + "'";
IQueryFilter queryFilter=new QueryFilterClass();
queryFilter = (IQueryFilter)spatialFilter;
9调用Search查询
IFeatureCursor featureCursor = loopFeatureClassSearch(queryFilter, false);
//第一个返回的要素
IFeature feature = featureCursorNextFeature();
10处理结果
IGeometry geo = featureShape;
string box = geoEnvelopeXMinToString() + "," + geoEnvelopeYMinToString();
box += "," + geoEnvelopeXMaxToString() + "," + geoEnvelopeYMaxToString();
这个Shape是查询结果中第一个地物的外接矩形,大家可以根据自己的业务使用。这里我是要使用Shape的左下和右上两个坐标点,拼接到WMS中去。

参考网址:>arcgis标识工具输出为空,或是提示未找到表是设置问题,解决方法是:在菜单栏选择“地理处理”—“地理处理选项”—把后台处理“启用”的√取消掉即可。
ArcGIS产品线为用户提供一个可伸缩的,全面的GIS平台。ArcObjects包含了许多的可编程组件,从细粒度的对象(例如单个的几何对象)到粗粒度的对象(例如与现有ArcMap文档交互的地图对象)涉及面极广,这些对象为开发者集成了全面的GIS功能。
相关信息
ArcGIS服务器产品符合信息技术的标准规范,可以和其它企业级的软件合作,例如Web服务器,数据库管理系统
 (DBMS)以及企业级的应用开发框架包括NET和JAVA2企业级平台(J2EE)。这促使了GIS和其它大量的信息系统技术的整合。
ArcSDE是一个位于ArcGIS其它软件产品和关系型数据库
 之间的数据服务器,其广泛的应用使得在跨任何网络的多个用户群体中共享空间数据库以及在任意大小的数据级别中伸缩成为可能。ArcIMS已经在成千上万的应用中部署了,主要是为Web上的用户提供数据分发服务和地图服务。
回答于 2021-11-13
赞同2
查看全部回答
卡尼亚Kalea-家用别墅电梯定制专家-120+年瑞典电梯商
家用电梯,别墅电梯,无底坑电梯,甄选瑞典卡尼亚电梯,专为私家房屋业主提供多元化的家居定制方案,类型丰富,适配各类家装风格!螺杆驱动,2-6层3-7天实现快速安装。
Kalea卡尼亚广告
arcgis入门教程中文版,O基础入门到精通-仅395元
arcgis入门教程中文版,专业老师由浅入深讲解,助你轻松掌握!全套教程内容全面,案例丰富,适合O基础快速入门,一次购买,永久免费更新!
衡阳嘉达网络科技经营部广告
大家还在搜
幻灵手游
光伏电站
锁具配件
oppo系列手机
五菱之
铃木雨燕新车报价
购买电动汽车
图兰朵计划
精选


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10890095.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存