offline-editor-js
A prototype JavaScript toolkit for using the ArcGIS API for JavaScript offline. It manages both editing and tiles in an offline mode. It's still a work-in-progress so if you have suggestions open an issue or if you want to make a pull request we welcome your proposed modifications.
IMPORTANT: If you want a full, robust offline solution then you should be using our ArcGIS Runtime SDKs for .NET, WPF, Java, iOS, Android and Qt.
This repo contains the following libraries:
/edit: handles vector features and stores adds, updates and deletes while offline. Resync's edits with server once connection is reestablishedofflineFeaturesManager- Extends and overrides a feature layer.editsStore- Provides static helper methods for working with the offline data store.
/tiles: stores portions of tiled maps client-side and uses the cached tiles when device is offlineofflineTilesEnablerExtends and overrides a tiled map service.
/tpk: lets you work with TPK files.TPKLayer- parses a TPK file and displays it as a tiled map layer.
/utils: contains various helper libraries./samples: sample apps to show how to use different aspects of the offline library capabilities.
#Workflows Supported (v1) The following workflow is currently supported for both both features and tiles:
-
Load web application while online.
-
Once all tiles and features are loaded then programmatically take application offline.
-
Make edits while offline.
-
Return online when you want to resync edits.
Using an application manifest allows you to reload and restart the application while offline. The application manifest let's you store .html, .js, .css and image files locally.
Attachment Support: Attachments are supported with some limitations. See documentation here
#API Doc
##offlineFeaturesManager Extends and overrides a feature layer. This library allows you to extend esri.layers.FeatureLayer objects with offline capability and manage the resync process.
- Click here to see the full API doc for
offlineFeaturesManager
##offlineTilesEnabler Extends and overrides a tiled map service. Provides the ability to customize the extent used to cut the tiles. See the detailed description of basemap.prepareForOffline() in the "How To Use" section below to learn different options.
- Click here to see the full API doc for
offlineTilesEnabler
##TPKLayer
Extends TileMapServiceLayer. You can display TPK files with this library.
- Click here to see the full API doc for
TPKLayer
#How to use
- Learn more about using the
tilelibrary - Learn more about using the
editlibrary - Learn more about using the
tpklibrary
##Setup Instructions
- Fork and clone the repo.
- After cloning from github,
cdinto theoffline-editor-jsfolder - Run
git submodule initandgit submodule update - Try out the apps in the
/samplesfolder.
##Samples
appcache-features.html- shows how to work with the application manifest and features.appcache-tiles.html- shows how to work with the application manifest and map tiles.attachments-editor.html- demonstrates how to work with this library and feature attachments.military-offline.html- shows working with points, lines and polygons locally.tpklayer.html- shows how to work with TPK files.tiles-indexed-db.html- shows how to work with storing tiles locally.Gruntfile.js- a node.js app and its associatedpackage.jsonfile to help with creating an application manifest file.
##Dependencies
-
ArcGIS API for JavaScript (v3.8+)
-
NOTE: browser limitations and technical dependencies. The offline capabilities in this toolkit depend on psuedo-persistent HTML5 capabilities being present in the browser. Go here for a detailed breakdown of the information.
-
Sub-modules (see
/vendordirectory)- offline.js - it allows detection of the online/offline condition and provides events to hook callbacks on when this condition changes
- IndexedDBShim - polyfill to simulate indexed db functionality in browsers/platforms where it is not supported (notably iOS Safari, PhoneGap, Android Chrome)
- IMPORTANT: There is a know issue with IndexedDBShim on Safari. The workaround is to switch from using /dist/IndexedDBShim.min.js to just using IndexedDBShim.js and then modify line #1467 to a more appropriate size that will meet all your storage needs, for example:
var DEFAULT_DB_SIZE = 24 * 1024 * 1024
- IMPORTANT: There is a know issue with IndexedDBShim on Safari. The workaround is to switch from using /dist/IndexedDBShim.min.js to just using IndexedDBShim.js and then modify line #1467 to a more appropriate size that will meet all your storage needs, for example:
- jasmine.async - library to help implementing tests of async functionality (used in tests)
-
Non sub-module based libraries
- FileSaver.js - library to assist with uploading and downloading of files containing tile information.
- grunt-manifest node.js library to assist with the creation of manifest files.
- zip A library for zipping and unzipping files.
- xml2json A library for converting XML to JSON. Seems to handle complex XML.
Resources
Issues
Find a bug or want to request a new feature? Please let us know by submitting an issue.
Contributing
Anyone and everyone is welcome to contribute. Please see our guidelines for contributing.
Licensing
Copyright 2014 Esri
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
A copy of the license is available in the repository's license.txt file.
[](Esri Tags: ArcGIS Web Mapping Editing FeatureServices Offline) [](Esri Language: JavaScript)