Skip to main content

How to import georeferenced BMP, JPG, or PDF


Software you may need

GRASS
http://grass.osgeo.org/

QGIS
http://www.qgis.org/en/site/

QTiles
https://hub.qgis.org/projects/qtiles

Maptiler
http://www.maptiler.org/

Mobile Atlas Creator
http://mobac.sourceforge.net/

Create georeferenced image of your map

Maptiler, supports many formats, including TIFF/GeoTIFF, MrSID, ECW, JPEG2000, Erdas HFA, NOAA BSB, and JPEG. Most GIS programs will have the option to export your raster data in at least one of these formats.

2 Created tiled map with Maptiler

Select “Google Maps compatible (Spherical Mercator)”. This is the projection expected by Mobile Atlas Creator. Next you need to select the spatial reference system of your input layer. The output is a set of folders, which contain the map tiles, and a doc.kml file.

3 Convert the tiled map in the required format
One of the folders in the MOBAC program folder is the ‘mapsources’ 
MOBAC looks in this directory for custom map sources. These are simple xml files that define the location of the tiled map, and some other parameters which tell MOBAC how to process the map. The readme file in the MOBAC program folder provides a link to an example sources xml file (which might differ depending on the MOBAC version you are using).



4 Turn on offline maps in Andmap

copy SQLite file to your device, \andmap\offlinemaps folder

go to setting, select User defined maps


turn on


switch map



Popular posts from this blog

useRef in store.subscribe, re-render

const Dashboard : React . FC = () => { const store = createStore ( countReducer ) const divRef = useRef < HTMLDivElement >( null ); store . subscribe (() => { const state = store . getState () if ( divRef . current ) divRef . current . innerText = `this is cool, another listener: ${ state . count } ` ; }) return ( ... < button onClick = { () => store . dispatch ({ type : ActionType . INCREMENT }) } > add </ button > < button onClick = { () => store . dispatch ({ type : ActionType . DECREMENT }) } > minus </ button > < div ref = { divRef } > 0 </ div > ... ) } Re-Render: const count = useRef ( 0 ) ; useEffect ( ( ) => { count . current = count . current + 1 ; } ) ; return ( < > < input type = " text " value = { inputValue } onChange = { ( e ) => setInputValue ( e . target . value ) } /...

setup prettier / eslint for create-react-app typescript

1. npm i -D prettier  2. create .prettierrc.json { "trailingComma": "all", "tabWidth": 2, "singleQuote": true, "jsxBracketSameLine": true,    "semi": false } 3. npm i -D eslint-config-prettier 4. in package.json, add this: "eslintConfig": { "extends": [ "react-app", "react-app/jest", "prettier" ] }, 5. install extension in VS Code Prettier extension

API layer in React with Axios

  Why You Need an API Layer  https://semaphoreci.com/blog/api-layer-react 3. Easily handle request cancellation Thanks to the centralized nature of the API layer, you can effortlessly add custom features like cancellation to all API request definitions. Your frontend application performs API calls asynchronously. This means that when calling the same API twice in a short amount of time, the response to the first request may arrive after the response to the second one. Because of this, your application may render inconsistent data. A popular approach to deal with this problem is the debounce technique. The idea behind debounce is to wait a certain amount of time before executing the same operation twice. Implementing this and finding the right debounce time value for each scenario, however, is not easy. For this reason, you should consider API request cancellation. With request cancellation, the new API request simply cancels the previous one of the same type. API request cance...