扩展ArcGIS API for Silverlight/WPF 中的TextSymbol支持角度标注

简介: 原文 http://blog.csdn.net/esricd/article/details/7587136 在ArcGIS API for Silverlight/WPF中原版的TextSymbol只能支持文字正向显示。

原文 http://blog.csdn.net/esricd/article/details/7587136

在ArcGIS API for Silverlight/WPF中原版的TextSymbol只能支持文字正向显示。在很多实际项目中,往往需要文字标注有一些角度甚至是沿线标注,下面 我们来看一下原装的TextSymbol和扩展后的TextSymbol的比较和实现思路。

要实现右图的效果只需要从TextSymbol继承一个Symbol并增加Rotation属性,并加载相应的控件模板就行了。

以下是控件模板的代码:

[html] view plain copy
  1. <ControlTemplate xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"   
  2. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
  3. xmlns:esri="http://schemas.esri.com/arcgis/client/2009"  
  4. xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows">  
  5.     <TextBlock Text="{Binding Symbol.Text}"   
  6.                FontFamily="{Binding Symbol.FontFamily}"   
  7.                FontSize="{Binding Symbol.FontSize}"   
  8.                Foreground="{Binding Symbol.Foreground}">  
  9.         <TextBlock.RenderTransform>  
  10.             <CompositeTransform Rotation="{Binding Symbol.TextRotation}"/>  
  11.         </TextBlock.RenderTransform>  
  12.     </TextBlock>  
  13. </ControlTemplate>  

控件模板中需要绑定对象中的文本、字体、字号、颜色、角度五个属性。

对象类的加载XAML代码如下:

[csharp] view plain copy
  1. base.ControlTemplate = XamlReader.Load(LoadXaml("LabelSymbol.xaml")) as ControlTemplate;  
  2.   
  3.   
  4.   
  5.   
  6.   
  7. public static string LoadXaml(string FileName)  
  8.          {  
  9.             string xamlstring;  
  10.             var assemblyName = new AssemblyName(Assembly.GetExecutingAssembly().FullName);  
  11.             string CurrentAssemblyName = assemblyName.Name;  
  12.             string resourceName = string.Format("{0};component{1}{2}", CurrentAssemblyName, "/", FileName);  
  13.             Uri uri = new Uri(resourceName, UriKind.Relative);  
  14.             StreamResourceInfo streamResourceInfo = Application.GetResourceStream(uri);  
  15.             using (Stream resourceStream = streamResourceInfo.Stream)  
  16.             {  
  17.                 using (StreamReader streamReader = new StreamReader(resourceStream))  
  18.                 {  
  19.                     xamlstring = streamReader.ReadToEnd();  
  20.                 }  
  21.             }  
  22.             return xamlstring;  
  23.         }  

对象类中再定义对应的五个属性就能实现有倾斜角度的标注了。最终实现效果如图:

 

 

后话:

这个扩展的Symbol仅仅是对文字符号增加旋转角度,其中还有不完善的地方,在线路转角的地方标注的时候往往会与线交叉,如:

如果再深入完善一下,稍做修改可以将标注做成真正的沿线标注,如:

沿线文本在网上有大量的资料,在这里就不再啰嗦了,希望本文对各位ArcGIS API for Silverlight开发人员有帮助。

目录
相关文章
|
4月前
|
Java API Spring
打造未来电商新引擎:揭秘Java可扩展API设计,让支付与物流灵活如丝,引领电商时代潮流!
【8月更文挑战第30天】本文通过电商平台案例,探讨了如何设计可扩展的Java API。首先定义支付和物流服务的接口与抽象类,然后实现具体服务,接着引入工厂模式或依赖注入管理服务实例,最后通过配置实现灵活扩展。这种设计确保了应用架构的灵活性和长期稳定性。
63 3
|
1月前
|
缓存 负载均衡 安全
后端开发的艺术:构建高效、可扩展的API
在现代软件开发中,后端开发扮演着至关重要的角色。它不仅负责处理数据存储、业务逻辑和安全性,还需要提供高效、可扩展的API供前端和其他服务使用。本文将深入探讨后端开发的关键概念和技术,帮助读者了解如何构建高效、可扩展的API,并提供一些实用的建议和最佳实践。
|
27天前
|
Web App开发 人工智能 自然语言处理
WebChat:开源的网页内容增强问答 AI 助手,基于 Chrome 扩展的最佳实践开发,支持自定义 API 和本地大模型
WebChat 是一个基于 Chrome 扩展开发的 AI 助手,能够帮助用户理解和分析当前网页的内容,支持自定义 API 和本地大模型。
63 0
|
2月前
|
监控 安全 API
Docker + .NET API:简化部署和扩展
Docker + .NET API:简化部署和扩展
40 0
|
2月前
|
监控 安全 API
最完美的扩展Docker + .NET API:简化部署和扩展
最完美的扩展Docker + .NET API:简化部署和扩展
91 0
|
4月前
|
XML JSON API
RESTful API设计最佳实践:构建高效、可扩展的接口
【8月更文挑战第17天】RESTful API设计是一个涉及多方面因素的复杂过程。通过遵循上述最佳实践,开发者可以构建出更加高效、可扩展、易于维护的API。然而,值得注意的是,最佳实践并非一成不变,随着技术的发展和业务需求的变化,可能需要不断调整和优化API设计。因此,保持对新技术和最佳实践的关注,是成为一名优秀API设计师的关键。
|
4月前
|
存储 缓存 运维
平稳扩展:可支持RevenueCat每日12亿次API请求的缓存
平稳扩展:可支持RevenueCat每日12亿次API请求的缓存
49 1
|
4月前
|
Java 数据库连接 缓存
Hibernate性能调优:五大秘籍,让应用效能飙升,告别慢如蜗牛的加载,体验丝滑般流畅!
【8月更文挑战第31天】本文深入探讨了提升Hibernate应用性能的五大技巧,包括选择合适的缓存策略、优化查询语句、合理使用Eager与Lazy加载、批量操作与事务管理以及利用索引和数据库优化。通过正确配置多级缓存、分页查询、延迟加载、批量处理及合理创建索引,能够显著提高应用响应速度与吞吐量,改善用户体验。这些技巧需根据具体应用场景灵活调整,以实现最佳性能优化效果。
212 0
|
4月前
|
缓存 监控 测试技术
探索后端开发之巅:构建高效、可扩展的API服务
【8月更文挑战第29天】在数字化时代的浪潮中,后端开发如同搭建一座桥梁,连接用户与数据的无限可能。本文将引导你理解后端开发的精髓,从基础架构到高级优化技巧,一步步揭示如何构建一个既高效又可扩展的API服务。通过深入浅出的方式,我们将一起探索后端世界的奥秘,让你的开发之路更加顺畅。
|
5月前
|
消息中间件 API 数据库
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。