自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. 【NOIP 2015】斗地主

    题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的 A 到 K 加上大小王的共 54 张牌来进行的扑克牌游戏.在斗地主中,牌的大小关 系根据牌的数码表示如下: 3 ...

  2. Boost lockfree deque 生产者与消费者多对多线程应用

    boost库中有一个boost::lockfree::queue类型的 队列,对于一般的需要队列的程序,其效率都算不错的了,下面使用一个用例来说明. 程序是一个典型的生产者与消费者的关系,都可以使用多 ...

  3. 使用Tensorflow object detection API——训练模型(Window10系统)

    [数据标注处理] 1.先将下载好的图片训练数据放在models-master/research/images文件夹下,并分别为训练数据和测试数据创建train.test两个文件夹.文件夹目录如下 2. ...

  4. http 与 TCP 与 socket 定义,区别

    http://blog.csdn.net/jenminzhang/article/details/47017741 http协议:处于互联网协议的应用层,角色是规定数据传输的格式,http是建立在so ...

  5. Python判断字符串编码以及编码的转换

    转自:http://www.cnblogs.com/zhanhg/p/4392089.html Python判断字符串编码以及编码的转换 判断字符串编码: 使用 chardet 可以很方便的实现字符串 ...

  6. Avito Cool Challenge 2018:D. Maximum Distance

    D. Maximum Distance 题目链接:https://codeforces.com/contest/1081/problem/D 题意: 给出一个连通图以及一些特殊点,现在定义cost(u ...

  7. Web开发中FormData对象的使用

    参考: FormData 对象的使用 - Web API 接口 | MDN

  8. php 二维数组自定义排序

    eg1:只根据一个规则进行排序,比如我下面的数组是一组满减折扣的信息,我要按照满减的金额从小到大排序 代码: <?php $arr =[ ["amount"=> 60, ...

  9. spring配置文件中util:properties和context:property-placeholder

    util:properties和context:property-placeholder标签都可以用来获取外部配置文件中的内容 1.util:properties 它是以声明bean方式来使用,创建了 ...

  10. jndi理解

    java中很多这些接口规范,jndi就是其中一个,而下面那些包就是jndi接口的提供商程序实现包,他们都是遵循jndi规范的. 主要接口功能是:添加命名与对象的映射到jndi树中,客户能快速查找并使用 ...