今天在做一个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);

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

 <esri:MarkerSymbol x:Key="Medium" OffsetX="30" OffsetY="64">
<esri:MarkerSymbol.ControlTemplate>
<ControlTemplate>
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="MouseOver">
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="Unselected" />
<VisualState x:Name="Selected">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="ImageNormal">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="ImageSelected">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Image Name="ImageNormal" Source="Resoues/medium_policecar.png" Visibility="Visible"/>
<Image Name="ImageSelected" Source="Resoues/medium_policecar_hit.png" Visibility="Hidden"/>
</Grid>
</ControlTemplate>
</esri:MarkerSymbol.ControlTemplate>
</esri:MarkerSymbol>

  这段代码结构也非常清楚,就是定义当前图层的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

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

ArcGIS 添加 MarkerSymbol 弹出“图形符号无法序列化为 JSON”错误的更多相关文章

  1. ArcGIS Runtime SDK for WPF之SimpleRenderer无法添加、报错“图形符号无法序列化为 JSON”

    ArcGIS Runtime SDK for WPF之SimpleRenderer无法添加.报错“图形符号无法序列化为 JSON” 在上一篇博文中如果在 esri:Map 里面是否设置了的UseAcc ...

  2. ArcGIS Wpf MarkerSymbol 图形符号无法序列化为 JSON

    [问题贴,尚不知如何解决] 在GraphicsLayer中添加一个点,使用自定义模板渲染该点,在Vs2012设计界面可以看到,但运行时出现异常 代码如下: <esri:Graphic x:Nam ...

  3. 改善用户体验之wordpress添加图片弹出层效果 (插件 FancyBox)

    下面说说在改善用户体验之wordpress添加图片弹出层效果.效果图如下:   像这篇文章如何在百度搜索结果中显示网站站点logo? 文章内有添加图片,没加插件之前用户点击图片时,是直接_black打 ...

  4. C++(MFC)踩坑之旅 ------- 新建项目弹出“发生一个或多个错误”

    结束隔离,回公司上班,把在家办公的程序考回公司的电脑,结果出错了,每当我新建项目时,都会弹出"发生一个或多个错误",点确定后回到新建项目的设置上面,折腾了两天时间才解决,以下是我的 ...

  5. jQuery表单验证以及将表单序列化为json对象小练习

    jquery表单验证(非实时验证),同时,将表单序列化为json对象提交表单. <!DOCTYPE html> <html lang="en"> <h ...

  6. JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象

    JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对 ...

  7. JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象 。

    JavaScriptSerializer 类由异步通信层内部使用,用于序列化和反序列化在浏览器和 Web 服务器之间传递的数据.说白了就是能够直接将一个C#对象传送到前台页面成为javascript对 ...

  8. LINQ查询返回DataTable类型[轉]與将DataTable序列化为Json格式【轉】

    (原文地址:http://xuzhihong1987.blog.163.com/blog/static/26731587201101853740294/) LINQ查询返回DataTable类型 在使 ...

  9. Jquery 将表单序列化为Json对象

    大家知道Jquery中有serialize方法,可以将表单序列化为一个“&”连接的字符串,但却没有提供序列化为Json的方法.不过,我们可以写一个插件实现. 我在网上看到有人用替换的方法,先用 ...

随机推荐

  1. Clickhouse副本表以及分布式表简单实践

    集群配置: 192.168.0.106 node3 192.168.0.101 node2 192.168.0.103 node1 zookeeper配置忽略,自行实践! node1配置: <? ...

  2. 【转】如何使用分区助手完美迁移系统到SSD固态硬盘?

    自从SSD固态硬盘出世以来,一直都被持续关注着,SSD的性能优势让无数用户起了将操作系统迁移到SSD的心思,直接后果就是让无数机械硬盘为止黯然退场,很多软件都可以做到系统迁移,然而,被完美迁移的系统却 ...

  3. MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK

    安装好MyEclipse之后,在MyEclipse中开发项目时,默认使用的是MyEclipse是自带的JDK,如下图所示: 如果我们需要使用自己安装好的JDK,那么就需要在MyEclipse中重新设置 ...

  4. tomcat (选号)公司tomcat无页面解决

    问:我现在的有的解决方法就是把上一次war包下下载下来,在重启tomcat 答:那不行,更新war包就没有意义了,你都没排查故障  就直接说war包少东西?主页都没有..还能少主页也不是404.war ...

  5. apache反向代理出现502调整

    1.问题描述:项目上线后,会在接口调用时客户端出现502异常,而服务端则对该此请求作出处理. 2.问题原因:经过排查后得知是由于请求并发量大,造成超过请求超时间,但是apache中队列已经加载到请求信 ...

  6. Visual Studio 2013 编译 64 位 Python 的 C 扩展 (使用 PyObject 包装)

    对于 32 位 Python 的 C 扩展,以前用过 mingW32 编译, 但是 mingW32 不支持 64 位 Python 的 C 扩展编译,详情可见 stackoverflow,这位前辈的大 ...

  7. Linux 分卷压缩

    例如,要将大文件夹 PYNQ 分卷压缩成 1G 的单元大小,如下命令(类似的可以指定 tar 的参数为 czf 而生产 .tar.gz 格式的压缩包:可以指定分卷大小例如 500M 等),压缩完成后, ...

  8. Win7 64位系统,IE11,如何让IE的Tab强制运行64位内核?

    有些人在使用TerraExplorer Pro 7版本进行web二次开发的时候,常会遇到下面截图中这样的问题, 这个问题主要是因为安装的TerraExplorer Pro 7 版本是64位的,而模型运 ...

  9. Android root检测方法小结

    转载目的,之前主要应用这里的原理解决了,手机被某个APP检测为root过的手机的问题,记录后续可能参考. 出于安全原因,我们的应用程序不建议在已经root的设备上运行,所以需要检测是否设备已经root ...

  10. Git-命令行-使用 Tag 标记你的代码

    前言 正文开始之前,我想我们需要弄明白几个问题: 1.tag 是什么? 2.使用tag 的好处? 3.tag 和 branch 的区别以及使用场景? tag 是什么? tag , 翻译过来是标签的意思 ...