Not working, but I believe it is progress.

This commit is contained in:
Simon Brooke 2020-04-08 13:29:14 +01:00
parent 65f1e98c05
commit 7f1ab40290
No known key found for this signature in database
GPG key ID: A7A4F18D1D4DF987
5 changed files with 787 additions and 9 deletions

View file

@ -35,6 +35,11 @@ Note that, unlike in **geocsv**, *THERE IS NO DEFAULT PIN*, as there is no serve
1. There is no `category` column, or
2. If the `category` column is empty
## Other formats
`geocsv-lite` now experimentally displays GPX and KML formated XML, by using [leaflet-omnivore](https://github.com/mapbox/leaflet-omnivore). While `leaflet-omnivore` also parses CSV, it doesn't
handle the CSV as richly as GeoCSV does natively, so we don't use Omnivore to parse CSV.
## Setup
To get an interactive development environment run:

View file

@ -16,7 +16,8 @@
[lein-npm "0.6.2"]]
:npm {:dependencies [[papaparse "5.1.0"]
[leaflet "1.6.0"]]
[leaflet "1.6.0"]
[leaflet-omnivore "0.3.4"]]
:root "resources/public/vendor"}
:source-paths ["src"]
@ -56,7 +57,7 @@
:pretty-print true
:warnings true}}]}
:figwheel {:http-server-root "../"
:figwheel {;; :http-server-root "../"
;; :server-port 3449 ;; default
;; :server-ip "127.0.0.1"

View file

@ -101,6 +101,15 @@ crossorigin=""/ -->
</p>
<div id="url-map"
style="height: 600px; width: 80%; border: thin solid gray;"></div>
<h2>
Map using KML from URL
</h2>
<p>
This is more limited than I would like, because of cross-site scripting
blocks; the URL <b>must</b> be sourced from the same host as the page.
</p>
<div id="kml-map"
style="height: 600px; width: 80%; border: thin solid gray;"></div>
<div id="doc">
<p>
Use this page as a crib for how to use <b>GeoCSV Lite</b> in your projects. In order
@ -193,6 +202,7 @@ integrity="sha512-gZwIG9x3wUXg2hdXF6+rVkLF/0Vi9U8D2Ntg4Ga5I5BZpVkVxlJWbSQtXPSiUT
crossorigin=""></script -->
<!-- script src="https://cdnjs.cloudflare.com/ajax/libs/PapaParse/5.1.0/papaparse.min.js"></script -->
<script src="vendor/node_modules/leaflet/dist/leaflet.js"></script>
<script src="vendor/node_modules/leaflet-omnivore/leaflet-omnivore.min.js"></script>
<script src="vendor/node_modules/papaparse/papaparse.min.js"></script>
<script src="js/compiled/geocsv_lite.js" type="text/javascript"></script>
<script>
@ -267,9 +277,12 @@ crossorigin=""></script -->
url = url.substring(0, window.location.href.length - "index.html".length);
}
url = url + "data/europe-capitals.csv";
var csv_url = url + "data/europe-capitals.csv";
geocsv_lite.core.initialise_map_element("url-map", url);
geocsv_lite.core.initialise_map_element("url-map", csv_url);
/* Map using KML from URL */
geocsv_lite.core.initialise_map_element("kml-map", url + "data/wild-lands/doc.kml");
</script>
</body>
</html>

View file

@ -4,15 +4,663 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"acorn": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz",
"integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg=="
},
"amdefine": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
"optional": true
},
"brfs": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/brfs/-/brfs-1.4.3.tgz",
"integrity": "sha1-22ddb16SPm3wh/ylhZyQkKrtMhY=",
"requires": {
"quote-stream": "^1.0.1",
"resolve": "^1.1.5",
"static-module": "^1.1.0",
"through2": "^2.0.0"
}
},
"buffer-equal": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
"integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs="
},
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
},
"concat-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"requires": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^2.2.2",
"typedarray": "^0.0.6"
}
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"corslite": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/corslite/-/corslite-0.0.7.tgz",
"integrity": "sha1-jkUdtTIKdVbeHveNm9NWY0MHdyE="
},
"csv2geojson": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/csv2geojson/-/csv2geojson-5.0.2.tgz",
"integrity": "sha1-q9ZJ8uxXaJIZrU8Z0zO+dUVrb1k=",
"requires": {
"concat-stream": "~1.5.1",
"d3-dsv": "1.0.1",
"optimist": "~0.6.1",
"sexagesimal": "0.5.0"
},
"dependencies": {
"concat-stream": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
"integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
"requires": {
"inherits": "~2.0.1",
"readable-stream": "~2.0.0",
"typedarray": "~0.0.5"
}
},
"process-nextick-args": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
"integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
},
"readable-stream": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
"integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "~1.0.0",
"process-nextick-args": "~1.0.6",
"string_decoder": "~0.10.x",
"util-deprecate": "~1.0.1"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
}
}
},
"d3": {
"version": "3.5.17",
"resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz",
"integrity": "sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g="
},
"d3-dsv": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.1.tgz",
"integrity": "sha1-1JU0fATLHg0mVXu9xHdcTRGiReo=",
"requires": {
"rw": "1"
}
},
"d3-geo-projection": {
"version": "0.2.16",
"resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-0.2.16.tgz",
"integrity": "sha1-SZTs0QM92xUztsTFUoocgdzClCc=",
"requires": {
"brfs": "^1.3.0"
}
},
"d3-queue": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-2.0.3.tgz",
"integrity": "sha1-B/vaOsrlNYqcUpmq+ICt8JU+0sI="
},
"duplexer2": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
"integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
"requires": {
"readable-stream": "~1.1.9"
},
"dependencies": {
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"readable-stream": {
"version": "1.1.14",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
"integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "0.0.1",
"string_decoder": "~0.10.x"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
}
}
},
"escodegen": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.3.3.tgz",
"integrity": "sha1-8CQBb1qI4Eb9EgBQVek5gC5sXyM=",
"requires": {
"esprima": "~1.1.1",
"estraverse": "~1.5.0",
"esutils": "~1.0.0",
"source-map": "~0.1.33"
}
},
"esprima": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-1.1.1.tgz",
"integrity": "sha1-W28VR/TRAuZw4UDFCb5ncdautUk="
},
"estraverse": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz",
"integrity": "sha1-hno+jlip+EYYr7bC3bzZFrfLr3E="
},
"esutils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz",
"integrity": "sha1-gVHTWOIMisx/t0XnRywAJf5JZXA="
},
"falafel": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.4.tgz",
"integrity": "sha512-0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ==",
"requires": {
"acorn": "^7.1.1",
"foreach": "^2.0.5",
"isarray": "^2.0.1",
"object-keys": "^1.0.6"
},
"dependencies": {
"isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
}
}
},
"foreach": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
"integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"requires": {
"function-bind": "^1.1.1"
}
},
"iconv-lite": {
"version": "0.2.11",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz",
"integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg="
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"leaflet": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.6.0.tgz",
"integrity": "sha512-CPkhyqWUKZKFJ6K8umN5/D2wrJ2+/8UIpXppY7QDnUZW5bZL5+SEI2J7GBpwh4LIupOKqbNSQXgqmrEJopHVNQ=="
},
"leaflet-omnivore": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/leaflet-omnivore/-/leaflet-omnivore-0.3.4.tgz",
"integrity": "sha1-v6fC4eah19wIAqn1q+6Nn+vxeuw=",
"requires": {
"brfs": "1.4.3",
"corslite": "0.0.7",
"csv2geojson": "~5.0.0",
"polyline": "0.2.0",
"togeojson": "0.13.0",
"topojson": "1.6.26",
"wellknown": "0.4.2"
}
},
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"object-inspect": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-0.4.0.tgz",
"integrity": "sha1-9RV8EWwUVbJDsG7pdwM5LFrYn+w="
},
"object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
},
"optimist": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
"integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
"requires": {
"minimist": "~0.0.1",
"wordwrap": "~0.0.2"
},
"dependencies": {
"minimist": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
"integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
}
}
},
"papaparse": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.1.0.tgz",
"integrity": "sha512-3jEYMiCc8qN7V5ffi2BTS2mRauKxCu5AIED6DxbjnHhIm7OY7fzKYkndfPlHWaaKUDCTml5XTU6V+hiuxGlZuw=="
},
"path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
},
"polyline": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/polyline/-/polyline-0.2.0.tgz",
"integrity": "sha1-TytxbKgRNKbLqkiJddI27LHMKEA="
},
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"quote-stream": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz",
"integrity": "sha1-hJY/jJwmuULhU/7rU6rnRlK34LI=",
"requires": {
"buffer-equal": "0.0.1",
"minimist": "^1.1.3",
"through2": "^2.0.0"
}
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"resolve": {
"version": "1.15.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
"integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
"requires": {
"path-parse": "^1.0.6"
}
},
"rw": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
"integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q="
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"sexagesimal": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/sexagesimal/-/sexagesimal-0.5.0.tgz",
"integrity": "sha1-nYFb0r3dY0tiW6aFG/j+dKWtPvM="
},
"shallow-copy": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz",
"integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA="
},
"shapefile": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/shapefile/-/shapefile-0.3.1.tgz",
"integrity": "sha1-m7mkKb1ghqDPsDli0Uz99CD/uhI=",
"requires": {
"d3-queue": "1",
"iconv-lite": "0.2",
"optimist": "0.3"
},
"dependencies": {
"d3-queue": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-1.2.3.tgz",
"integrity": "sha1-FDpwHPpl/gISkvMhwQ0U6Yq9SRs="
},
"optimist": {
"version": "0.3.7",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
"integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
"requires": {
"wordwrap": "~0.0.2"
}
}
}
},
"source-map": {
"version": "0.1.43",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
"integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
"optional": true,
"requires": {
"amdefine": ">=0.0.4"
}
},
"static-eval": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/static-eval/-/static-eval-0.2.4.tgz",
"integrity": "sha1-t9NNg4k3uWn5ZBygfUj47eJj6ns=",
"requires": {
"escodegen": "~0.0.24"
},
"dependencies": {
"escodegen": {
"version": "0.0.28",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-0.0.28.tgz",
"integrity": "sha1-Dk/xcV8yh3XWyrUaxEpAbNer/9M=",
"requires": {
"esprima": "~1.0.2",
"estraverse": "~1.3.0",
"source-map": ">= 0.1.2"
}
},
"esprima": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
"integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0="
},
"estraverse": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.3.2.tgz",
"integrity": "sha1-N8K4k+8T1yPydth41g2FNRUqbEI="
}
}
},
"static-module": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/static-module/-/static-module-1.5.0.tgz",
"integrity": "sha1-J9qYg8QajNCSNvhC8MHrxu32PYY=",
"requires": {
"concat-stream": "~1.6.0",
"duplexer2": "~0.0.2",
"escodegen": "~1.3.2",
"falafel": "^2.1.0",
"has": "^1.0.0",
"object-inspect": "~0.4.0",
"quote-stream": "~0.0.0",
"readable-stream": "~1.0.27-1",
"shallow-copy": "~0.0.1",
"static-eval": "~0.2.0",
"through2": "~0.4.1"
},
"dependencies": {
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
},
"object-keys": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
"integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY="
},
"quote-stream": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-0.0.0.tgz",
"integrity": "sha1-zeKelMQJsW4Z3HCYuJtmWPlyHTs=",
"requires": {
"minimist": "0.0.8",
"through2": "~0.4.1"
}
},
"readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "0.0.1",
"string_decoder": "~0.10.x"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
},
"through2": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz",
"integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=",
"requires": {
"readable-stream": "~1.0.17",
"xtend": "~2.1.1"
}
},
"xtend": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
"integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
"requires": {
"object-keys": "~0.4.0"
}
}
}
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
"safe-buffer": "~5.1.0"
}
},
"through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
"integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
"requires": {
"readable-stream": "~2.3.6",
"xtend": "~4.0.1"
}
},
"togeojson": {
"version": "0.13.0",
"resolved": "https://registry.npmjs.org/togeojson/-/togeojson-0.13.0.tgz",
"integrity": "sha1-BpiJCgYpN1WA8lRogBRleuk76JQ=",
"requires": {
"concat-stream": "~1.4.5",
"minimist": "0.0.8",
"xmldom": "~0.1.19"
},
"dependencies": {
"concat-stream": {
"version": "1.4.11",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.11.tgz",
"integrity": "sha512-X3JMh8+4je3U1cQpG87+f9lXHDrqcb2MVLg9L7o8b1UZ0DzhRrUpdn65ttzu10PpJPPI3MQNkis+oha6TSA9Mw==",
"requires": {
"inherits": "~2.0.1",
"readable-stream": "~1.1.9",
"typedarray": "~0.0.5"
}
},
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
},
"readable-stream": {
"version": "1.1.14",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
"integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "0.0.1",
"string_decoder": "~0.10.x"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
}
}
},
"topojson": {
"version": "1.6.26",
"resolved": "https://registry.npmjs.org/topojson/-/topojson-1.6.26.tgz",
"integrity": "sha1-Nl+IpeGFirBkhy2bloSW+pI4V60=",
"requires": {
"d3": "3",
"d3-geo-projection": "0.2",
"d3-queue": "2",
"optimist": "0.3",
"rw": "1",
"shapefile": "0.3"
},
"dependencies": {
"optimist": {
"version": "0.3.7",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
"integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
"requires": {
"wordwrap": "~0.0.2"
}
}
}
},
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"wellknown": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/wellknown/-/wellknown-0.4.2.tgz",
"integrity": "sha1-n037xvV5NOCRD35rP0PDkRYtp/M=",
"requires": {
"concat-stream": "~1.5.0",
"minimist": "~1.1.2"
},
"dependencies": {
"concat-stream": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
"integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
"requires": {
"inherits": "~2.0.1",
"readable-stream": "~2.0.0",
"typedarray": "~0.0.5"
}
},
"minimist": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz",
"integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag="
},
"process-nextick-args": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
"integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
},
"readable-stream": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
"integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "~1.0.0",
"process-nextick-args": "~1.0.6",
"string_decoder": "~0.10.x",
"util-deprecate": "~1.0.1"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
}
}
},
"wordwrap": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
"integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
},
"xmldom": {
"version": "0.1.31",
"resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz",
"integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ=="
},
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
}
}
}

View file

@ -9,7 +9,6 @@
[geocsv-lite.notify :as n]))
(defn get-query-part-as-map
"Returns the query part of the current document URL as a keyword-string map."
;; not actually used in the current incarnation
@ -87,11 +86,93 @@
(default-handler response k))))
(defn get-data
"Get data for the view identified by this keyword `k` from this `data-source`.
The data source may be a URL, or a CSV or JSON formatted string."
(defn identify-url-format
"Assuming `data` is a url, infer its probable data type from the file
extension if any; if no obvious file extension, return null"
[data]
(let [extn (re-find #"\.[A-Za-z0-9]{3,4}$" data)]
(if extn {:type :url
:format (keyword (subs (cs/lower-case extn) 1))})))
;; (identify-url-format "data/europe-capitals.csv")
;; (identify-url-format "data/wild-lands/doc.kml")
(defn kml?
"Return non-nil if this `data` appears to be XML text with a namespace
appropriate to KML 2.2."
[data]
(re-find #" +xmlns=[\"\']http://www.opengis.net/kml/2.2[\"\']" data))
;; (kml? "<?xml version=\"1.0\" ?><kml xmlns=\"http://www.opengis.net/kml/2.2\">
;; <Document><Folder><name>WILDLAND_SCOTLAND</name>")
(defn gpx?
"Return non-nil if this `data` appears to be XML text with a namespace
appropriate to GPX 1.1."
[data]
(re-find #" +xmlns=[\"\']http://www.topografix.com/GPX/1/1[\"\']" data))
;; (gpx? "<gpx xmlns=\"http://www.topografix.com/GPX/1/1\"
;; xmlns:gpxx=\"http://www.garmin.com/xmlschemas/GpxExtensions/v3\"
;; xmlns:gpxtpx=\"http://www.garmin.com/xmlschemas/TrackPointExtension/v1\"
;; creator=\"Oregon 400t\" version=\"1.1\"
;; xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
;; xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd\">
;; <metadata>
;; <link href=\"http://www.garmin.com\">
;; <text>Garmin International</text>
;; </link>
;; <time>2009-10-17T22:58:43Z</time>
;; </metadata>
;; <trk>
;; <name>Example GPX Document</name>
;; <trkseg>
;; <trkpt lat=\"47.644548\" lon=\"-122.326897\">
;; <ele>4.46</ele>
;; <time>2009-10-17T18:37:26Z</time>
;; </trkpt>
;; <trkpt lat=\"47.644548\" lon=\"-122.326897\">
;; <ele>4.94</ele>
;; <time>2009-10-17T18:37:31Z</time>
;; </trkpt>
;; <trkpt lat=\"47.644548\" lon=\"-122.326897\">
;; <ele>6.87</ele>
;; <time>2009-10-17T18:37:34Z</time>
;; </trkpt>
;; </trkseg>
;; </trk>
;; </gpx>")
(defn identify-data-format
"Assuming that `data` is inline data, not a URL, try to infer its format;
default to `:csv`."
[data]
{:type :inline
:format
(case (first (cs/triml data))
("{" "[") :json
"<" (cond
(kml? data) :kml
(gpx? data) :gpx
:else
:xml)
:csv)})
;; (identify-data-format "<?xml version=\"1.0\" ?><kml xmlns=\"http://www.opengis.net/kml/2.2\">
;; <Document><Folder><name>WILDLAND_SCOTLAND</name>")
(defn identify-format
[data]
(or (identify-url-format data) (identify-data-format data)))
(identify-format "<?xml version=\"1.0\" ?><kml xmlns=\"http://www.opengis.net/kml/2.2\">
<Document><Folder><name>WILDLAND_SCOTLAND</name>")
(identify-format "data/europe-capitals.csv")
(defn show-data-from-csv
"Show data from this `data-source`, assumed to be either a CSV URL or else inline
CSV text, on the map identified by `k`."
[k data-source]
(js/console.debug (str "get-data: k = `" k "`; data-source = `" data-source "`"))
(let [p (js->clj (.parse js/Papa data-source) :keywordize-keys true)
data (if
(empty? (:errors p))
@ -114,6 +195,36 @@
:else
(get-data-from-uri k data-source))))
(defn show-data-with-omnivore
"Show data from this `data-source`, having the inferred format `f`, in the
map view identified by `k`."
[f k data-source]
(let [view (get-view k)]
(if-not
(case (:format f)
:gpx (case (:type f)
:url (.addTo (.gpx js/omnivore data-source) view))
:kml (case (:type f)
:url (.addTo (.kml js/omnivore data-source) view))
:json ;; assuming geojson here, which is dodgy.
(case (:type f)
:url (.addTo (.kml js/omnivore data-source) view)))
(n/error (str "Cannot yet handle " f)))))
(defn get-data
"Get data for the view identified by this keyword `k` from this `data-source`.
The data source may be a URL, or a CSV or JSON formatted string."
[k data-source]
(let [f (identify-format data-source)]
(js/console.debug (str "get-data: k = `" k
"`; data-source = `" data-source
"`; handled as `" f "`"))
(case
(:format f)
:csv (show-data-from-csv k data-source)
(:kml :gpx :json) (show-data-with-omnivore f k data-source)
;; default
(n/error (str "Not able to display " f)))))
(defn get-data-with-uri-and-handler
[uri handler-fn k]