自10.2版本开始,我就一直被ArcGIS Runtime SDK for Android的中文标注无限困扰。无论是驻留于内存中的Graphic 的文本符号TextSymbol,还是新增的离线geodatabase中的中文标注,只要与中文扯上了干系,就无法显示。每次接到用户的电话,我就只能非常官方的仓促应对,文档中明确说明了这一限制啊,确实无能为力;建议您对标注层创建离线缓存吧;您的Android开发经验这么丰富,也可以自行绘制文本来实现;等等等等。其实,自己也觉得Esri的这种疏漏太对不起广大的中国用户了。

好在对于Graphic的中文TextSymbol的显示很快就找到了便捷的方法,也算是有了初步的交代。不多废话,直接奉上简单的代码片段吧。

 //创建点几何
Point tapPoint = mMapView.toMapPoint(x, y); //创建文本符号
String showLabel = "哈哈,中文标注图形点";
TextSymbol tapTextSymbol = new TextSymbol(28, showLabel, Color.BLUE);
tapTextSymbol.setFontFamily("DroidSansFallback.ttf"); //传入点几何和文本符号以构建Graphic
Graphic tapGraphic = new Graphic(tapPoint, tapTextSymbol); //将创建的Graphic添加到GraphicsLayer上
gLayer.addGraphic(tapGraphic);

是的,问题的关键在于字体的指定,即,调用setFontFamily()准确识别到正确的字体。大多数的Android设备上都会默认安装DroidSansFallback.ttf这一字体,拿来即可。

Graphic的问题解决了,接下来呢,就该关注离线geodatabase的标注了,毕竟,这一格式是10.2.X的最大亮点,也是移动端应用所亟需的。毕竟,野外作业中能够顺利联网的可能性为零。千呼万唤终露面,可惜却还文绉绉的抱起了琵琶——中文标注呢?中文标注呢?

一个接一个的用户需求迫着我开始了新一轮的尝试。对于同一数据,为什么英文和数字都可以正常显示,而独独中文标注无法显示呢?首先,利用Firefox提供的SQLiteManager对要素Table进行查看,数据没问题;那么80%~90%就是字体设置的问题了。Android设备默认安装了DroidSansFallback.ttf这一可支持中文的字体,那么参照ArcGIS for Server对字体的解决办法,安装此字体并重启机器,创建mxd并选择这一字体,而后创建geodatabase。多次三番的折腾证明:完全无效啊,甚至连乱码都没有。着实无语。

9月份的时候,Esri Developer小组终于验证得出,对Portal for ArcGIS 托管的要素服务经过若干属性更新后下载得到的离线geodatabase是可以正确显示中文的。这一消息终于再次激发了我的斗志,那就找两者的差别呗。经过半天的不懈努力,真相揭露。

首先,利用SQLiteManager打开所创建的离线geodatabase。

其次,最关键的步骤就是找到列表中GDB_ServiceItems打开并双击查看

很明显地,不管是ItemInfo还是DrawingInfo中的FontFamily都正确设置为Droid Sans Fallback。但是,这种情况下,中文标注仍然是无法显示的。您需要做的则是编辑ItemInfo字段,将其中的family修改为DroidSansFallback.ttf,如下:

再次加载这一修改后的geodatabase,中文标注终于出现了。

family修改前:

family修改后:

是的,你没看错,就是这么傻。就相当于你听到张三的名字,完全不知道是谁,必须得见到本尊,才清楚,原来是他啊,我认识,我认识,呵呵,呵呵。。。。。

既然ArcMap创建的离线geodatabase可以正确显示中文标注了。那么类比的,对于由在线服务获取的离线geodatabase,只需要代码实现1)连接这一SQLite数据库,2)找到GDB_ServiceItem表的ItemInfo字段,3)修改这一属性值。具体实现就劳驾大家了。这一小章节就到此吧。

 小报,小报

根据Esri非官方渠道,明年3月份推出的Quarz版本将从根本上解决这一问题。小编再也不用为应用中的中文标注担心了。

如何解决ArcGIS Runtime SDK for Android中文标注无法显示的问题的更多相关文章

  1. 《ArcGIS Runtime SDK for Android开发笔记》——问题集:如何解决ArcGIS Runtime SDK for Android中文标注无法显示的问题(转载)

    Geodatabase中中文标注编码乱码一直是一个比较头疼的问题之前也不知道问题出在哪里?在百度后发现园子里的zssai已经对这个问题原因做了一个详细说明.这里将原文引用如下: 说明:此文转载自htt ...

  2. 《ArcGIS Runtime SDK for Android开发笔记》

    开发笔记之基础教程 ArcGIS Runtime SDK for Android 各版本下载地址 <ArcGIS Runtime SDK for Android开发笔记>——(1).And ...

  3. 《ArcGIS Runtime SDK for Android开发笔记》——问题集:使用TextSymbol做标注显示乱码

    1.前言 在14年的时候写过一篇博客关于ArcGIS for Android 10.1.1API 中文标注导致程序异常崩溃问题,但是当时并没有很好的解决这样一个问题,也并没有深入研究分析这样的一个异常 ...

  4. 《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)

    1.前言 在上一篇的内容里我们介绍了基于Android Studio构建ArcGIS Runtime SDK for Android开发环境的基本流程,流程中我们采用的是基于Gradle的构建方式,在 ...

  5. 《ArcGIS Runtime SDK for Android开发笔记》——(7)、示例代码arcgis-runtime-samples-android的使用

    1.前言 学习ArcGIS Runtime SDK开发,其实最推荐的学习方式是直接看官方的教程.示例代码和帮助文档,因为官方的示例一般来说都是目前技术最新,也是最详尽的.对于ArcGIS Runtim ...

  6. 《ArcGIS Runtime SDK for Android开发笔记》——翻译:ArcGIS Runtime SDK for Android 10.2.7发布

    ArcGIS Runtime SDK for Android v10.2.7 released by Dan O'Neill on October 1, 2015(发布时间:2015年10月1日) W ...

  7. ArcGIS Runtime SDK for Android 10.2.5新开发平台安装配置指南

    ArcGIS Runtime SDK for Android 10.2.5版本在年前发布,其中一个重大的变化是:新版本使用了新的开发环境,在10.2.5版本中Esri使用了官方提供的新的Android ...

  8. 安装 ArcGIS Runtime SDK for Android

    ArcGIS for Android 开发:Android 平台搭建 - liyong20080101的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/liyong ...

  9. 点聚合功能---基于ARCGIS RUNTIME SDK FOR ANDROID

    一直不更新博客的原因,如果一定要找一个,那就是忙,或者说懒癌犯了. 基于ArcGIS RunTime SDK for Android的点聚合功能,本来是我之前做过的一个系统里面的一个小部分,今天抽出一 ...

随机推荐

  1. 5分钟构建无服务器敏感词过滤后端系统(基于FunctionGraph)

    摘要:开发者通过函数工作流,无需配置和管理服务器,以无服务器的方式构建应用,便能开发出一个弹性高可用的后端系统.托管函数具备以毫秒级弹性伸缩.免运维.高可靠的方式运行,极大地提高了开发和运维效率,减小 ...

  2. webpack 的使用教程

    webpack 的使用教程 今天接触webpack,就着官网上的教程一步一步的玩,把自己的理解总结以便和大家交流 webpack的主要特点 1. 可以把js,css,image,甚至文本当成模块来处理 ...

  3. 爬虫框架urllib 之(三) --- urllib模块

    Mac本 需导入ssl import ssl ssl._create_default_https_context = ssl._create_unverified_context  urllib.re ...

  4. 07-图5 Saving James Bond - Hard Version (30 分)

    This time let us consider the situation in the movie "Live and Let Die" in which James Bon ...

  5. shell编程中

    1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 -f文件,f的全拼为file ...

  6. django ORM 连表查询

    db_index=True  如果设置该字段就可以设置索引 auto_now_add  代表设置创建时候的时间 auto_now   每次更新数据记录时会更新该字段 to_field 设置要关联表的字 ...

  7. 复制虚拟机出现”适配器 的mac地址在保留地址范围内‘’

    首先我的虚拟机是复制出来的,选择我已经移到,但是结果会出现了以下情况,导致了我无法ping 通,先看下提示: 使用:ipconfig –all 命令查寻,果然再现有打开的虚拟机中,存在两个mac地址相 ...

  8. STL之vector(不定长数组)

    vector就是一个不定长数组,另外它把一些常用操作“封装”在了vector类型内部.例如,若a是一个vector,可以用a.size()读取它的大小,a.resize()改变大小,a.push_ba ...

  9. mapreduce求平均数

    1. 现有某电商关于商品点击情况的数据文件,表名为goods_click,包含两个字段(商品分类,商品点击次数),分隔符“     ”,由于数据很大,所以为了方便统计我们只截取它的一部分数据,内容如下 ...

  10. vue首次赋值不触发watch(deep immediate handler)

    deep:默认值是 false,代表是否深度监听.immediate:true代表如果在 wacth 里声明了之后,就会立即先去执行里面的handler方法,如果为 false就跟我们以前的效果一样, ...