今天在做一个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. ndim 与 shape的区别

    [[ ., ., .], [ ., ., .]] 在上面这个例子中,数组的ndim为2(它有两个维度(简单的辨别两层方括号)). 第一个维度的长度为2,也就是有两个子数组 第二个维度的长度为3,也就是 ...

  2. 【转】解决在Android设备播放音频与其他应用重音的问题,并监听耳机的控制按钮

    概述 在安卓开发中免不了需要播放一点音乐了,音频了.但是这时候有别的应用正在播放,这时候就会出现重音的现象,完全影响用户体验,我们的项目就遇上了这样的尴尬,然后查找了一些文档,记录一下: 管理音频焦点 ...

  3. 【html】使ifram搭建的项目,新页面跳出框架

    方法一: <a href="<?php echo $baseUrl . '#/study/order';?>" target="_parent" ...

  4. 03 python 初学(字符格式化输出)

    #_author: lily #_date: 2018/12/16 name = input("your name: ") age = input("your age: ...

  5. Spring Security(十一):4. Samples and Guides (Start Here)

    If you are looking to get started with Spring Security, the best place to start is our Sample Applic ...

  6. JAVA Exception

    博客背景音乐设置 晴天博客(酷)

  7. redis学习(九)——数据持久化

    一.概述 Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis重启后,所有存储在内存中的数据将会丢失,在很多情况下是无法容忍这样的事情的.所以,我们需要将内存中的数据持久 ...

  8. postman简介及基本用法

    从分层测试角度来说,接口测试是相对来说性价比最高的,且作为功能测试进阶的必备技能,接口测试值得大家都去学习掌握. 工欲善其事,必先利其器,好的工具能更好的帮助工程师更高效率的完成工作. 常见的接口测试 ...

  9. dubbo源码阅读

    http://seekheap.com/posts/dubbo/dubbo-src-01-overview-and-debug-environment.html 先占坑

  10. FineUIMvc随笔(2)怎样在控件中嵌套 HTML

    声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 用户需求 有网友在<FineUI总群1>问这么一个问题:怎么把 HTML 嵌套在控件中? 这是很多刚学习 FineU ...