ArcIMS 9.2 ADF Bug
前段时间一直在研究利用ArcIMS9.2 ADF来进行开发,其中在制作专题图部分一直遇到一个问题就是需要使用ChartSymbol来绘制专题图,必须给ChartValue设置了Value后才可以显示出图形,而图形不会依据设定的Field字段来决定图形的大小,现在可以确定这是一个Bug。
由于代码经过了加密,所以我们只能解析出加密过的代码,但是我们依旧可以清晰地看到整个实现的思路。最后绘制图形的时候,都需要将Renderer的派生类转换成ArcXml格式的消息。
通过被加密后类ci的方法public static XmlElement a(ESRI.ArcGIS.ADF.IMS.Display.Renderer.Renderer A_0)将这个过程实现。当Renderer是ValueMapLabelRenderer的时候会使用private static XmlElement a(ValueMapLabelRenderer A_0)来转换,然后使用private static XmlElement a(LabelValueRange A_0)来转换LabelValueRange,显然需要使用public static XmlElement a(ESRI.ArcGIS.ADF.IMS.Display.Symbol.Symbol A_0)和private static XmlElement a(ChartSymbol A_0)来转换ChartSymbol的Symbol。
其bug就发生在最后的转换节点上,因为不管使用什么样的配置,转换都会根据依据Color、Field、MinValue、MaxValue、Value的顺序来实现的。而.Net对Value这个变量赋予了0的初始值,如果不设Value或者MinValue、MaxValue有一个设为0,则Value被赋予0,如果设Value为非0的值,那样所有的图形就一样了。
Label_028B://转换Value的
element2.SetAttribute("value", value2.Value.ToString());
element.AppendChild(element2);
num9 = 2;
goto Label_01EF;
从实现的角度来看,ESRI对ArcIMS的封装采用这样的模式并不是很好,因为ESRI无非就是想采用这样的类化的参数设置模式来重用原有的资源,就是在设置参数这个方面完全没有必要这样做。
我也一直在考虑如何改进这种方式,当然如果要使用的话,除非ESRI提供更新的设计思路,并改进现有的为问题,否则就是考虑如何自己开发了,从这些控件看,真正想将它们开发下来,就是一个人是很难的,真的,特别是脚本的工作量也是相当大的。看来也就是避开这些问题了。
浙公网安备 33010602011771号