├── .adonisrc.json ├── .editorconfig ├── .env.example ├── .eslintignore ├── .eslintrc.json ├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── ace ├── ace-manifest.json ├── app ├── Controllers │ └── Http │ │ ├── ImagesController.ts │ │ └── VideosController.ts ├── Exceptions │ └── Handler.ts ├── Models │ ├── File.ts │ ├── Image.ts │ ├── Video.ts │ └── VideoDataPoint.ts └── Services │ ├── FileService.ts │ └── MediaService.ts ├── commands └── index.ts ├── config ├── app.ts ├── bodyparser.ts ├── cors.ts ├── database.ts └── hash.ts ├── contracts ├── env.ts ├── events.ts └── hash.ts ├── database ├── factories │ └── index.ts └── migrations │ ├── 1623681218409_files.ts │ ├── 1623695892266_videos.ts │ ├── 1623700847990_video_data_points.ts │ └── 1624027532993_images.ts ├── docker-compose.yml ├── entry.sh ├── env.ts ├── frontend ├── assets │ └── thumbnail.png ├── image.html ├── image.js ├── index.html ├── index.js ├── openlayers │ ├── .gitignore │ ├── OpenLayers.debug.js │ ├── OpenLayers.js │ ├── OpenLayers.light.debug.js │ ├── OpenLayers.light.js │ ├── OpenLayers.mobile.debug.js │ ├── OpenLayers.mobile.js │ ├── apidoc_config │ │ ├── Languages.txt │ │ ├── Menu.txt │ │ ├── OL.css │ │ └── Topics.txt │ ├── art │ │ ├── arrows.svg │ │ ├── layer-switcher-maximize.svg │ │ ├── layer-switcher-minimize.svg │ │ ├── marker.svg │ │ ├── measuring-stick-off.svg │ │ ├── measuring-stick-on.svg │ │ ├── panning-hand-off.svg │ │ ├── panning-hand-on.svg │ │ ├── slider.svg │ │ ├── zoom-world.svg │ │ └── zoombar.svg │ ├── authors.txt │ ├── doc │ │ └── devdocs │ │ │ ├── index.html │ │ │ ├── index │ │ │ ├── Classes.html │ │ │ ├── Classes2.html │ │ │ ├── Constants.html │ │ │ ├── Constructor.html │ │ │ ├── Constructor2.html │ │ │ ├── Constructor3.html │ │ │ ├── Files.html │ │ │ ├── Functions.html │ │ │ ├── Functions10.html │ │ │ ├── Functions11.html │ │ │ ├── Functions12.html │ │ │ ├── Functions13.html │ │ │ ├── Functions14.html │ │ │ ├── Functions15.html │ │ │ ├── Functions16.html │ │ │ ├── Functions17.html │ │ │ ├── Functions18.html │ │ │ ├── Functions19.html │ │ │ ├── Functions2.html │ │ │ ├── Functions3.html │ │ │ ├── Functions4.html │ │ │ ├── Functions5.html │ │ │ ├── Functions6.html │ │ │ ├── Functions7.html │ │ │ ├── Functions8.html │ │ │ ├── Functions9.html │ │ │ ├── General.html │ │ │ ├── General10.html │ │ │ ├── General11.html │ │ │ ├── General12.html │ │ │ ├── General13.html │ │ │ ├── General14.html │ │ │ ├── General15.html │ │ │ ├── General16.html │ │ │ ├── General17.html │ │ │ ├── General18.html │ │ │ ├── General19.html │ │ │ ├── General2.html │ │ │ ├── General20.html │ │ │ ├── General21.html │ │ │ ├── General22.html │ │ │ ├── General23.html │ │ │ ├── General3.html │ │ │ ├── General4.html │ │ │ ├── General5.html │ │ │ ├── General6.html │ │ │ ├── General7.html │ │ │ ├── General8.html │ │ │ ├── General9.html │ │ │ ├── Properties.html │ │ │ ├── Properties10.html │ │ │ ├── Properties11.html │ │ │ ├── Properties12.html │ │ │ ├── Properties13.html │ │ │ ├── Properties14.html │ │ │ ├── Properties15.html │ │ │ ├── Properties16.html │ │ │ ├── Properties2.html │ │ │ ├── Properties3.html │ │ │ ├── Properties4.html │ │ │ ├── Properties5.html │ │ │ ├── Properties6.html │ │ │ ├── Properties7.html │ │ │ ├── Properties8.html │ │ │ └── Properties9.html │ │ │ ├── javascript │ │ │ ├── main.js │ │ │ ├── prettify.js │ │ │ └── searchdata.js │ │ │ ├── search │ │ │ ├── ClassesO.html │ │ │ ├── ClassesS.html │ │ │ ├── ClassesU.html │ │ │ ├── ConstantsB.html │ │ │ ├── ConstantsC.html │ │ │ ├── ConstantsD.html │ │ │ ├── ConstantsF.html │ │ │ ├── ConstantsI.html │ │ │ ├── ConstantsK.html │ │ │ ├── ConstantsL.html │ │ │ ├── ConstantsM.html │ │ │ ├── ConstantsO.html │ │ │ ├── ConstantsR.html │ │ │ ├── ConstantsS.html │ │ │ ├── ConstantsT.html │ │ │ ├── ConstantsU.html │ │ │ ├── ConstantsV.html │ │ │ ├── ConstantsX.html │ │ │ ├── ConstantsY.html │ │ │ ├── ConstantsZ.html │ │ │ ├── ConstructorA.html │ │ │ ├── ConstructorB.html │ │ │ ├── ConstructorC.html │ │ │ ├── ConstructorD.html │ │ │ ├── ConstructorE.html │ │ │ ├── ConstructorF.html │ │ │ ├── ConstructorG.html │ │ │ ├── ConstructorH.html │ │ │ ├── ConstructorI.html │ │ │ ├── ConstructorJ.html │ │ │ ├── ConstructorK.html │ │ │ ├── ConstructorL.html │ │ │ ├── ConstructorM.html │ │ │ ├── ConstructorN.html │ │ │ ├── ConstructorO.html │ │ │ ├── ConstructorP.html │ │ │ ├── ConstructorR.html │ │ │ ├── ConstructorS.html │ │ │ ├── ConstructorT.html │ │ │ ├── ConstructorU.html │ │ │ ├── ConstructorV.html │ │ │ ├── ConstructorW.html │ │ │ ├── ConstructorX.html │ │ │ ├── ConstructorY.html │ │ │ ├── ConstructorZ.html │ │ │ ├── FilesA.html │ │ │ ├── FilesC.html │ │ │ ├── FilesD.html │ │ │ ├── FilesI.html │ │ │ ├── FilesK.html │ │ │ ├── FilesO.html │ │ │ ├── FilesS.html │ │ │ ├── FilesV.html │ │ │ ├── FilesW.html │ │ │ ├── FunctionsA.html │ │ │ ├── FunctionsB.html │ │ │ ├── FunctionsC.html │ │ │ ├── FunctionsD.html │ │ │ ├── FunctionsE.html │ │ │ ├── FunctionsF.html │ │ │ ├── FunctionsG.html │ │ │ ├── FunctionsH.html │ │ │ ├── FunctionsI.html │ │ │ ├── FunctionsJ.html │ │ │ ├── FunctionsL.html │ │ │ ├── FunctionsM.html │ │ │ ├── FunctionsN.html │ │ │ ├── FunctionsO.html │ │ │ ├── FunctionsP.html │ │ │ ├── FunctionsQ.html │ │ │ ├── FunctionsR.html │ │ │ ├── FunctionsS.html │ │ │ ├── FunctionsSymbols.html │ │ │ ├── FunctionsT.html │ │ │ ├── FunctionsU.html │ │ │ ├── FunctionsV.html │ │ │ ├── FunctionsW.html │ │ │ ├── FunctionsZ.html │ │ │ ├── GeneralA.html │ │ │ ├── GeneralB.html │ │ │ ├── GeneralC.html │ │ │ ├── GeneralD.html │ │ │ ├── GeneralE.html │ │ │ ├── GeneralF.html │ │ │ ├── GeneralG.html │ │ │ ├── GeneralH.html │ │ │ ├── GeneralI.html │ │ │ ├── GeneralJ.html │ │ │ ├── GeneralK.html │ │ │ ├── GeneralL.html │ │ │ ├── GeneralM.html │ │ │ ├── GeneralN.html │ │ │ ├── GeneralO.html │ │ │ ├── GeneralP.html │ │ │ ├── GeneralQ.html │ │ │ ├── GeneralR.html │ │ │ ├── GeneralS.html │ │ │ ├── GeneralSymbols.html │ │ │ ├── GeneralT.html │ │ │ ├── GeneralU.html │ │ │ ├── GeneralV.html │ │ │ ├── GeneralW.html │ │ │ ├── GeneralX.html │ │ │ ├── GeneralY.html │ │ │ ├── GeneralZ.html │ │ │ ├── NoResults.html │ │ │ ├── PropertiesA.html │ │ │ ├── PropertiesB.html │ │ │ ├── PropertiesC.html │ │ │ ├── PropertiesD.html │ │ │ ├── PropertiesE.html │ │ │ ├── PropertiesF.html │ │ │ ├── PropertiesG.html │ │ │ ├── PropertiesH.html │ │ │ ├── PropertiesI.html │ │ │ ├── PropertiesJ.html │ │ │ ├── PropertiesK.html │ │ │ ├── PropertiesL.html │ │ │ ├── PropertiesM.html │ │ │ ├── PropertiesN.html │ │ │ ├── PropertiesO.html │ │ │ ├── PropertiesP.html │ │ │ ├── PropertiesQ.html │ │ │ ├── PropertiesR.html │ │ │ ├── PropertiesS.html │ │ │ ├── PropertiesSymbols.html │ │ │ ├── PropertiesT.html │ │ │ ├── PropertiesU.html │ │ │ ├── PropertiesV.html │ │ │ ├── PropertiesW.html │ │ │ ├── PropertiesX.html │ │ │ ├── PropertiesY.html │ │ │ └── PropertiesZ.html │ │ │ └── styles │ │ │ ├── 1.css │ │ │ ├── 2.css │ │ │ └── main.css │ ├── doc_config │ │ ├── Data │ │ │ ├── ClassHierarchy.nd │ │ │ ├── ConfigFileInfo.nd │ │ │ ├── FileInfo.nd │ │ │ ├── ImageFileInfo.nd │ │ │ ├── ImageReferenceTable.nd │ │ │ ├── IndexInfo.nd │ │ │ ├── PreviousMenuState.nd │ │ │ ├── PreviousSettings.nd │ │ │ └── SymbolTable.nd │ │ ├── Languages.txt │ │ ├── Menu.txt │ │ ├── OL.css │ │ └── Topics.txt │ ├── examples │ │ ├── Jugl.js │ │ ├── KMLParser.html │ │ ├── SLDSelect.html │ │ ├── WMSDescribeLayerParser.html │ │ ├── accelerometer.html │ │ ├── accessible-click-control.html │ │ ├── accessible-click-control.js │ │ ├── accessible-panel.html │ │ ├── accessible-panel.js │ │ ├── accessible.html │ │ ├── all-overlays-google.html │ │ ├── all-overlays-google.js │ │ ├── all-overlays.html │ │ ├── anchor-permalink.html │ │ ├── anchor-permalink.js │ │ ├── animated_panning.html │ │ ├── animator.js │ │ ├── arcgis93rest.html │ │ ├── arcgiscache_ags.html │ │ ├── arcgiscache_direct.html │ │ ├── arcgiscache_jsonp.html │ │ ├── arcims-thematic.html │ │ ├── arcims.html │ │ ├── attribution.html │ │ ├── behavior-fixed-http-gml.html │ │ ├── bing-tiles-restrictedzoom.html │ │ ├── bing-tiles-restrictedzoom.js │ │ ├── bing-tiles.html │ │ ├── bing-tiles.js │ │ ├── bing.html │ │ ├── bootstrap.html │ │ ├── bootstrap.js │ │ ├── boxes-vector.html │ │ ├── boxes.html │ │ ├── browser.html │ │ ├── browser.js │ │ ├── buffer.html │ │ ├── cache-read.html │ │ ├── cache-read.js │ │ ├── cache-write.html │ │ ├── cache-write.js │ │ ├── canvas-hit-detection.html │ │ ├── canvas-hit-detection.js │ │ ├── canvas-inspector.html │ │ ├── canvas-inspector.js │ │ ├── canvas.html │ │ ├── canvas.js │ │ ├── cartodb-geojson.html │ │ ├── click-handler.html │ │ ├── click.html │ │ ├── clientzoom.html │ │ ├── clientzoom.js │ │ ├── controls.html │ │ ├── cql-format.html │ │ ├── cql-format.js │ │ ├── cross-origin-xml.html │ │ ├── cross-origin-xml.js │ │ ├── cross-origin.html │ │ ├── cross-origin.js │ │ ├── custom-control.html │ │ ├── custom-style.html │ │ ├── data │ │ │ ├── 4_m_citylights_lg.gif │ │ │ ├── line.json │ │ │ ├── point.json │ │ │ ├── poly.json │ │ │ ├── roads.json │ │ │ └── tazdem.tiff │ │ ├── debug.html │ │ ├── document-drag.html │ │ ├── donut.html │ │ ├── donut.js │ │ ├── drag-feature.html │ │ ├── draw-feature.html │ │ ├── draw-undo-redo.html │ │ ├── draw-undo-redo.js │ │ ├── dynamic-text-layer.html │ │ ├── editing-methods.html │ │ ├── editing-methods.js │ │ ├── editingtoolbar-outside.html │ │ ├── editingtoolbar.html │ │ ├── encoded-polyline.html │ │ ├── events.html │ │ ├── example-list.html │ │ ├── example.html │ │ ├── example.js │ │ ├── feature-events.html │ │ ├── feature-events.js │ │ ├── filter-strategy.html │ │ ├── filter-strategy.js │ │ ├── filter.html │ │ ├── fractional-zoom.html │ │ ├── fullScreen.html │ │ ├── fullScreen.js │ │ ├── fusiontables.html │ │ ├── fusiontables.js │ │ ├── game-accel-ball.html │ │ ├── geojson-reprojected.html │ │ ├── geojson-reprojected.js │ │ ├── geojson-reprojected.json │ │ ├── geojson.html │ │ ├── geolocation.html │ │ ├── geolocation.js │ │ ├── georss-flickr.html │ │ ├── georss-markers.html │ │ ├── georss.html │ │ ├── georss.xml │ │ ├── getfeature-wfs.html │ │ ├── getfeatureinfo-control.html │ │ ├── getfeatureinfo-popup.html │ │ ├── gml-layer.html │ │ ├── gml │ │ │ ├── line.xml │ │ │ ├── multipoint.xml │ │ │ ├── multipolygon.xml │ │ │ ├── owls.xml │ │ │ ├── point.xml │ │ │ └── polygon.xml │ │ ├── google-static.html │ │ ├── google-static.js │ │ ├── google-v3-alloverlays.html │ │ ├── google-v3-alloverlays.js │ │ ├── google-v3.html │ │ ├── google-v3.js │ │ ├── google.html │ │ ├── graphic-name.html │ │ ├── graphic-name.js │ │ ├── graticule.html │ │ ├── gutter.html │ │ ├── highlight-feature.html │ │ ├── hover-handler.html │ │ ├── image-layer.html │ │ ├── img │ │ │ ├── check-round-green.png │ │ │ ├── check-round-grey.png │ │ │ ├── list.png │ │ │ ├── locate.png │ │ │ ├── marker_shadow.png │ │ │ ├── minus1.png │ │ │ ├── mobile-layers.png │ │ │ ├── mobile-loc.png │ │ │ ├── mobile-zoombar.png │ │ │ ├── openlayers.png │ │ │ ├── popupMatrix.jpg │ │ │ ├── small.jpg │ │ │ ├── thinlong.jpg │ │ │ ├── widelong.jpg │ │ │ └── wideshort.jpg │ │ ├── intersects.html │ │ ├── kamap.html │ │ ├── kamap.txt │ │ ├── kinetic.html │ │ ├── kinetic.js │ │ ├── kml-layer.html │ │ ├── kml-layer.js │ │ ├── kml-pointtrack.html │ │ ├── kml-pointtrack.js │ │ ├── kml-track.html │ │ ├── kml-track.js │ │ ├── kml-track.kml │ │ ├── kml │ │ │ ├── lines.kml │ │ │ ├── styles.kml │ │ │ └── sundials.kml │ │ ├── label-scale.html │ │ ├── label-scale.js │ │ ├── late-render.html │ │ ├── layer-opacity.html │ │ ├── layerLoadMonitoring.html │ │ ├── layerswitcher.html │ │ ├── light-basic.html │ │ ├── light-basic.js │ │ ├── lite.html │ │ ├── mapbox.html │ │ ├── mapbox.js │ │ ├── mapguide.html │ │ ├── mapquest.html │ │ ├── mapquest.js │ │ ├── mapserver.html │ │ ├── mapserver_untiled.html │ │ ├── marker-shadow.html │ │ ├── markerResize.html │ │ ├── markers.html │ │ ├── markersTextLayer.html │ │ ├── measure.html │ │ ├── mobile-base.js │ │ ├── mobile-drawing.html │ │ ├── mobile-drawing.js │ │ ├── mobile-jq.html │ │ ├── mobile-jq.js │ │ ├── mobile-layers.html │ │ ├── mobile-layers.js │ │ ├── mobile-navigation.html │ │ ├── mobile-navigation.js │ │ ├── mobile-sencha.html │ │ ├── mobile-sencha.js │ │ ├── mobile-wmts-vienna.css │ │ ├── mobile-wmts-vienna.html │ │ ├── mobile-wmts-vienna.js │ │ ├── mobile.html │ │ ├── mobile.js │ │ ├── modify-feature.html │ │ ├── mouse-position.html │ │ ├── mousewheel-interval.html │ │ ├── multiserver.html │ │ ├── multitouch.html │ │ ├── mvs.html │ │ ├── navigation-control.html │ │ ├── navigation-history.html │ │ ├── navtoolbar-alwaysZoom.html │ │ ├── navtoolbar-outsidemap.html │ │ ├── navtoolbar.html │ │ ├── offline-storage.html │ │ ├── offline-storage.js │ │ ├── openls.html │ │ ├── ordering.html │ │ ├── osm-google.html │ │ ├── osm-google.js │ │ ├── osm-grayscale.html │ │ ├── osm-marker-popup.html │ │ ├── osm-marker-popup.js │ │ ├── osm.html │ │ ├── osm │ │ │ └── sutton_coldfield.osm │ │ ├── overviewmap.html │ │ ├── pan-zoom-panels.html │ │ ├── panel.html │ │ ├── point-grid.html │ │ ├── point-grid.js │ │ ├── point-track-markers.html │ │ ├── polar-projections.html │ │ ├── polar-projections.js │ │ ├── popupMatrix.html │ │ ├── proxy.cgi │ │ ├── regular-polygons.html │ │ ├── resize-features.html │ │ ├── restricted-extent.html │ │ ├── rotate-features.html │ │ ├── select-feature-multilayer.html │ │ ├── select-feature-openpopup.html │ │ ├── select-feature.html │ │ ├── setextent.html │ │ ├── simplify-linestring.html │ │ ├── simplify-linestring.js │ │ ├── single-tile.html │ │ ├── single-tile.js │ │ ├── sld-parser.html │ │ ├── sld.html │ │ ├── sld.js │ │ ├── snap-grid.html │ │ ├── snap-grid.js │ │ ├── snap-split.html │ │ ├── snapping.html │ │ ├── sos.html │ │ ├── spherical-mercator.html │ │ ├── split-feature.html │ │ ├── strategy-bbox.html │ │ ├── strategy-cluster-extended.html │ │ ├── strategy-cluster-extended.js │ │ ├── strategy-cluster-threshold.html │ │ ├── strategy-cluster.html │ │ ├── strategy-paging.html │ │ ├── style-rules.html │ │ ├── style-rules.js │ │ ├── style.css │ │ ├── style.mobile-jq.css │ │ ├── stylemap.html │ │ ├── styles-context.html │ │ ├── styles-rotation.html │ │ ├── styles-unique.html │ │ ├── sundials-spherical-mercator.html │ │ ├── sundials.html │ │ ├── symbolizers-fill-stroke-graphic.html │ │ ├── tasmania │ │ │ ├── TasmaniaCities.xml │ │ │ ├── TasmaniaRoads.xml │ │ │ ├── TasmaniaStateBoundaries.xml │ │ │ ├── TasmaniaWaterBodies.xml │ │ │ └── sld-tasmania.xml │ │ ├── teleportation.html │ │ ├── textfile.txt │ │ ├── tile-origin.html │ │ ├── tile-origin.js │ │ ├── tilecache.html │ │ ├── tms.html │ │ ├── transform-feature.html │ │ ├── transition.html │ │ ├── using-proj4js.html │ │ ├── using-proj4js.js │ │ ├── utfgrid-geography-class.html │ │ ├── utfgrid-geography-class.js │ │ ├── utfgrid.html │ │ ├── utfgrid.js │ │ ├── utfgrid │ │ │ ├── bio_utfgrid │ │ │ │ └── 1 │ │ │ │ │ ├── 0 │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ └── 2.json │ │ │ │ │ ├── 1 │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ └── 2.json │ │ │ │ │ └── 2 │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ └── 2.json │ │ │ ├── geography-class │ │ │ │ ├── 0 │ │ │ │ │ └── 0 │ │ │ │ │ │ └── 0.grid.json │ │ │ │ ├── 1 │ │ │ │ │ ├── 0 │ │ │ │ │ │ ├── 0.grid.json │ │ │ │ │ │ └── 1.grid.json │ │ │ │ │ └── 1 │ │ │ │ │ │ ├── 0.grid.json │ │ │ │ │ │ └── 1.grid.json │ │ │ │ └── 2 │ │ │ │ │ ├── 0 │ │ │ │ │ ├── 0.grid.json │ │ │ │ │ ├── 1.grid.json │ │ │ │ │ ├── 2.grid.json │ │ │ │ │ └── 3.grid.json │ │ │ │ │ ├── 1 │ │ │ │ │ ├── 0.grid.json │ │ │ │ │ ├── 1.grid.json │ │ │ │ │ ├── 2.grid.json │ │ │ │ │ └── 3.grid.json │ │ │ │ │ ├── 2 │ │ │ │ │ ├── 0.grid.json │ │ │ │ │ ├── 1.grid.json │ │ │ │ │ ├── 2.grid.json │ │ │ │ │ └── 3.grid.json │ │ │ │ │ └── 3 │ │ │ │ │ ├── 0.grid.json │ │ │ │ │ ├── 1.grid.json │ │ │ │ │ ├── 2.grid.json │ │ │ │ │ └── 3.grid.json │ │ │ └── world_utfgrid │ │ │ │ └── 1 │ │ │ │ ├── 0 │ │ │ │ ├── 0.json │ │ │ │ ├── 1.json │ │ │ │ └── 2.json │ │ │ │ ├── 1 │ │ │ │ ├── 0.json │ │ │ │ ├── 1.json │ │ │ │ └── 2.json │ │ │ │ └── 2 │ │ │ │ ├── 0.json │ │ │ │ ├── 1.json │ │ │ │ └── 2.json │ │ ├── utfgrid_twogrids.html │ │ ├── utfgrid_twogrids.js │ │ ├── vector-features-with-text.html │ │ ├── vector-features.html │ │ ├── vector-formats.html │ │ ├── web-mercator.html │ │ ├── web-mercator.js │ │ ├── wfs-filter.html │ │ ├── wfs-filter.js │ │ ├── wfs-protocol-transactions.html │ │ ├── wfs-protocol-transactions.js │ │ ├── wfs-protocol.html │ │ ├── wfs-reprojection.html │ │ ├── wfs-reprojection.js │ │ ├── wfs-snap-split.html │ │ ├── wfs-spatial-filter.html │ │ ├── wfs-spatial-filter.js │ │ ├── wfs-states.html │ │ ├── wfs-states.js │ │ ├── wmc.html │ │ ├── wms-long-url.html │ │ ├── wms-long-url.js │ │ ├── wms-untiled.html │ │ ├── wms-v13.html │ │ ├── wms.html │ │ ├── wmst.html │ │ ├── wmts-capabilities.html │ │ ├── wmts-capabilities.js │ │ ├── wmts-getfeatureinfo.html │ │ ├── wmts-getfeatureinfo.js │ │ ├── wmts.html │ │ ├── wmts.js │ │ ├── wps-client.html │ │ ├── wps-client.js │ │ ├── wps.html │ │ ├── wps.js │ │ ├── wrapDateLine.html │ │ ├── xhtml.html │ │ ├── xml.html │ │ ├── xml │ │ │ ├── features.xml │ │ │ ├── georss-flickr.xml │ │ │ ├── track1.xml │ │ │ └── wmsdescribelayer.xml │ │ ├── xyz-esri.html │ │ ├── yelp-georss.xml │ │ ├── zoom.html │ │ ├── zoom.js │ │ ├── zoomLevels.html │ │ └── zoomify.html │ ├── img │ │ ├── blank.gif │ │ ├── cloud-popup-relative.png │ │ ├── drag-rectangle-off.png │ │ ├── drag-rectangle-on.png │ │ ├── east-mini.png │ │ ├── imageMarker.png │ │ ├── layer-switcher-maximize.png │ │ ├── layer-switcher-minimize.png │ │ ├── marker-blue.png │ │ ├── marker-gold.png │ │ ├── marker-green.png │ │ ├── marker.png │ │ ├── measuring-stick-off.png │ │ ├── measuring-stick-on.png │ │ ├── north-mini.png │ │ ├── panning-hand-off.png │ │ ├── panning-hand-on.png │ │ ├── slider.png │ │ ├── south-mini.png │ │ ├── west-mini.png │ │ ├── zoom-minus-mini.png │ │ ├── zoom-plus-mini.png │ │ ├── zoom-world-mini.png │ │ └── zoombar.png │ ├── lib │ │ ├── Firebug │ │ │ ├── errorIcon.png │ │ │ ├── firebug.css │ │ │ ├── firebug.html │ │ │ ├── firebug.js │ │ │ ├── firebugx.js │ │ │ ├── infoIcon.png │ │ │ ├── license.txt │ │ │ ├── readme.txt │ │ │ └── warningIcon.png │ │ ├── OpenLayers.js │ │ ├── OpenLayers │ │ │ ├── Animation.js │ │ │ ├── BaseTypes.js │ │ │ ├── BaseTypes │ │ │ │ ├── Bounds.js │ │ │ │ ├── Class.js │ │ │ │ ├── Date.js │ │ │ │ ├── Element.js │ │ │ │ ├── LonLat.js │ │ │ │ ├── Pixel.js │ │ │ │ └── Size.js │ │ │ ├── Console.js │ │ │ ├── Control.js │ │ │ ├── Control │ │ │ │ ├── ArgParser.js │ │ │ │ ├── Attribution.js │ │ │ │ ├── Button.js │ │ │ │ ├── CacheRead.js │ │ │ │ ├── CacheWrite.js │ │ │ │ ├── DragFeature.js │ │ │ │ ├── DragPan.js │ │ │ │ ├── DrawFeature.js │ │ │ │ ├── EditingToolbar.js │ │ │ │ ├── Geolocate.js │ │ │ │ ├── GetFeature.js │ │ │ │ ├── Graticule.js │ │ │ │ ├── KeyboardDefaults.js │ │ │ │ ├── LayerSwitcher.js │ │ │ │ ├── Measure.js │ │ │ │ ├── ModifyFeature.js │ │ │ │ ├── MousePosition.js │ │ │ │ ├── NavToolbar.js │ │ │ │ ├── Navigation.js │ │ │ │ ├── NavigationHistory.js │ │ │ │ ├── OverviewMap.js │ │ │ │ ├── Pan.js │ │ │ │ ├── PanPanel.js │ │ │ │ ├── PanZoom.js │ │ │ │ ├── PanZoomBar.js │ │ │ │ ├── Panel.js │ │ │ │ ├── Permalink.js │ │ │ │ ├── PinchZoom.js │ │ │ │ ├── SLDSelect.js │ │ │ │ ├── Scale.js │ │ │ │ ├── ScaleLine.js │ │ │ │ ├── SelectFeature.js │ │ │ │ ├── Snapping.js │ │ │ │ ├── Split.js │ │ │ │ ├── TouchNavigation.js │ │ │ │ ├── TransformFeature.js │ │ │ │ ├── UTFGrid.js │ │ │ │ ├── WMSGetFeatureInfo.js │ │ │ │ ├── WMTSGetFeatureInfo.js │ │ │ │ ├── Zoom.js │ │ │ │ ├── ZoomBox.js │ │ │ │ ├── ZoomIn.js │ │ │ │ ├── ZoomOut.js │ │ │ │ ├── ZoomPanel.js │ │ │ │ └── ZoomToMaxExtent.js │ │ │ ├── Events.js │ │ │ ├── Events │ │ │ │ ├── buttonclick.js │ │ │ │ └── featureclick.js │ │ │ ├── Feature.js │ │ │ ├── Feature │ │ │ │ └── Vector.js │ │ │ ├── Filter.js │ │ │ ├── Filter │ │ │ │ ├── Comparison.js │ │ │ │ ├── FeatureId.js │ │ │ │ ├── Function.js │ │ │ │ ├── Logical.js │ │ │ │ └── Spatial.js │ │ │ ├── Format.js │ │ │ ├── Format │ │ │ │ ├── ArcXML.js │ │ │ │ ├── ArcXML │ │ │ │ │ └── Features.js │ │ │ │ ├── Atom.js │ │ │ │ ├── CQL.js │ │ │ │ ├── CSWGetDomain.js │ │ │ │ ├── CSWGetDomain │ │ │ │ │ └── v2_0_2.js │ │ │ │ ├── CSWGetRecords.js │ │ │ │ ├── CSWGetRecords │ │ │ │ │ └── v2_0_2.js │ │ │ │ ├── Context.js │ │ │ │ ├── EncodedPolyline.js │ │ │ │ ├── Filter.js │ │ │ │ ├── Filter │ │ │ │ │ ├── v1.js │ │ │ │ │ ├── v1_0_0.js │ │ │ │ │ └── v1_1_0.js │ │ │ │ ├── GML.js │ │ │ │ ├── GML │ │ │ │ │ ├── Base.js │ │ │ │ │ ├── v2.js │ │ │ │ │ └── v3.js │ │ │ │ ├── GPX.js │ │ │ │ ├── GeoJSON.js │ │ │ │ ├── GeoRSS.js │ │ │ │ ├── JSON.js │ │ │ │ ├── KML.js │ │ │ │ ├── OGCExceptionReport.js │ │ │ │ ├── OSM.js │ │ │ │ ├── OWSCommon.js │ │ │ │ ├── OWSCommon │ │ │ │ │ ├── v1.js │ │ │ │ │ ├── v1_0_0.js │ │ │ │ │ └── v1_1_0.js │ │ │ │ ├── OWSContext.js │ │ │ │ ├── OWSContext │ │ │ │ │ └── v0_3_1.js │ │ │ │ ├── QueryStringFilter.js │ │ │ │ ├── SLD.js │ │ │ │ ├── SLD │ │ │ │ │ ├── v1.js │ │ │ │ │ ├── v1_0_0.js │ │ │ │ │ └── v1_0_0_GeoServer.js │ │ │ │ ├── SOSCapabilities.js │ │ │ │ ├── SOSCapabilities │ │ │ │ │ └── v1_0_0.js │ │ │ │ ├── SOSGetFeatureOfInterest.js │ │ │ │ ├── SOSGetObservation.js │ │ │ │ ├── Text.js │ │ │ │ ├── WCSCapabilities.js │ │ │ │ ├── WCSCapabilities │ │ │ │ │ ├── v1.js │ │ │ │ │ ├── v1_0_0.js │ │ │ │ │ └── v1_1_0.js │ │ │ │ ├── WCSGetCoverage.js │ │ │ │ ├── WFS.js │ │ │ │ ├── WFSCapabilities.js │ │ │ │ ├── WFSCapabilities │ │ │ │ │ ├── v1.js │ │ │ │ │ ├── v1_0_0.js │ │ │ │ │ └── v1_1_0.js │ │ │ │ ├── WFSDescribeFeatureType.js │ │ │ │ ├── WFST.js │ │ │ │ ├── WFST │ │ │ │ │ ├── v1.js │ │ │ │ │ ├── v1_0_0.js │ │ │ │ │ └── v1_1_0.js │ │ │ │ ├── WKT.js │ │ │ │ ├── WMC.js │ │ │ │ ├── WMC │ │ │ │ │ ├── v1.js │ │ │ │ │ ├── v1_0_0.js │ │ │ │ │ └── v1_1_0.js │ │ │ │ ├── WMSCapabilities.js │ │ │ │ ├── WMSCapabilities │ │ │ │ │ ├── v1.js │ │ │ │ │ ├── v1_1.js │ │ │ │ │ ├── v1_1_0.js │ │ │ │ │ ├── v1_1_1.js │ │ │ │ │ ├── v1_1_1_WMSC.js │ │ │ │ │ ├── v1_3.js │ │ │ │ │ └── v1_3_0.js │ │ │ │ ├── WMSDescribeLayer.js │ │ │ │ ├── WMSDescribeLayer │ │ │ │ │ └── v1_1.js │ │ │ │ ├── WMSGetFeatureInfo.js │ │ │ │ ├── WMTSCapabilities.js │ │ │ │ ├── WMTSCapabilities │ │ │ │ │ └── v1_0_0.js │ │ │ │ ├── WPSCapabilities.js │ │ │ │ ├── WPSCapabilities │ │ │ │ │ └── v1_0_0.js │ │ │ │ ├── WPSDescribeProcess.js │ │ │ │ ├── WPSExecute.js │ │ │ │ ├── XLS.js │ │ │ │ ├── XLS │ │ │ │ │ ├── v1.js │ │ │ │ │ └── v1_1_0.js │ │ │ │ ├── XML.js │ │ │ │ └── XML │ │ │ │ │ └── VersionedOGC.js │ │ │ ├── Geometry.js │ │ │ ├── Geometry │ │ │ │ ├── Collection.js │ │ │ │ ├── Curve.js │ │ │ │ ├── LineString.js │ │ │ │ ├── LinearRing.js │ │ │ │ ├── MultiLineString.js │ │ │ │ ├── MultiPoint.js │ │ │ │ ├── MultiPolygon.js │ │ │ │ ├── Point.js │ │ │ │ └── Polygon.js │ │ │ ├── Handler.js │ │ │ ├── Handler │ │ │ │ ├── Box.js │ │ │ │ ├── Click.js │ │ │ │ ├── Drag.js │ │ │ │ ├── Feature.js │ │ │ │ ├── Hover.js │ │ │ │ ├── Keyboard.js │ │ │ │ ├── MouseWheel.js │ │ │ │ ├── Path.js │ │ │ │ ├── Pinch.js │ │ │ │ ├── Point.js │ │ │ │ ├── Polygon.js │ │ │ │ └── RegularPolygon.js │ │ │ ├── Icon.js │ │ │ ├── Kinetic.js │ │ │ ├── Lang.js │ │ │ ├── Lang │ │ │ │ ├── ar.js │ │ │ │ ├── be-tarask.js │ │ │ │ ├── bg.js │ │ │ │ ├── br.js │ │ │ │ ├── ca.js │ │ │ │ ├── cs-CZ.js │ │ │ │ ├── da-DK.js │ │ │ │ ├── de.js │ │ │ │ ├── el.js │ │ │ │ ├── en-CA.js │ │ │ │ ├── en.js │ │ │ │ ├── es.js │ │ │ │ ├── fi.js │ │ │ │ ├── fr.js │ │ │ │ ├── fur.js │ │ │ │ ├── gl.js │ │ │ │ ├── gsw.js │ │ │ │ ├── hr.js │ │ │ │ ├── hsb.js │ │ │ │ ├── hu.js │ │ │ │ ├── ia.js │ │ │ │ ├── id.js │ │ │ │ ├── io.js │ │ │ │ ├── is.js │ │ │ │ ├── it.js │ │ │ │ ├── ja.js │ │ │ │ ├── km.js │ │ │ │ ├── ksh.js │ │ │ │ ├── lt.js │ │ │ │ ├── nb.js │ │ │ │ ├── nds.js │ │ │ │ ├── nl.js │ │ │ │ ├── nn.js │ │ │ │ ├── oc.js │ │ │ │ ├── pl.js │ │ │ │ ├── pt-BR.js │ │ │ │ ├── pt.js │ │ │ │ ├── ro.js │ │ │ │ ├── ru.js │ │ │ │ ├── sk.js │ │ │ │ ├── sv-SE.js │ │ │ │ ├── te.js │ │ │ │ ├── vi.js │ │ │ │ ├── zh-CN.js │ │ │ │ └── zh-TW.js │ │ │ ├── Layer.js │ │ │ ├── Layer │ │ │ │ ├── ArcGIS93Rest.js │ │ │ │ ├── ArcGISCache.js │ │ │ │ ├── ArcIMS.js │ │ │ │ ├── Bing.js │ │ │ │ ├── Boxes.js │ │ │ │ ├── EventPane.js │ │ │ │ ├── FixedZoomLevels.js │ │ │ │ ├── GeoRSS.js │ │ │ │ ├── Google.js │ │ │ │ ├── Google │ │ │ │ │ └── v3.js │ │ │ │ ├── Grid.js │ │ │ │ ├── HTTPRequest.js │ │ │ │ ├── Image.js │ │ │ │ ├── KaMap.js │ │ │ │ ├── KaMapCache.js │ │ │ │ ├── MapGuide.js │ │ │ │ ├── MapServer.js │ │ │ │ ├── Markers.js │ │ │ │ ├── OSM.js │ │ │ │ ├── PointGrid.js │ │ │ │ ├── PointTrack.js │ │ │ │ ├── SphericalMercator.js │ │ │ │ ├── TMS.js │ │ │ │ ├── Text.js │ │ │ │ ├── TileCache.js │ │ │ │ ├── UTFGrid.js │ │ │ │ ├── Vector.js │ │ │ │ ├── Vector │ │ │ │ │ └── RootContainer.js │ │ │ │ ├── WMS.js │ │ │ │ ├── WMTS.js │ │ │ │ ├── WorldWind.js │ │ │ │ ├── XYZ.js │ │ │ │ └── Zoomify.js │ │ │ ├── Map.js │ │ │ ├── Marker.js │ │ │ ├── Marker │ │ │ │ └── Box.js │ │ │ ├── Popup.js │ │ │ ├── Popup │ │ │ │ ├── Anchored.js │ │ │ │ ├── Framed.js │ │ │ │ └── FramedCloud.js │ │ │ ├── Projection.js │ │ │ ├── Protocol.js │ │ │ ├── Protocol │ │ │ │ ├── CSW.js │ │ │ │ ├── CSW │ │ │ │ │ └── v2_0_2.js │ │ │ │ ├── HTTP.js │ │ │ │ ├── SOS.js │ │ │ │ ├── SOS │ │ │ │ │ └── v1_0_0.js │ │ │ │ ├── Script.js │ │ │ │ ├── WFS.js │ │ │ │ └── WFS │ │ │ │ │ ├── v1.js │ │ │ │ │ ├── v1_0_0.js │ │ │ │ │ └── v1_1_0.js │ │ │ ├── Renderer.js │ │ │ ├── Renderer │ │ │ │ ├── Canvas.js │ │ │ │ ├── Elements.js │ │ │ │ ├── SVG.js │ │ │ │ └── VML.js │ │ │ ├── Request.js │ │ │ ├── Request │ │ │ │ └── XMLHttpRequest.js │ │ │ ├── Rule.js │ │ │ ├── SingleFile.js │ │ │ ├── Spherical.js │ │ │ ├── Strategy.js │ │ │ ├── Strategy │ │ │ │ ├── BBOX.js │ │ │ │ ├── Cluster.js │ │ │ │ ├── Filter.js │ │ │ │ ├── Fixed.js │ │ │ │ ├── Paging.js │ │ │ │ ├── Refresh.js │ │ │ │ └── Save.js │ │ │ ├── Style.js │ │ │ ├── Style2.js │ │ │ ├── StyleMap.js │ │ │ ├── Symbolizer.js │ │ │ ├── Symbolizer │ │ │ │ ├── Line.js │ │ │ │ ├── Point.js │ │ │ │ ├── Polygon.js │ │ │ │ ├── Raster.js │ │ │ │ └── Text.js │ │ │ ├── Tile.js │ │ │ ├── Tile │ │ │ │ ├── Image.js │ │ │ │ ├── Image │ │ │ │ │ └── IFrame.js │ │ │ │ └── UTFGrid.js │ │ │ ├── TileManager.js │ │ │ ├── Tween.js │ │ │ ├── Util.js │ │ │ ├── Util │ │ │ │ └── vendorPrefix.js │ │ │ ├── WPSClient.js │ │ │ └── WPSProcess.js │ │ ├── Rico │ │ │ ├── Color.js │ │ │ ├── Corner.js │ │ │ └── license.js │ │ └── deprecated.js │ ├── license.txt │ ├── licenses │ │ ├── APACHE-2.0.txt │ │ ├── BSD-LICENSE.txt │ │ └── MIT-LICENSE.txt │ ├── marker.png │ ├── notes │ │ ├── 2.12.md │ │ └── 2.13.md │ ├── readme.md │ ├── tests │ │ ├── Animation.html │ │ ├── BaseTypes.html │ │ ├── BaseTypes │ │ │ ├── Bounds.html │ │ │ ├── Class.html │ │ │ ├── Date.html │ │ │ ├── Element.html │ │ │ ├── LonLat.html │ │ │ ├── Pixel.html │ │ │ └── Size.html │ │ ├── Console.html │ │ ├── Control.html │ │ ├── Control │ │ │ ├── ArgParser.html │ │ │ ├── Attribution.html │ │ │ ├── Button.html │ │ │ ├── CacheRead.html │ │ │ ├── CacheWrite.html │ │ │ ├── DragFeature.html │ │ │ ├── DragPan.html │ │ │ ├── DrawFeature.html │ │ │ ├── EditingToolbar.html │ │ │ ├── Geolocate.html │ │ │ ├── GetFeature.html │ │ │ ├── Graticule.html │ │ │ ├── KeyboardDefaults.html │ │ │ ├── LayerSwitcher.html │ │ │ ├── Measure.html │ │ │ ├── ModifyFeature.html │ │ │ ├── MousePosition.html │ │ │ ├── NavToolbar.html │ │ │ ├── Navigation.html │ │ │ ├── NavigationHistory.html │ │ │ ├── OverviewMap.html │ │ │ ├── Pan.html │ │ │ ├── PanPanel.html │ │ │ ├── PanZoom.html │ │ │ ├── PanZoomBar.html │ │ │ ├── Panel.html │ │ │ ├── Permalink.html │ │ │ ├── PinchZoom.html │ │ │ ├── SLDSelect.html │ │ │ ├── Scale.html │ │ │ ├── ScaleLine.html │ │ │ ├── SelectFeature.html │ │ │ ├── Snapping.html │ │ │ ├── Split.html │ │ │ ├── TouchNavigation.html │ │ │ ├── TransformFeature.html │ │ │ ├── UTFGrid.html │ │ │ ├── WMSGetFeatureInfo.html │ │ │ ├── WMTSGetFeatureInfo.html │ │ │ ├── Zoom.html │ │ │ ├── ZoomBox.html │ │ │ ├── ZoomIn.html │ │ │ ├── ZoomOut.html │ │ │ └── ZoomToMaxExtent.html │ │ ├── Events.html │ │ ├── Events │ │ │ ├── buttonclick.html │ │ │ └── featureclick.html │ │ ├── Extras.html │ │ ├── Feature.html │ │ ├── Feature │ │ │ └── Vector.html │ │ ├── Filter.html │ │ ├── Filter │ │ │ ├── Comparison.html │ │ │ ├── FeatureId.html │ │ │ ├── Logical.html │ │ │ └── Spatial.html │ │ ├── Format.html │ │ ├── Format │ │ │ ├── ArcXML.html │ │ │ ├── ArcXML │ │ │ │ └── Features.html │ │ │ ├── Atom.html │ │ │ ├── CQL.html │ │ │ ├── CSWGetDomain.html │ │ │ ├── CSWGetDomain │ │ │ │ ├── v2_0_2.html │ │ │ │ └── v2_0_2.js │ │ │ ├── CSWGetRecords.html │ │ │ ├── CSWGetRecords │ │ │ │ ├── v2_0_2.html │ │ │ │ └── v2_0_2.js │ │ │ ├── EncodedPolyline.html │ │ │ ├── Filter.html │ │ │ ├── Filter │ │ │ │ ├── v1.html │ │ │ │ ├── v1_0_0.html │ │ │ │ └── v1_1_0.html │ │ │ ├── GML.html │ │ │ ├── GML │ │ │ │ ├── cases.js │ │ │ │ ├── v2.html │ │ │ │ └── v3.html │ │ │ ├── GPX.html │ │ │ ├── GeoJSON.html │ │ │ ├── GeoRSS.html │ │ │ ├── JSON.html │ │ │ ├── KML.html │ │ │ ├── OGCExceptionReport.html │ │ │ ├── OSM.html │ │ │ ├── OWSCommon │ │ │ │ ├── v1_0_0.html │ │ │ │ └── v1_1_0.html │ │ │ ├── OWSContext │ │ │ │ └── v0_3_1.html │ │ │ ├── QueryStringFilter.html │ │ │ ├── SLD.html │ │ │ ├── SLD │ │ │ │ ├── v1_0_0.html │ │ │ │ └── v1_0_0_GeoServer.html │ │ │ ├── SOSCapabilities │ │ │ │ ├── v1_0_0.html │ │ │ │ └── v1_0_0.js │ │ │ ├── SOSGetFeatureOfInterest.html │ │ │ ├── SOSGetObservation.html │ │ │ ├── Text.html │ │ │ ├── WCSCapabilities.html │ │ │ ├── WCSCapabilities │ │ │ │ └── v1.html │ │ │ ├── WCSGetCoverage.html │ │ │ ├── WFS.html │ │ │ ├── WFSCapabilities.html │ │ │ ├── WFSCapabilities │ │ │ │ └── v1.html │ │ │ ├── WFSDescribeFeatureType.html │ │ │ ├── WFST.html │ │ │ ├── WFST │ │ │ │ ├── v1.html │ │ │ │ ├── v1_0_0.html │ │ │ │ └── v1_1_0.html │ │ │ ├── WKT.html │ │ │ ├── WMC.html │ │ │ ├── WMC │ │ │ │ ├── v1.html │ │ │ │ └── v1_1_0.html │ │ │ ├── WMSCapabilities.html │ │ │ ├── WMSCapabilities │ │ │ │ ├── v1_1_1.html │ │ │ │ ├── v1_1_1_WMSC.html │ │ │ │ └── v1_3_0.html │ │ │ ├── WMSDescribeLayer.html │ │ │ ├── WMSGetFeatureInfo.html │ │ │ ├── WMTSCapabilities.html │ │ │ ├── WMTSCapabilities │ │ │ │ └── v1_0_0.html │ │ │ ├── WPSCapabilities │ │ │ │ ├── v1_0_0.html │ │ │ │ └── v1_0_0.js │ │ │ ├── WPSDescribeProcess.html │ │ │ ├── WPSExecute.html │ │ │ ├── XLS │ │ │ │ └── v1_1_0.html │ │ │ ├── XML.html │ │ │ └── XML │ │ │ │ └── VersionedOGC.html │ │ ├── Geometry.html │ │ ├── Geometry │ │ │ ├── Collection.html │ │ │ ├── Curve.html │ │ │ ├── LineString.html │ │ │ ├── LinearRing.html │ │ │ ├── MultiLineString.html │ │ │ ├── MultiPoint.html │ │ │ ├── MultiPolygon.html │ │ │ ├── Point.html │ │ │ └── Polygon.html │ │ ├── Handler.html │ │ ├── Handler │ │ │ ├── Box.html │ │ │ ├── Click.html │ │ │ ├── Drag.html │ │ │ ├── Feature.html │ │ │ ├── Hover.html │ │ │ ├── Keyboard.html │ │ │ ├── MouseWheel.html │ │ │ ├── Path.html │ │ │ ├── Pinch.html │ │ │ ├── Point.html │ │ │ ├── Polygon.html │ │ │ └── RegularPolygon.html │ │ ├── Icon.html │ │ ├── Kinetic.html │ │ ├── Lang.html │ │ ├── Layer.html │ │ ├── Layer │ │ │ ├── ArcGIS93Rest.html │ │ │ ├── ArcGISCache.html │ │ │ ├── ArcGISCache.json │ │ │ ├── ArcIMS.html │ │ │ ├── Bing.html │ │ │ ├── EventPane.html │ │ │ ├── FixedZoomLevels.html │ │ │ ├── GeoRSS.html │ │ │ ├── Google.html │ │ │ ├── Google │ │ │ │ └── v3.html │ │ │ ├── Grid.html │ │ │ ├── HTTPRequest.html │ │ │ ├── Image.html │ │ │ ├── KaMap.html │ │ │ ├── MapGuide.html │ │ │ ├── MapServer.html │ │ │ ├── Markers.html │ │ │ ├── OSM.html │ │ │ ├── PointGrid.html │ │ │ ├── PointTrack.html │ │ │ ├── SphericalMercator.html │ │ │ ├── TMS.html │ │ │ ├── Text.html │ │ │ ├── TileCache.html │ │ │ ├── UTFGrid.html │ │ │ ├── Vector.html │ │ │ ├── Vector │ │ │ │ └── RootContainer.html │ │ │ ├── WMS.html │ │ │ ├── WMTS.html │ │ │ ├── WrapDateLine.html │ │ │ ├── XYZ.html │ │ │ ├── atom-1.0.xml │ │ │ ├── data_Layer_Text_textfile.txt │ │ │ ├── data_Layer_Text_textfile_2.txt │ │ │ ├── data_Layer_Text_textfile_overflow.txt │ │ │ └── georss.txt │ │ ├── Map.html │ │ ├── Marker.html │ │ ├── Marker │ │ │ └── Box.html │ │ ├── OLLoader.js │ │ ├── OpenLayers1.html │ │ ├── OpenLayers2.html │ │ ├── OpenLayers3.html │ │ ├── OpenLayers4.html │ │ ├── OpenLayersJsFiles.html │ │ ├── Popup.html │ │ ├── Popup │ │ │ ├── Anchored.html │ │ │ └── FramedCloud.html │ │ ├── Projection.html │ │ ├── Protocol.html │ │ ├── Protocol │ │ │ ├── CSW.html │ │ │ ├── HTTP.html │ │ │ ├── SOS.html │ │ │ ├── Script.html │ │ │ └── WFS.html │ │ ├── README.txt │ │ ├── Renderer.html │ │ ├── Renderer │ │ │ ├── Canvas.html │ │ │ ├── Elements.html │ │ │ ├── SVG.html │ │ │ └── VML.html │ │ ├── Request.html │ │ ├── Request │ │ │ └── XMLHttpRequest.html │ │ ├── Rule.html │ │ ├── SingleFile1.html │ │ ├── SingleFile2.html │ │ ├── SingleFile3.html │ │ ├── Strategy.html │ │ ├── Strategy │ │ │ ├── BBOX.html │ │ │ ├── Cluster.html │ │ │ ├── Filter.html │ │ │ ├── Fixed.html │ │ │ ├── Paging.html │ │ │ ├── Refresh.html │ │ │ └── Save.html │ │ ├── Style.html │ │ ├── Style2.html │ │ ├── StyleMap.html │ │ ├── Symbolizer.html │ │ ├── Symbolizer │ │ │ ├── Line.html │ │ │ ├── Point.html │ │ │ ├── Polygon.html │ │ │ ├── Raster.html │ │ │ └── Text.html │ │ ├── Test.AnotherWay.baseadditions.js │ │ ├── Test.AnotherWay.css │ │ ├── Test.AnotherWay.geom_eq.js │ │ ├── Test.AnotherWay.js │ │ ├── Test.AnotherWay.xml_eq.js │ │ ├── Tile.html │ │ ├── Tile │ │ │ ├── Image.html │ │ │ ├── Image │ │ │ │ └── IFrame.html │ │ │ └── UTFGrid.html │ │ ├── TileManager.html │ │ ├── Tween.html │ │ ├── Util.html │ │ ├── Util │ │ │ └── vendorPrefix.html │ │ ├── Util_common.js │ │ ├── Util_w3c.html │ │ ├── WPSClient.html │ │ ├── WPSProcess.html │ │ ├── atom-1.0.xml │ │ ├── auto-tests.html │ │ ├── data │ │ │ ├── geos_wkt_intersects.js │ │ │ ├── osm.js │ │ │ └── utfgrid │ │ │ │ ├── bio_utfgrid │ │ │ │ └── 1 │ │ │ │ │ ├── 0 │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ └── 2.json │ │ │ │ │ ├── 1 │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ └── 2.json │ │ │ │ │ └── 2 │ │ │ │ │ ├── 0.json │ │ │ │ │ ├── 1.json │ │ │ │ │ └── 2.json │ │ │ │ ├── demo-1.1.json │ │ │ │ └── world_utfgrid │ │ │ │ └── 1 │ │ │ │ ├── 0 │ │ │ │ ├── 0.json │ │ │ │ ├── 1.json │ │ │ │ └── 2.json │ │ │ │ ├── 1 │ │ │ │ ├── 0.json │ │ │ │ ├── 1.json │ │ │ │ └── 2.json │ │ │ │ └── 2 │ │ │ │ ├── 0.json │ │ │ │ ├── 1.json │ │ │ │ └── 2.json │ │ ├── data_Layer_Text_textfile.txt │ │ ├── data_Layer_Text_textfile_2.txt │ │ ├── data_Layer_Text_textfile_overflow.txt │ │ ├── deprecated │ │ │ ├── Ajax.html │ │ │ ├── BaseTypes │ │ │ │ ├── Class.html │ │ │ │ └── Element.html │ │ │ ├── Control │ │ │ │ └── MouseToolbar.html │ │ │ ├── Geometry │ │ │ │ └── Rectangle.html │ │ │ ├── Layer │ │ │ │ ├── GML.html │ │ │ │ ├── MapServer.html │ │ │ │ ├── MapServer │ │ │ │ │ └── Untiled.html │ │ │ │ ├── WFS.html │ │ │ │ ├── WMS.html │ │ │ │ ├── WMS │ │ │ │ │ └── Post.html │ │ │ │ ├── Yahoo.html │ │ │ │ ├── mice.xml │ │ │ │ └── owls.xml │ │ │ ├── Popup │ │ │ │ └── AnchoredBubble.html │ │ │ ├── Protocol │ │ │ │ ├── SQL.html │ │ │ │ └── SQL │ │ │ │ │ └── Gears.html │ │ │ ├── Renderer │ │ │ │ └── SVG2.html │ │ │ ├── Tile │ │ │ │ └── WFS.html │ │ │ └── Util.html │ │ ├── georss.txt │ │ ├── grid_inittiles.html │ │ ├── index.html │ │ ├── list-tests.html │ │ ├── manual │ │ │ ├── ajax.html │ │ │ ├── ajax.txt │ │ │ ├── alloverlays-mixed.html │ │ │ ├── arcims-2117.html │ │ │ ├── arkansas.rss │ │ │ ├── big-georss.html │ │ │ ├── box-quirks.html │ │ │ ├── box-strict.html │ │ │ ├── clip-features-svg.html │ │ │ ├── dateline-sketch.html │ │ │ ├── dateline-smallextent.html │ │ │ ├── draw-feature.html │ │ │ ├── feature-handler.html │ │ │ ├── geodesic.html │ │ │ ├── geojson-geomcoll-reprojection.html │ │ │ ├── google-fullscreen-overlay.html │ │ │ ├── google-panning.html │ │ │ ├── google-resize.html │ │ │ ├── google-tilt.html │ │ │ ├── google-v3-resize.html │ │ │ ├── loadend.html │ │ │ ├── map-events.html │ │ │ ├── memory │ │ │ │ ├── Marker-2258.html │ │ │ │ ├── PanZoom-2323.html │ │ │ │ ├── RemoveChild-2170.html │ │ │ │ └── VML-2170.html │ │ │ ├── multiple-google-layers.html │ │ │ ├── overviewmap-projection.html │ │ │ ├── page-position.html │ │ │ ├── pan-redraw-svg.html │ │ │ ├── popup-keepInMap.html │ │ │ ├── reflow.html │ │ │ ├── renderedDimensions.html │ │ │ ├── select-feature-right-click.html │ │ │ ├── select-feature.html │ │ │ ├── tiles-loading.html │ │ │ ├── tween.html │ │ │ ├── vector-features-performance.html │ │ │ └── vector-layer-zindex.html │ │ ├── mice.xml │ │ ├── node.js │ │ │ ├── mockdom.js │ │ │ ├── node-tests.cfg │ │ │ ├── node.js │ │ │ ├── run-test.js │ │ │ └── run.sh │ │ ├── owls.xml │ │ ├── run-tests.html │ │ ├── selenium │ │ │ └── remotecontrol │ │ │ │ ├── config.cfg │ │ │ │ ├── selenium.py │ │ │ │ ├── setup.txt │ │ │ │ └── test_ol.py │ │ ├── speed │ │ │ ├── geometry.html │ │ │ ├── string_format.html │ │ │ ├── vector-renderers.html │ │ │ ├── vector-renderers.js │ │ │ ├── wmc_speed.html │ │ │ ├── wmscaps.html │ │ │ ├── wmscaps.js │ │ │ └── wmscaps.xml │ │ └── throws.js │ ├── theme │ │ └── default │ │ │ ├── google.css │ │ │ ├── google.tidy.css │ │ │ ├── ie6-style.css │ │ │ ├── ie6-style.tidy.css │ │ │ ├── img │ │ │ ├── add_point_off.png │ │ │ ├── add_point_on.png │ │ │ ├── blank.gif │ │ │ ├── close.gif │ │ │ ├── drag-rectangle-off.png │ │ │ ├── drag-rectangle-on.png │ │ │ ├── draw_line_off.png │ │ │ ├── draw_line_on.png │ │ │ ├── draw_point_off.png │ │ │ ├── draw_point_on.png │ │ │ ├── draw_polygon_off.png │ │ │ ├── draw_polygon_on.png │ │ │ ├── editing_tool_bar.png │ │ │ ├── move_feature_off.png │ │ │ ├── move_feature_on.png │ │ │ ├── navigation_history.png │ │ │ ├── overview_replacement.gif │ │ │ ├── pan-panel-NOALPHA.png │ │ │ ├── pan-panel.png │ │ │ ├── pan_off.png │ │ │ ├── pan_on.png │ │ │ ├── panning-hand-off.png │ │ │ ├── panning-hand-on.png │ │ │ ├── remove_point_off.png │ │ │ ├── remove_point_on.png │ │ │ ├── ruler.png │ │ │ ├── save_features_off.png │ │ │ ├── save_features_on.png │ │ │ ├── view_next_off.png │ │ │ ├── view_next_on.png │ │ │ ├── view_previous_off.png │ │ │ ├── view_previous_on.png │ │ │ ├── zoom-panel-NOALPHA.png │ │ │ └── zoom-panel.png │ │ │ ├── style.css │ │ │ ├── style.mobile.css │ │ │ ├── style.mobile.tidy.css │ │ │ └── style.tidy.css │ └── tools │ │ ├── BeautifulSoup.py │ │ ├── README.txt │ │ ├── closure_library_jscompiler.py │ │ ├── closure_ws.py │ │ ├── exampleparser.py │ │ ├── jsmin.c │ │ ├── jsmin.py │ │ ├── mergejs.py │ │ ├── minimize.py │ │ ├── oldot.py │ │ ├── release.sh │ │ ├── shrinksafe.py │ │ ├── toposort.py │ │ ├── uglify_js.py │ │ └── update_dev_dir.sh ├── point.html ├── point.js ├── style │ ├── image.css │ ├── index.css │ └── point.css └── video.html ├── package-lock.json ├── package.json ├── providers └── AppProvider.ts ├── readme_assets ├── example.gif ├── image.png ├── map.png ├── point.png ├── sat.png └── video.png ├── server.ts ├── start ├── kernel.ts └── routes.ts └── tsconfig.json /.adonisrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript": true, 3 | "commands": [ 4 | "./commands", 5 | "@adonisjs/core/build/commands", 6 | "@adonisjs/repl/build/commands", 7 | "@adonisjs/lucid/build/commands" 8 | ], 9 | "exceptionHandlerNamespace": "App/Exceptions/Handler", 10 | "aliases": { 11 | "App": "app", 12 | "Config": "config", 13 | "Database": "database", 14 | "Contracts": "contracts" 15 | }, 16 | "preloads": [ 17 | "./start/routes", 18 | "./start/kernel" 19 | ], 20 | "providers": [ 21 | "./providers/AppProvider", 22 | "@adonisjs/core", 23 | "@adonisjs/lucid" 24 | ], 25 | "aceProviders": [ 26 | "@adonisjs/repl" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | 2 | [*] 3 | indent_style = space 4 | indent_size = 2 5 | end_of_line = lf 6 | charset = utf-8 7 | trim_trailing_whitespace = true 8 | insert_final_newline = true 9 | 10 | [*.json] 11 | insert_final_newline = ignore 12 | 13 | [*.md] 14 | trim_trailing_whitespace = false 15 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | PORT=3333 2 | HOST=0.0.0.0 3 | NODE_ENV=development 4 | APP_KEY=rOsXqkDuqIcnyzo9pcEhHZhECz80_bH0 5 | DB_CONNECTION=mysql 6 | MYSQL_HOST=localhost 7 | MYSQL_PORT=3306 8 | MYSQL_USER=lucid 9 | MYSQL_PASSWORD= 10 | MYSQL_DB_NAME=lucid 11 | FILE_ROOT=C:\example\dir 12 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | build 2 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "plugin:adonis/typescriptApp" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | coverage 4 | .vscode 5 | .DS_STORE 6 | .env 7 | tmp 8 | files 9 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:lts 2 | 3 | ENV APP_NAME="dronemap" \ 4 | PORT=3333 \ 5 | HOST=0.0.0.0 \ 6 | NODE_ENV=production \ 7 | APP_KEY=t0c5GoBssSB1RIWf5jAsq_MU0q8Zf23j \ 8 | DB_CONNECTION=mysql \ 9 | MYSQL_HOST=localhost \ 10 | MYSQL_PORT=3306 \ 11 | MYSQL_USER=dronemap \ 12 | MYSQL_PASSWORD= \ 13 | MYSQL_DB_NAME=dronemap \ 14 | FILE_ROOT=/footage 15 | 16 | RUN mkdir /footage 17 | 18 | WORKDIR /app 19 | 20 | COPY build . 21 | COPY entry.sh . 22 | COPY frontend frontend 23 | 24 | RUN apt update && apt install -y ffmpeg 25 | EXPOSE 3333 26 | 27 | RUN npm ci --production 28 | ENTRYPOINT ["/bin/bash", "entry.sh"] 29 | -------------------------------------------------------------------------------- /ace: -------------------------------------------------------------------------------- 1 | /* 2 | |-------------------------------------------------------------------------- 3 | | Ace Commands 4 | |-------------------------------------------------------------------------- 5 | | 6 | | This file is the entry point for running ace commands. 7 | | 8 | */ 9 | 10 | require('reflect-metadata') 11 | require('source-map-support').install({ handleUncaughtExceptions: false }) 12 | 13 | const { Ignitor } = require('@adonisjs/core/build/standalone') 14 | new Ignitor(__dirname) 15 | .ace() 16 | .handle(process.argv.slice(2)) 17 | -------------------------------------------------------------------------------- /app/Controllers/Http/ImagesController.ts: -------------------------------------------------------------------------------- 1 | import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext' 2 | import Image from 'App/Models/Image' 3 | import fs from 'fs' 4 | 5 | export default class ImagesController { 6 | 7 | public async show({params, response}: HttpContextContract) { 8 | 9 | const img = await Image.find(params.imageId) 10 | if (img == null) { 11 | response.status(404).send("File not found") 12 | return 13 | } 14 | 15 | await img.load('file') 16 | response.stream(fs.createReadStream(process.env.FILE_ROOT + img.file.filePath)) 17 | 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /app/Exceptions/Handler.ts: -------------------------------------------------------------------------------- 1 | /* 2 | |-------------------------------------------------------------------------- 3 | | Http Exception Handler 4 | |-------------------------------------------------------------------------- 5 | | 6 | | AdonisJs will forward all exceptions occurred during an HTTP request to 7 | | the following class. You can learn more about exception handling by 8 | | reading docs. 9 | | 10 | | The exception handler extends a base `HttpExceptionHandler` which is not 11 | | mandatory, however it can do lot of heavy lifting to handle the errors 12 | | properly. 13 | | 14 | */ 15 | 16 | import Logger from '@ioc:Adonis/Core/Logger' 17 | import HttpExceptionHandler from '@ioc:Adonis/Core/HttpExceptionHandler' 18 | 19 | export default class ExceptionHandler extends HttpExceptionHandler { 20 | constructor () { 21 | super(Logger) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /commands/index.ts: -------------------------------------------------------------------------------- 1 | import { listDirectoryFiles } from '@adonisjs/core/build/standalone' 2 | import Application from '@ioc:Adonis/Core/Application' 3 | 4 | /* 5 | |-------------------------------------------------------------------------- 6 | | Exporting an array of commands 7 | |-------------------------------------------------------------------------- 8 | | 9 | | Instead of manually exporting each file from this directory, we use the 10 | | helper `listDirectoryFiles` to recursively collect and export an array 11 | | of filenames. 12 | | 13 | | Couple of things to note: 14 | | 15 | | 1. The file path must be relative from the project root and not this directory. 16 | | 2. We must ignore this file to avoid getting into an infinite loop 17 | | 18 | */ 19 | export default listDirectoryFiles(__dirname, Application.appRoot, ['./commands/index']) 20 | -------------------------------------------------------------------------------- /contracts/env.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Contract source: https://git.io/JTm6U 3 | * 4 | * Feel free to let us know via PR, if you find something broken in this contract 5 | * file. 6 | */ 7 | 8 | declare module '@ioc:Adonis/Core/Env' { 9 | /* 10 | |-------------------------------------------------------------------------- 11 | | Getting types for validated environment variables 12 | |-------------------------------------------------------------------------- 13 | | 14 | | The `default` export from the "../env.ts" file exports types for the 15 | | validated environment variables. Here we merge them with the `EnvTypes` 16 | | interface so that you can enjoy intellisense when using the "Env" 17 | | module. 18 | | 19 | */ 20 | 21 | type CustomTypes = typeof import("../env").default; 22 | interface EnvTypes extends CustomTypes { 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /contracts/events.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Contract source: https://git.io/JfefG 3 | * 4 | * Feel free to let us know via PR, if you find something broken in this contract 5 | * file. 6 | */ 7 | 8 | declare module '@ioc:Adonis/Core/Event' { 9 | /* 10 | |-------------------------------------------------------------------------- 11 | | Define typed events 12 | |-------------------------------------------------------------------------- 13 | | 14 | | You can define types for events inside the following interface and 15 | | AdonisJS will make sure that all listeners and emit calls adheres 16 | | to the defined types. 17 | | 18 | | For example: 19 | | 20 | | interface EventsList { 21 | | 'new:user': UserModel 22 | | } 23 | | 24 | | Now calling `Event.emit('new:user')` will statically ensure that passed value is 25 | | an instance of the the UserModel only. 26 | | 27 | */ 28 | interface EventsList { 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /contracts/hash.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Contract source: https://git.io/Jfefs 3 | * 4 | * Feel free to let us know via PR, if you find something broken in this contract 5 | * file. 6 | */ 7 | 8 | declare module '@ioc:Adonis/Core/Hash' { 9 | interface HashersList { 10 | bcrypt: { 11 | config: BcryptConfig, 12 | implementation: BcryptContract, 13 | }, 14 | argon: { 15 | config: ArgonConfig, 16 | implementation: ArgonContract, 17 | }, 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /database/factories/index.ts: -------------------------------------------------------------------------------- 1 | // import Factory from '@ioc:Adonis/Lucid/Factory' 2 | -------------------------------------------------------------------------------- /database/migrations/1623681218409_files.ts: -------------------------------------------------------------------------------- 1 | import BaseSchema from '@ioc:Adonis/Lucid/Schema' 2 | 3 | export default class Files extends BaseSchema { 4 | protected tableName = 'files' 5 | 6 | public async up () { 7 | this.schema.createTable(this.tableName, (table) => { 8 | table.uuid('id').primary() 9 | table.string('file_path').notNullable().unique() 10 | table.string('sha256').notNullable() 11 | table.bigInteger('size') 12 | table.timestamps(true, true) 13 | }) 14 | } 15 | 16 | public async down () { 17 | this.schema.dropTable(this.tableName) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /database/migrations/1623695892266_videos.ts: -------------------------------------------------------------------------------- 1 | import BaseSchema from '@ioc:Adonis/Lucid/Schema' 2 | 3 | export default class Videos extends BaseSchema { 4 | protected tableName = 'videos' 5 | 6 | public async up () { 7 | this.schema.createTable(this.tableName, (table) => { 8 | table.uuid('id').primary() 9 | table.uuid('file_id').nullable() 10 | table.foreign('file_id').references('id').inTable('files').onDelete('CASCADE') 11 | table.string('extension') 12 | table.string('length') 13 | table.integer('resolution_width') 14 | table.integer('resolution_height') 15 | table.dateTime('date_shot') 16 | table.timestamps(true, true) 17 | }) 18 | } 19 | 20 | public async down () { 21 | this.schema.dropTable(this.tableName) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /database/migrations/1623700847990_video_data_points.ts: -------------------------------------------------------------------------------- 1 | import BaseSchema from '@ioc:Adonis/Lucid/Schema' 2 | 3 | export default class VideoDataPoints extends BaseSchema { 4 | protected tableName = 'video_data_points' 5 | 6 | public async up () { 7 | this.schema.createTable(this.tableName, (table) => { 8 | table.uuid('id').primary() 9 | table.uuid('video_id').nullable() 10 | table.foreign('video_id').references('id').inTable('videos').onDelete('CASCADE') 11 | table.integer('sequence_number').notNullable() 12 | table.float('start_seconds').notNullable() 13 | table.float('focal_length') 14 | table.float('shutter_speed') 15 | table.integer('iso') 16 | table.float('ev') 17 | table.float('dzoom') 18 | table.float('gps_longitude', 8, 4) 19 | table.float('gps_lattitude', 8, 4) 20 | table.integer('gps_count') 21 | table.float('distance') 22 | table.float('height') 23 | table.float('horizontal_speed') 24 | table.float('vertical_speed') 25 | table.timestamps(true, true) 26 | }) 27 | } 28 | 29 | public async down () { 30 | this.schema.dropTable(this.tableName) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /database/migrations/1624027532993_images.ts: -------------------------------------------------------------------------------- 1 | import BaseSchema from '@ioc:Adonis/Lucid/Schema' 2 | 3 | export default class Images extends BaseSchema { 4 | protected tableName = 'images' 5 | 6 | public async up () { 7 | this.schema.createTable(this.tableName, (table) => { 8 | table.uuid('id').primary() 9 | table.uuid('file_id').nullable() 10 | table.foreign('file_id').references('id').inTable('files').onDelete('CASCADE') 11 | table.integer('width') 12 | table.integer('height') 13 | table.integer('x_dpi') 14 | table.integer('y_dpi') 15 | table.dateTime('shot_at') 16 | table.float('gps_longitude', 12, 8) 17 | table.float('gps_latitude', 12, 8) 18 | table.float('gps_altitude', 12, 8) 19 | table.float('f_stop') 20 | table.float('focal_length') 21 | table.float('exposure_time', 8, 4) 22 | table.integer('ISO') 23 | table.float('aperture', 8, 4) 24 | table.float('dzoom') 25 | table.float('white_balance') 26 | table.float('ev') 27 | table.float('shutter_speed') 28 | table.timestamps(true, true) 29 | }) 30 | } 31 | 32 | public async down () { 33 | this.schema.dropTable(this.tableName) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | dronemap: 3 | image: vimodev/dronemap:latest 4 | ports: 5 | - "3333:3333" 6 | restart: unless-stopped 7 | environment: 8 | - DB_CONNECTION=mysql 9 | - MYSQL_HOST=dronemap_database 10 | - MYSQL_PORT=3306 11 | - MYSQL_USER=dronemap 12 | - MYSQL_PASSWORD=2024cad0b930c 13 | - MYSQL_DB_NAME=dronemap 14 | - TZ=Europe/Amsterdam 15 | volumes: 16 | - "/path/to/your/files:/footage:ro" 17 | depends_on: 18 | - dronemap_database 19 | networks: 20 | - dronemap-network 21 | 22 | dronemap_database: 23 | image: mariadb:10 24 | environment: 25 | - MYSQL_DATABASE=dronemap 26 | - MYSQL_USER=dronemap 27 | - MYSQL_PASSWORD=2024cad0b930c 28 | - MYSQL_RANDOM_ROOT_PASSWORD=yes 29 | - TZ=Europe/Amsterdam 30 | networks: 31 | - dronemap-network 32 | ports: 33 | - "3306:3306" 34 | restart: unless-stopped 35 | 36 | 37 | networks: 38 | dronemap-network: 39 | driver: bridge 40 | enable_ipv6: false 41 | ipam: 42 | driver: default 43 | config: 44 | - subnet: 10.10.10.0/24 45 | -------------------------------------------------------------------------------- /entry.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | sleep 10 3 | node ace migration:run --force 4 | node server.js 5 | 6 | -------------------------------------------------------------------------------- /env.ts: -------------------------------------------------------------------------------- 1 | /* 2 | |-------------------------------------------------------------------------- 3 | | Validating Environment Variables 4 | |-------------------------------------------------------------------------- 5 | | 6 | | In this file we define the rules for validating environment variables. 7 | | By performing validation we ensure that your application is running in 8 | | a stable environment with correct configuration values. 9 | | 10 | | This file is read automatically by the framework during the boot lifecycle 11 | | and hence do not rename or move this file to a different location. 12 | | 13 | */ 14 | 15 | import Env from '@ioc:Adonis/Core/Env' 16 | 17 | export default Env.rules({ 18 | HOST: Env.schema.string({ format: 'host' }), 19 | PORT: Env.schema.number(), 20 | APP_KEY: Env.schema.string(), 21 | APP_NAME: Env.schema.string(), 22 | NODE_ENV: Env.schema.enum(['development', 'production', 'testing'] as const), 23 | FILE_ROOT: Env.schema.string(), 24 | }) 25 | -------------------------------------------------------------------------------- /frontend/assets/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vimodev/dronemap/210d54b32bbebf74fc1eab7c3f85eef92e30017d/frontend/assets/thumbnail.png -------------------------------------------------------------------------------- /frontend/image.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |