Cómo resolver el problema de que ArcGIS Runtime SDK para Android no puede mostrar anotaciones en chino
Afortunadamente, la visualización Chinese TextSymbol de Graphic encontró rápidamente una manera conveniente de brindarles a todos una explicación preliminar. No quiero hablar demasiado sobre eso, pero les proporcionaré un fragmento de código simple.
1 //Crear geometría de puntos
2 Punto tapPoint = mMapView.toMapPoint(x, y);
3
4 / /Crear símbolo de texto
5 String showLabel = "Jaja, etiquetado chino Punto gráfico";
6 TextSymbol tapTextSymbol = new TextSymbol(28, showLabel, Color.BLUE);
p>
7 tapTextSymbol.setFontFamily("DroidSansFallback.ttf");
8
9 // Pasa geometría de puntos y símbolos de texto para crear gráficos
10 Gráfico tapGraphic = new Graphic(tapPoint, tapTextSymbol);
11
12 // Agrega los gráficos creados a GraphicsLayer
13 gLayer.addGraphic( tapGraphic) ;
Sí, el quid de la cuestión es la especificación de la fuente, es decir, llamar a setFontFamily() para identificar con precisión la fuente correcta. La mayoría de los dispositivos Android vienen con la fuente DroidSansFallback.ttf instalada de forma predeterminada, así que úsala.
Una vez que hayamos completado el procesamiento del gráfico, podemos centrarnos en etiquetar la geodatabase fuera de línea. Después de todo, este formato es lo más destacado de 10.2.X y una adición muy necesaria a las aplicaciones móviles. Después de todo, las posibilidades de conectarse a Internet en la naturaleza son nulas. La persona tan esperada finalmente apareció, pero desafortunadamente todavía era una persona alfabetizada, medio ocultando su rostro con su pipa en sus brazos - ¿anotación china?
Las continuas demandas de los usuarios me obligaron a iniciar una nueva tanda de intentos. Para los mismos datos, ¿por qué se pueden mostrar normalmente el inglés y los números, pero no solo las anotaciones en chino? Primero, use el SQLiteManager proporcionado por Firefox para ver la tabla de elementos. No hay problema con los datos, entonces 80~90 es un problema con la configuración de fuente. La instalación predeterminada de los dispositivos Android es DroidSansFallback.ttf, que puede admitir fuentes chinas. Luego consulte la solución de fuentes en ArcGIS for Server, instale esta fuente y reinicie la máquina, cree mxd y seleccione esta fuente, y luego cree una geodatabase. Se ha demostrado muchas veces que es completamente ineficaz, ni siquiera caracteres confusos. No sé qué hacer.
En septiembre, el equipo de desarrollo de Esri finalmente verificó que las geodatabases fuera de línea descargadas de los servicios de entidades alojados por Portal for ArcGIS muestran el chino correctamente después de múltiples actualizaciones de atributos. Esta noticia finalmente me inspiró a encontrar la diferencia entre los dos. Después de medio día de incansables esfuerzos, la verdad finalmente salió a la luz.
Primero, use SQLiteManager para abrir la geodatabase fuera de línea que creó.
En segundo lugar, el paso más crítico es encontrar GDB_ServiceItems en la lista, abrirlo y hacer doble clic para verlo.
Obviamente, la configuración de FontFamily tanto en ItemInfo como en DrawingInfo es correcta. FontFamily tanto en ItemInfo como en DrawingInfo están configurados correctamente en Droid Sans Fallback, pero en este caso el marcado chino aún no se puede mostrar. Lo que debe hacer es editar el campo ItemInfo y cambiar la familia a DroidSansFallback.ttf como se muestra a continuación:
Cargue la geodatabase nuevamente después de esta modificación y finalmente aparecerán las etiquetas chinas.
Antes del clan:
Después del clan:
Sí, has leído bien, es así de estúpido. Esto equivale a escuchar el nombre de Zhang San y no tener idea de quién es. Tienes que verlo ahora para darte cuenta de que es él. Lo sé, lo sé. Me hace reír hasta la muerte. . . . .
Ahora que las geodatabases fuera de línea creadas por ArcMap pueden mostrar los marcadores chinos correctamente. Por analogía, para una geodatabase fuera de línea obtenida a través de un servicio en línea, solo necesita usar código para 1) conectarse a esta base de datos SQLite, 2) encontrar el campo ItemInfo en la tabla GDB_ServiceItem y 3) modificar el valor de este atributo. Molestaré a todos con la implementación específica. Esta sección termina aquí.