Tengo una aplicación móvil que utiliza Phonegap con OpenLayers y Geoserver. Ahora, necesito que la aplicación esté disponible completamente fuera de línea. La cantidad de puntos de datos puede ser muy grande dependiendo del cliente que se cargue en la aplicación, y cada punto tiene propiedades relacionadas. Por lo tanto, tengo que ser capaz de tirar de los datos hasta el teléfono cuando está en línea y luego utilizar los datos locales cuando está fuera de línea. Me gusta la velocidad de GeoJSON y me gustaría utilizarlo si es posible. He creado un archivo GeoJSON que se carga en el mapa como quiero. Ahora, tengo que guardar las ediciones/movimientos en el archivo GeoJSON y estoy atascado. Usar una estrategia de guardado no funciona y por lo que he leído parece que tengo que tener un script de servidor para que funcione.
¿Cómo puedo guardar las modificaciones en mi archivo GeoJSON?
¿O estoy haciendo todo esto mal y necesito usar algo más para los datos fuera de línea con OpenLayers?
0 votos
Creo que el mayor problema es que PhoneGap necesitará algún tipo de servidor con el que hablar. El OpenLayers que se ejecuta en phonegap estará solicitando azulejos de un servidor a través de http. Puede haber algún truco para conseguir un pequeño servidor web que se ejecute junto con phonegap en el dispositivo, pero no estoy seguro. Ese es el mayor problema. Una vez que usted tiene ese servidor en su lugar, su cliente javascript puede hablar con él para hacer esas ediciones (y, posiblemente, para servir a sus puntos al cliente en el primer lugar). Una vez resuelto ese problema estructural, diferentes formatos de archivo (geojson, etc.) podrían funcionar para almacenar los datos.
0 votos
Por no hablar de que, incluso si consigues que el servidor funcione localmente, ¿de dónde obtiene los mosaicos? ¿Tienes un almacén de todos los mosaicos del mapa base que necesitarás?
0 votos
No voy a usar mosaicos para los puntos de datos - he puesto toda la información de los puntos en un archivo geojson y lo estoy mostrando en una capa vectorial. Todavía no he llegado a las capas de base, pero espero utilizar mrsid o geotiffs para ello. En este momento mi obstáculo es guardar las ediciones en mi archivo geojson o utilizar otro método de almacenamiento y manipulación de los datos localmente si hay uno mejor.
1 votos
PhoneGap te da una API para escribir archivos en el sistema de archivos del dispositivo, ¿verdad? Así que puedes hacer lo que quieras con el GeoJSON (o cualquier otro dato de texto) en tu JavaScript y luego simplemente guardar el archivo, ¿verdad? No es necesario envolverlo con la estrategia de guardado de OpenLayers, ¿verdad?
0 votos
Estoy planeando usar la api del archivo para hacer las ediciones, pero me pregunto cómo actualizar un registro en el archivo GeoJSON. ¿Hay algún ejemplo de javascript para actualizar un registro y no reescribir todo el archivo?
0 votos
No veo cómo se puede evitar reescribir el archivo GeoJSON, ya que los registros no son de longitud fija. Por qué te preocupa escribir todo el archivo?
0 votos
En caso de que el teléfono se estrelle o algo en medio de la escritura, no perdemos los datos.
0 votos
Simplemente escriba en un archivo temporal, y cuando la escritura tenga éxito intercambie los nombres de los archivos y borre el antiguo.
0 votos
¿Cuál es el tamaño de su archivo GeoJSON? Una opción es utilizar Localstorage, pero es posible que se encuentre con un límite de tamaño de memoria.