发表评论
我使用了你的例子写了篇框架分析的文章,在我的Blog中。如果有错误和不足,以及写的不清楚的地方,请帮忙指正,谢谢!
如果我使用你的例程侵犯了你的利益的话,请及时M我,我会在当天撤下来,并表示歉意,呵呵。
写的很好,辛苦了,非常感谢!
如果用TaskResults估计效果好些,像Identify一样,不过我还没有试。
还请教一个模糊查询问题:
string sWhereClauses = "XQDW" + "LIKE'" + txtQuery.Text + "%'";
没有结果。我不知道语法错在哪里。
非常感谢!
ppp_2000@sina.con
#3楼[
楼主]2007-08-20 00:00 |
@空明流转的马甲
例子是和大家共享的,你能在此基础上加入自己的思考就更好了,可以帮助更多的人理解arcgis server。你的文章明天再看:)
#4楼[
楼主]2007-08-20 00:03 |
@GoodBoy
这样试试:
string sWhereClauses="XQDW like \"" + txtQuery.Text + "%\"";
如果是oracle数据库,需要指定XQDW所属表空间及表名
非常感谢!
你所写的
string sWhereClauses="XQDW like \"" + txtQuery.Text + "%\"";
不能运行。我改了下
string sWhereClauses = "XQDW LIKE \'" + txtQuery.Text + "%\'";
运行成功。还是非常感谢。
我最近在研究Web Service ,没有太多例子,ESRI自带的例子也运行不通,望赐教,谢谢。
ppp_2000@sina.con
我以前一直是C++和图形学,只是暑期实习的时候要做Server,所以花了3周从 .net 到 web 到 server 通吃了。。。但是根底还不是很扎实,ESRI的文档也太简略了,做起来东西还是有点痛苦。
#7楼[
楼主]2007-08-22 08:27 |
@空明流转的马甲
做图形学的无弱旅,三周时间已经很快了,有机会要好好向你学习。
看了你的代码,感觉确实不错.想引用一下,"gResource = (ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource)gfunc.Resource;" 这句老是出现错误,出错为
"异常详细信息: System.InvalidCastException: 无法将类型为“ESRI.ArcGIS.ADF.Web.DataSources.IMS.MapResource”的对象强制转换为类型“ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource”。"
我是新手,请赐教!
#9楼[
楼主]2007-08-22 16:55 |
@wggStartGis
你是不是在设置MapResourceManager MapResourceItem0时候,选择了Type为ArcIMS?
打开arcgis server manager,新建service时,有一项是指定地图文件,发现如果不设为共享就取不到地图文件,请问一定需要事先将地图所在文件夹设为共享吗?
#11楼[
楼主]2007-08-22 18:11 |
@jsfvbx
通过网络的方法来发布需要共享,它可以利用到网络中的所有共享资源,如果是catalog发布本地的mxd就不用。
@Flyingis
是的,我用的是arcims发布的地图.配置连接时,选择了Type为ArcIMS,请问这样连接我怎样可以修改上述代码?
#14楼[
楼主]2007-08-23 15:53 |
@wggStartGis
使用arcims相应的mapresource
gResource = (ESRI.ArcGIS.ADF.Web.DataSources.ArcIMS.MapResource)gfunc.Resource;
gResource类型也要相应更改。
@Flyingis
你好,将代码改为上述后.系统出现
"命名空间“ESRI.ArcGIS.ADF.Web.DataSources”中不存在类型或命名空间名称“ArcIMS”(是缺少程序集引用吗?)"
错误,在程序引用里,我用了"using ESRI.ArcGIS.ADF.Web.DataSources;",但不存在命名空间名称“ArcIMS",请问怎么引用?
#16楼[
楼主]2007-08-24 18:12 |
选择“Add ArcGIS Reference”,将ESRI.ArcGIS.ADF.Web.DataSources.IMS添加进来。
@Flyingis
将ESRI.ArcGIS.ADF.Web.DataSources.IMS添加进来,还是没有命名空间名称“ArcIMS”,类型转换出现错误.
请博主解惑。
我看系统自己带的例子里面的高亮是如下方法实现的。
LayerDescription featureLayer = layerdescs[layer_index];
FIDSet ifid = msdp.QueryFeatureIDs(mapdescription.Name, featureLayer.LayerID, sf);
featureLayer.SelectionFeatures = ifid.FIDArray;
mapctrl.Refresh();
不太了解这种方式与楼主的方式有何利弊。
我自己的理解是博主是相当于添加了一个临时图层。这个例子里面好像是改变了图层的某一属性。是不是所以的图层都支持SelectionFeatures这一属性。
AE不熟悉地说.ARCGIS SERVER初步接触。
#19楼[
楼主]2007-08-30 08:59 |
@ren54
你说的没错,例子中是通过添加一个graphic层实现高亮的,例子主要是用来解释graphic data sources的用法。你写的也是常用的高亮显示方法,通常用于选取要素查询编辑。
ESRI.ArcGIS.Carto.ILayerDescription.SelectionFeatures可以用来选择所有图层要素。
#20楼[
楼主]2007-08-30 09:10 |
@wggStartGis
gResource = (ESRI.ArcGIS.ADF.Web.DataSources.IMS.MapResource)gfunc.Resource;
上面我写错了,不是***ArcIMS.MapResource,这样写应该没问题。
楼主你好,我这里有实现了地图对象的选择函数,怎么可以实现选择的高亮显示?代码如下:
public void select(ESRI.ArcGIS.ADF.Web.Geometry.Envelope env)
{
//获取选择对象
IEnumerable func_enum = Map1.GetFunctionalities();
foreach (ESRI.ArcGIS.ADF.Web.DataSources.IGISFunctionality gisfunctionality in func_enum)
{
ESRI.ArcGIS.ADF.Web.DataSources.IGISResource gisresource = gisfunctionality.Resource;
bool supported = gisresource.SupportsFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality));
if (supported)
{
ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality qfunc;
qfunc = (ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)gisresource.CreateFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), null);
string[] lids;
string[] lnames;
qfunc.GetQueryableLayers(null, out lids, out lnames);
ESRI.ArcGIS.ADF.Web.SpatialFilter spatialfilter = new ESRI.ArcGIS.ADF.Web.SpatialFilter();
spatialfilter.ReturnADFGeometries = true;
spatialfilter.MaxRecords = 1000;
spatialfilter.Geometry = env;
System.Data.DataTable datatable1 = qfunc.Query(gisfunctionality.Name, "14", spatialfilter);
}
}
}
#22楼[
楼主]2007-10-09 09:14 |
只需按照文章的后半部分进行就可以了,有什么具体的问题吗?
没看明白.能否讲一下具体的实现步奏?怎样将高亮显示引用到上述函数中去?
#24楼[
楼主]2007-10-10 09:09 |
@wggStartGis
回答你邮件中的问题,ChangeDropDownListServer是在RaiseCallbackEvent服务器端处理中调用的,processCallbackResult.js接受服务器端处理的结果(实际上这里返回值为空),实现异步刷新。
请教各位大侠:
利用arcgis server adf for .net开发时,要实现这样的功能:为地图的某图层添加几个新的数字型字段,然后往这些字段里填充数据,请看如下代码:
//这之前添加了字段"cod1"
ILayer pLayer = pMapServerObj.get_Layer(mapName, pLayerID);
IFeatureLayer pFeatLayer = pLayer as IFeatureLayer;
IFeatureClass pFeatClass = pFeatLayer.FeatureClass;
IFeatureCursor pFeatCursor = pFeatClass.Search(null, true) as IFeatureCursor;
IFeature pFeature = pFeatCursor.NextFeature();
string pFieldName = "cod1";
int pFieldValue = 2222;
int pFldIndex = pFeatClass.FindField(pFieldName);
while (pFeature != null)
{
pFeature.set_Value(pFldIndex, pFieldValue);
pFeature = pFeatCursor.NextFeature();
}
可是在"pFeature.set_Value(pFldIndex, pFieldValue);"却返回了异常信息:com组件调用返回了异常了result
请各位大侠帮忙,十分感谢! ^_^
楼主你好,上面的你说的好象不是我的程序里的内容,请问具体在程序里怎么实现?
我想问一下楼主有没考虑过异步刷新问题.就这一篇文章来说吧,当点击Select时,能查到结果,但引起整个地图窗口的刷新,这会带来不爽的操作体验.EARI自带的查询控件是不刷新整个地图窗口的。我现在在解决这个问题,有时间和楼主多请教.
#28楼[
楼主]2007-10-29 11:11 |
@SueJ
断点到int pFldIndex = pFeatClass.FindField(pFieldName);看看字段序号、类型、长度是否正确,插入属性值的方法没有问题。
@wggStartGis
"ChangeDropDownListServer 这个是哪里调用的呢?"
这个就是在ajax服务器端调用的,具体就是RaiseCallbackEvent方法中。
@wmGISt
这是一个测试的例子,关键在于graphics data source使用,刷新可以通过ajax来刷,可以用ICallbackEventHandler,也可以通过其他ajax库实现。
楼主你好.我用的是arcgis server 9.2 连接地图,用的是arcims 9.2发布的地图,结果我漫游的时候,当前窗体外的内容不能刷新,成白底显示到当前窗体内,怎么刷新也显示不了空白处的地图,我重新发布了几次还是不行,这是什么原因造成的?
#30楼[
楼主]2007-11-16 09:19 |
@wggStartGis
“arcgis server 9.2 连接地图,arcims 9.2发布地图”,是在server开发中用arcims发布的服务吧。检查你arcims output目录中是否已经生成了该空白区域的图片?
楼主我想请问下.我已经实现了,把图放大缩小,高亮,查询某一个标示的层,我现在想把高亮的部分另存为一张图片应该怎么做?或者另存为一个mxd文件.能告诉我吗?我很急.我的QQ是344696163 MSN是 cwk_1106@hotmail.com
邮箱是cwk_1106@163.com
望以后多多指导.
#32楼[
楼主]2007-12-06 14:11 |
@凯凯
我没有找到直接读出graphic layer的接口,不好直接实现了。
if (datatable.Columns[i].DataType == typeof(ESRI.ArcGIS.ADF.Web.Geometry.Geometry))
{
//找到Geometry字段的序号
shpind = i;
break;
}
请教博主我按照例子来做为何总是找不到Geometry字段的序号的序号呢?
#34楼[
楼主]2007-12-07 08:59 |
@哈哈哈
不会吧,就是你数据的Shape*字段,检查一下发布服务的数据源。
spatialfilter.ReturnADFGeometries = false;
改成spatialfilter.ReturnADFGeometries = true;就好了,还有个问题,我每次操作的时候为何第一遍查询结果总是空,第二遍才可以查询出结果呢?
#36楼[
楼主]2007-12-11 00:33 |
@哈哈哈
先重新看看你的数据组织,再检查第一次查询的时候mapfunctionality、mapresource、queryfunctionality是否有正确的属性。
楼主你好,我是用ims发布的地图,下面这个创建 GraphicElement在ims下是没有的 请楼主指教
//创建一个GraphicElement
ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement ge = null;
ge = new ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement(geom, System.Drawing.Color.Yellow);
呵呵 弄了半天不知道是我数据问题还是不支持multipoint 郁闷
//只刷新Graphics Resource
Map1.RefreshResource(gResource.Name);
为何我的程序执行这一步以后查询已经有结果却没有看到地图变化呢?页面重新刷新就可以看到查询的结果高亮显示了
flyingis老师您好:
我正在学习arcgis server,能把你的源代码给我发一份吗?
信箱:xhaosheng@163.com
多谢!
,"gResource = (ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource)gfunc.Resource;" 这句老是出现错误,出错为
无法将类型为“ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapResourceLocal”的对象强制转换为类型“ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource”。
Type 为:arcgis serverlocal
您好!
公司最近要用到ArcGis Server,本人初学Gis方面编程,开发过程中碰到几个问题想请教您一下:
开发过程中我是这样操作的:
1)服务器上通ArcGis Manager的WebApp,在Service的"Capabilities"属性中加入"Mobile Data Access"能力
2)在Mobile Client Application中,MapCache.Url设置成上面的"Mobile Data Access"所对应的URl,未设置MapCache.StoragePath
当调用MapCache.Open时出现异常"Invalid Data"提示.
不知该如何解决?
望指教,谢谢!
#44楼[
楼主]2008-08-13 14:35 |
@啊贵
你好!我还没研究过mobile sdk开发呢:)
能给份源码吗?我已经调试了n遍了,都是显示datatable=null.
我用的图是usa,不是world,有关系吗?如果可以的话,发到我信箱吧,多谢,急用啊.
qingdqpi2002@163.com
还请问斑竹,是否编写过地图中鼠标右键显示定点属性信息的功能呢,如果有,请介绍一下如何实现可以吗,最好有示例和源码
#46楼[
楼主]2008-09-16 15:03 |
@gll
ESRI官方网站上有这个例子的
斑竹,终于代码调试通过,不过新的问题又来了。您举的这个例子是一个图层,如果是多个图层,如何设置查询语句,它们查询的关键字是一样的,只是不同的层。希望能给个例子说明,多谢了。
@gll
这样就可以了:
string[] lids;
string[] lnames;
queryfunc.GetQueryableLayers(null,out lids,out lnames);
ESRI.ArcGIS.ADF.Web.SpatialFilter spf = new ESRI.ArcGIS.ADF.Web.SpatialFilter();
int j = -1;
for (int i = 0; i < lnames.Length;i++ )
{
if (lnames[i]==targetlayername)
{
j = i;
}
}
System.Data.DataTable dt = new DataTable();
dt = queryfunc.Query(null, lids[j], spf);
其中spf是spatialfilter,targetlayername是你通过其他途径获得的需要进行查询的图层名称。
@diligentpig
多谢,我也是用循环解决的这个问题。
还有个问题想请教一下。对于地图动态加载,也就是不同的用户进入时展示的mxd文件不同,或者是同一个mxd文件显示不同的图层,我用网上的例子试过,可是没有什么效果(是在高亮显示的例子基础上实验的,是不是selection有影响呢?),我看了运行之后,只是把我动态要加载的图层添加进去,原来的图层也在Map Contents里面,而且Map1里什么也不显示,不知道问题出在什么地方。有做过这方面的吗?可否给个示例学习一下,急切盼望中!
我想请问一下楼主,我不想把查询出来的区域高亮显示,而是把它放大并在控件中心显示,该怎么做啊
请教博主:
我用的是中文的数据 那个模糊查询总是不起效果
用的句子如下:
spatialfilter.WhereClause = "NAME LIKE '%" + name + "%'" ;
不论去是用全名还是部分名都查询到空值
但是如果把那两个%去掉用全名查是查的到的。。
不解。。。
#52楼[
楼主]2008-12-28 13:08 |
跟踪一下看参数传递中有没有乱码
@Flyingis
whereclause语句是正确的
然后就是查询得到的结果是dt是查询到的datatable
dt.Rows.Count=0
#54楼[
楼主]2008-12-28 13:51 |
其他查询条件结果正确吗?例如"<"。
datatable结果正确,后面就是显示问题,好像没什么需要更改的,再分析一下得到的datatable吧。
支持Flyingis老师多写点as的开发文章,我刚接触as,不过在Flyingis老师的博客里面学到了好多知识。真心的谢谢Flyingis老师。
请看这两个查询语句:
spatialfilter.WhereClause = "NAME LIKE '" + keyWordsOfAttribute + "%' ;
spatialfilter.WhereClause = "OBJECTID > 1000";
使用第一个就不论怎么查都是0个结果
使用第二个就可以返回多个查询结果
datatable里边一切都正常,属性列都得到了。
请相信,其他设置都是正确的。就是对string类型的模糊查询得不到目标,rows.count总是0.。闷。。不知道还有什么地方要设置
我qq 343137714 博主有空指导一下
#57楼[
楼主]2008-12-29 17:36 |
@調皮√又搗蛋
文章的例子代码有吗,怎么发给你?
例子就是like查询。
邮箱huhui1007@126.com
谢博主 赞博主耐心
@Flyingis
我知道问题是哪了
因为我是在做一个网络分析的程序 然后用的是personal Geodatabase
但是在personal Geodatabase中 SQL语句的通配符是 * 和 ?
难怪用%找不到 %适用于shape文件的sql中
通过arcmap才知道 的 可能也是因为我基础比较薄弱 这么弱智的东西都不知道
谢谢Flyingis
问一个跟这个不相关的 我做了个网络分析的数据集
然后加入了route图层之后 地图的范围就不对了
这个要怎么改正过来啊?
谢谢Flyingis的耐心
#60楼[
楼主]2008-12-30 09:45 |
@調皮√又搗蛋
后面的问题在ArcMap中加载时有吗,能否描述详细一点?
你可以做一个试一下
随便做一个网络数据集
系统自带的也可以
然后试下fullextent功能
完了再加上一个路径分析的Route图层 再试一下
新加的Route图层虽然没有数据 但是地图范围很大。似乎是-180--+180
我通过arcmap的tools->add xy data,把ACCESS的地址信息导到layers里,为什么通过这种方式导入的图层数据,用上面的 whereclause方法查不了呢?请指教,谢谢~
#63楼[
楼主]2009-01-09 17:09 |
非物理图层不能IQueryFunctionality.Query()查询。
我用的中文数据,在做属性查询时,输入中文关键字,但是在服务器端RaiseCallbackEvent函数中接收到的参数却是乱码,没有查询结果,请问该怎么解决呢?
Flyingis老师你好:最近都在看你的文章,我是刚接触Arcgis server。在界面上添加层一个层之后很难控制,还有那个command控件工具箱里面没有。请问这个怎么解决?谢谢~
高手您好! 问个问题,
我想通过GIS Server 将输入的经纬度坐标定位到自己发布的地图服务上,并标记显示,这具体应该怎么做呢? 或者有些什么函数可以实现的
期待您的回复。。。
还有一个问题, GIS Server里面将屏幕坐标转换为地理坐标是这样的:
//矩形参数
RectangleEventArgs rectargs = (RectangleEventArgs)args;
//矩形
System.Drawing.Rectangle myrect = rectargs.ScreenExtent;
//矩形左下定点坐标转换成地理坐标
ESRI.ArcGIS.ADF.Web.Geometry.Point minpnt =
ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(myrect.Left, myrect.Bottom, mapctrl.GetTransformationParams(ESRI.ArcGIS.ADF.Web.Geometry.TransformationDirection.ToMap));
//矩形右上定点坐标转换成地理坐标
ESRI.ArcGIS.ADF.Web.Geometry.Point maxpnt = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(myrect.Right, myrect.Top, mapctrl.GetTransformationParams(ESRI.ArcGIS.ADF.Web.Geometry.TransformationDirection.ToMap));
//
ESRI.ArcGIS.ADF.Web.Geometry.Envelope mappoly = new ESRI.ArcGIS.ADF.Web.Geometry.Envelope(minpnt, maxpnt);
它怎么仅仅就能根据屏幕坐标而算出地理坐标呢???是不是mapctrl.GetTransformationParams的功劳?
我反过来,想将地理坐标转换为屏幕坐标类似的该怎么写??
您好,想请教您一个问题,这个问题我和几个网友都遇见了,能否请您在空余时间解答一下吗?按照您教的这个教程,高亮显示调试成功,但是发布网站后这个功能不能用,不是地图不显示就是说超出查询范围,请问这是为什么呢?麻烦了
你好,请教一些问题:
我想用esri提供的Web Mapping Application模板,在上面添加一些我的功能,添加一个VS普通的按钮,在点击事件下写代码,运行时,按这个普通的按钮没有反应的,为什么呢?
另外怎么用arcgis 的toolbar的command按钮当做普通按钮使用呢?
#73楼[
楼主]2009-05-15 13:42 |
@罐头汤
如果该按钮点击后需要和地图进行交互,需要添加toolbar中的一个command。
#74楼[
楼主]2009-05-15 13:42 |
@shouxin
是网络问题吧,贴图没有问题。
#75楼[
楼主]2009-05-15 13:44 |
@pearl
有这种事情吗?现在暂时没时间调试,我准备贴一份最全的adf代码上来供大伙参考了。
初学ArcGis Server遇到问题如下:
无法将类型为“ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapResourceLocal”的对象强制转换为类型“ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource”。
Type 为:arcgis serverlocal
--------------------------------------------------------
请教这个问题如何解决啊,困扰很久了
为什么我的运行到下面这句就会出现异常
ESRI.ArcGIS.ADF.Web.Geometry.Geometry geom = (ESRI.ArcGIS.ADF.Web.Geometry.Geometry)dr[shpind];