博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ArcGIS 添加 MarkerSymbol 弹出“图形符号无法序列化为 JSON”错误
阅读量:4972 次
发布时间:2019-06-12

本文共 3607 字,大约阅读时间需要 12 分钟。

  今天在做一个demo,向自定义图层中添加MarkerSymbol的时候,弹出“图形符号无法序列化为 JSON”错误,之前都没有出现过这个问题,我们首先来看一看我是怎样去添加图层,然后向图层中添加Graphic的,这个比较简单,直接贴出相关代码。

       GraphicsLayer carLayer = new GraphicsLayer();            carLayer.ID = "CarLayer";            carLayer.Renderer = new SimpleRenderer()            {                Symbol = this.Resources["Medium"] as ESRI.ArcGIS.Client.Symbols.MarkerSymbol                            };                        Graphic carGraphic = new Graphic();            carGraphic.Geometry = new ESRI.ArcGIS.Client.Geometry.MapPoint(Convert.ToDouble("12697297.9815139"), Convert.ToDouble("2577264.46557406"), new ESRI.ArcGIS.Client.Geometry.SpatialReference(102100));              carLayer.Graphics.Add(carGraphic);            MyMap.Layers.Add(carLayer);

  再看看我们前台定义的这个资源。

  这段代码结构也非常清楚,就是定义当前图层的Symbol,点击的时候会更换成另外的一张图片,以前在每一次使用的时候都不会出现什么问题,那么出现了问题首先看看是怎样一步一步去找到问题的?

      既然图层使用MarkerSymbol不行,那换一种试一下?换成TextSymbol试试看,更改代码如下:      

carLayer.Renderer = new SimpleRenderer()            {                    Symbol =new ESRI.ArcGIS.Client.Symbols.TextSymbol()                   {                       Text = "CAR",                       FontSize = 48,                       Foreground = Brushes.Red                     }            };

  查看运行结果,成功! 

  那么是否是文件的路径不对,找不到图片的路径?

  仔细看图片的属性:通过VS2012的视图--》属性窗口来查看属性,无论是Source还是其它属性都是正常的,那么路径还是不对吗?干脆直接在代码里面写这个MarkerSymbol,然后将路径写死,这样总不会出现问题了吧?  

       GraphicsLayer carLayer = new GraphicsLayer();            carLayer.ID = "CarLayer";             ESRI.ArcGIS.Client.Symbols.MarkerSymbol markSymbol = new ESRI.ArcGIS.Client.Symbols.MarkerSymbol();                    ControlTemplate ct = new ControlTemplate();            FrameworkElementFactory rootFactory = new FrameworkElementFactory(typeof(Grid));            FrameworkElementFactory imageFactory = new FrameworkElementFactory(typeof(Image));            imageFactory.SetValue(Image.StretchProperty, Stretch.Uniform);            imageFactory.SetValue(Image.SourceProperty, new BitmapImage(new Uri(@"C:\Users\yebo\Desktop\ResizeInfoWindow\ResizeInfoWindow\ResizeInfoWindowEx\Resoues\medium_policecar_hit.png", UriKind.Absolute)));            rootFactory.AppendChild(imageFactory);            ct.VisualTree = rootFactory;            markSymbol.ControlTemplate = ct;                   carLayer.Renderer = new SimpleRenderer()            {                                Symbol = markSymbol                               };                        Graphic carGraphic = new Graphic();            carGraphic.Geometry = new ESRI.ArcGIS.Client.Geometry.MapPoint(Convert.ToDouble("12697297.9815139"), Convert.ToDouble("2577264.46557406"), new ESRI.ArcGIS.Client.Geometry.SpatialReference(102100));                        carLayer.Graphics.Add(carGraphic);            MyMap.Layers.Add(carLayer);

  编译程序,继续报错。      

  继续寻找问题,路径不会有问题,MarkerSymbol的样式也没有问题?那么地图有问题吗?

      最后在 <esri:Map x:Name="MyMap" UseAcceleratedDisplay="True">中发现了这个属性,UseAcceleratedDisplay到底是做什么用的?去掉以后,再次运行,一切正常,同时如果将该属性改为false,代码也都运行正常,问题找到了,那么后面的思考不能少?这样才能够真正去掌握一门知识!      

   看到下面的几篇帖子介绍的很不错,就当去了解ArcGIS的知识,感兴趣的可以去认认真真看一下,然后去思考去总结。

   http://blog.csdn.net/arcgis_all/article/details/8215144

 http://blog.csdn.net/arcgis_all/article/details/40400331

   今天就将这些,以后再进一步去完善这些内容。

转载于:https://www.cnblogs.com/seekdream/p/6074959.html

你可能感兴趣的文章
codeforces-1131 (div2)
查看>>
虚拟机创建
查看>>
$Linux vi/vim编辑器常用命令与用法总结 (Markdown编辑版)
查看>>
mvc3之入门程序 第二讲
查看>>
信息安全学习笔记--XSS
查看>>
ascii
查看>>
[转]Google Guava官方教程(中文版)
查看>>
项目记事【Hibernate-1】:调用 saveOrUpdate() 方法出错
查看>>
ios系统层次
查看>>
PowerBuilder 数据窗口实例三(用户信息管理-FreeFrom风格)
查看>>
不要62
查看>>
UGUI UI层阻挡射线
查看>>
UVA 10827 Maximum sum on a torus 最大矩阵和
查看>>
python 语言特性
查看>>
Spring MVC: Some notes
查看>>
乐乐开心吗
查看>>
关于XE10下Indy发送字符串编码的问题
查看>>
学习快速排序和二分查找算法
查看>>
老虞学GoLang笔记-变量声明与初始化
查看>>
C++读取系统当前时间 分类: C/C++ 2015...
查看>>