├── .browserslistrc
├── .eslintrc.js
├── .gitignore
├── .postcssrc.js
├── README.md
├── deploy.sh
├── docs
├── 200.html
├── css
│ └── app.2772cfea.css
├── favicon.ico
├── index.html
└── js
│ ├── app.c766263a.js
│ ├── app.c766263a.js.map
│ ├── chunk-vendors.e6dfc605.js
│ └── chunk-vendors.e6dfc605.js.map
├── package-lock.json
├── package.json
├── public
├── favicon.ico
└── index.html
├── src
├── App.vue
├── components
│ └── Guesser.vue
└── main.js
├── vue.config.js
└── yarn.lock
/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not ie <= 8
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: {
4 | node: true
5 | },
6 | 'extends': [
7 | 'plugin:vue/essential',
8 | 'eslint:recommended'
9 | ],
10 | rules: {
11 | 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
12 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
13 | },
14 | parserOptions: {
15 | parser: 'babel-eslint'
16 | }
17 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 | # local env files
6 | .env.local
7 | .env.*.local
8 |
9 | # Log files
10 | npm-debug.log*
11 | yarn-debug.log*
12 | yarn-error.log*
13 |
14 | # Editor directories and files
15 | .idea
16 | .vscode
17 | *.suo
18 | *.ntvs*
19 | *.njsproj
20 | *.sln
21 | *.sw*
22 |
--------------------------------------------------------------------------------
/.postcssrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | autoprefixer: {}
4 | }
5 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # what-the-proj
2 |
3 | https://stevage.github.io/WhatTheProj/
4 |
5 | What do you do when you have a geospatial file and you don't know which projection it's in? Use *What the Proj*!
6 |
7 | 1. Enter one of the projected coordinates, as X and Y.
8 | 2. Enter the longitude and latitude that you think it might correspond to. (For instance, if you know all the data is related to Canberra, you could pick a long/lat in the middle of Canberra)
9 | 3. Click "Guess!" All known EPSG codes will be tried. The one that gives a result closest to your target will be shown.
10 |
11 | Don't have any actual data and just want to see it work? Try [test data](https://stevage.github.io/WhatTheProj/#test)
12 |
13 | ## Project setup
14 | ```
15 | npm install
16 | ```
17 |
18 | ### Compiles and hot-reloads for development
19 | ```
20 | npm run serve
21 | ```
22 |
23 | ### Compiles and minifies for production
24 | ```
25 | npm run build
26 | ```
27 |
28 | ### Lints and fixes files
29 | ```
30 | npm run lint
31 | ```
32 |
--------------------------------------------------------------------------------
/deploy.sh:
--------------------------------------------------------------------------------
1 | mkdir -p docs
2 | rm -f docs/js/*
3 | rm -f docs/css/*
4 |
5 | npm run build
6 | cp -pr dist/* docs
7 | git add docs/*
8 | git commit -m "Rebuild"
9 | git push
--------------------------------------------------------------------------------
/docs/200.html:
--------------------------------------------------------------------------------
1 |
What the Proj?!
--------------------------------------------------------------------------------
/docs/css/app.2772cfea.css:
--------------------------------------------------------------------------------
1 | h3[data-v-9b916924]{margin:40px 0 0}a[data-v-9b916924]{color:#42b983}#guesser[data-v-9b916924]{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50;font-size:16pt}#submit[data-v-9b916924]{padding:1em;cursor:pointer;font-size:20pt;width:10em;margin:1em auto;border:1px solid #42b983}#submit[data-v-9b916924]:hover{color:pink}#result .projection[data-v-9b916924]{font-size:40pt}#result .definition[data-v-9b916924]{font-family:Consolas,monaco,Courier New,Courier,monospace;color:maroon;padding:1em;text-align:center;letter-spacing:-1px}#other-results table[data-v-9b916924]{text-align:left;margin-left:auto;margin-right:auto;max-width:800px}#other-results .definition[data-v-9b916924]{color:maroon;font-size:7pt;font-family:Consolas,monaco,Courier New,Courier,monospace;letter-spacing:-1px}.preamble[data-v-9b916924]{font-size:12pt;color:grey}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50;margin-top:60px}button{margin:3em;padding:3em}#footer{margin-top:2em}
--------------------------------------------------------------------------------
/docs/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevage/WhatTheProj/6d96c98d0b9f0d58e5a3ebebf1e23d18b19538f0/docs/favicon.ico
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 | What the Proj?!
--------------------------------------------------------------------------------
/docs/js/app.c766263a.js:
--------------------------------------------------------------------------------
1 | (function(t){function e(e){for(var r,i,o=e[0],u=e[1],l=e[2],p=0,v=[];p!t.match(/urn:ogc:def:crs:EPSG/)),this.result?this.status="found":this.status="failed"},spatialRefLink(t=this.result.projection){const e=t.match(/^([^:]+):(.*)$/);if(e)return e[1].match(/epsg/i)?`https://epsg.io/${e[2]}`:`http://spatialreference.org/ref/${e[1].toLowerCase()}/${e[2]}/`}},mounted(){window.guesser=this},watch:{x(){const t=this.x.match(/([0-9.-]+)[^0-9-.]+([0-9.-]+)/);t&&(this.x=t[1],this.y=t[2])}}},p=c,v=(n("21a3"),n("2877")),d=Object(v["a"])(p,i,o,!1,null,"9b916924",null);d.options.__file="Guesser.vue";var h=d.exports;const f={name:"app",mounted(){window.app=this},components:{Guesser:h}};var m=f,_=m,g=(n("034f"),Object(v["a"])(_,a,s,!1,null,null,null));g.options.__file="App.vue";var b=g.exports;r["a"].config.productionTip=!1,window.v=new r["a"]({render:function(t){return t(b)}}).$mount("#app")},"64a9":function(t,e,n){},caf5:function(t,e,n){}});
2 | //# sourceMappingURL=app.c766263a.js.map
--------------------------------------------------------------------------------
/docs/js/app.c766263a.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?7db8","webpack:///./src/components/Guesser.vue?b640","webpack:///./src/App.vue?4d4e","webpack:///./src/components/Guesser.vue?537a","webpack:///src/components/Guesser.vue","webpack:///./src/components/Guesser.vue?fc14","webpack:///./src/components/Guesser.vue?59a5","webpack:///src/App.vue","webpack:///./src/App.vue?8b55","webpack:///./src/App.vue?622c","webpack:///./src/main.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","app","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Guesser_vue_vue_type_style_index_0_id_9b916924_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Guesser_vue_vue_type_style_index_0_id_9b916924_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default","render","_vm","this","_h","$createElement","_c","_self","attrs","id","_m","staticRenderFns","_v","href","Guesservue_type_template_id_9b916924_scoped_true_lang_pug_render","directives","rawName","expression","type","domProps","on","change","input","$event","target","composing","x","y","staticStyle","color","font-size","lon","lat","click","guess","status","_e","staticClass","spatialRefLink","projection","_s","def","Math","round","distance","_l","results","Guesservue_type_template_id_9b916924_scoped_true_lang_pug_staticRenderFns","dev","location","hash","match","guessProjection","Guesservue_type_script_lang_js_","undefined","computed","[object Object]","methods","filter","parts","toLowerCase","guesser","watch","matches","components_Guesservue_type_script_lang_js_","component","componentNormalizer","options","__file","Guesser","components","Appvue_type_script_lang_js_","src_Appvue_type_script_lang_js_","App_component","App","vue_runtime_esm","config","productionTip","v","h","$mount"],"mappings":"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","file":"js/app.c766263a.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Guesser.vue?vue&type=style&index=0&id=9b916924&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Guesser.vue?vue&type=style&index=0&id=9b916924&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('Guesser'),_vm._m(0)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"footer\"}},[_vm._v(\"\\n Built by Steve Bennett (\"),_c('a',{attrs:{\"href\":\"https://twitter.com/stevage1/\"}},[_vm._v(\"@Stevage1\")]),_vm._v(\")\\n \"),_c('br'),_c('a',{attrs:{\"href\":\"http://hire.stevebennett.me/\"}},[_vm._v(\"hire.stevebennett.me\")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"guesser\"}},[_c('h1',[_vm._v(\"What the proj?\")]),_vm._m(0),_c('h4',[_vm._v(\"Someone gave me this projected coordinate:\")]),_c('label',[_vm._v(\"X:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.x),expression:\"x\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.x)},on:{\"change\":_vm.change,\"input\":function($event){if($event.target.composing){ return; }_vm.x=$event.target.value}}}),_c('br'),_c('label',[_vm._v(\"Y:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.y),expression:\"y\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.y)},on:{\"change\":_vm.change,\"input\":function($event){if($event.target.composing){ return; }_vm.y=$event.target.value}}}),_c('br'),_c('small',{staticStyle:{\"color\":\"grey\",\"font-size\":\"14px\"}},[_vm._v(\"Tip: try pasting a full X,Y string into the X box.\")]),_vm._m(1),_c('label',[_vm._v(\"Longitude:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.lon),expression:\"lon\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.lon)},on:{\"change\":_vm.change,\"input\":function($event){if($event.target.composing){ return; }_vm.lon=$event.target.value}}}),_c('br'),_c('label',[_vm._v(\"Latitude:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.lat),expression:\"lat\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.lat)},on:{\"change\":_vm.change,\"input\":function($event){if($event.target.composing){ return; }_vm.lat=$event.target.value}}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.x && _vm.y && _vm.lon && _vm.lat),expression:\"x && y && lon && lat\"}],attrs:{\"id\":\"submit\"},on:{\"click\":_vm.guess}},[_c('a',{attrs:{\"href\":\"#\"}}),_c('b',[_vm._v(\"Guess!\")])]),(_vm.status === 'failed')?_c('div',{attrs:{\"id\":\"result\"}},[_vm._v(\"Oh dear. Couldn't find any projection that matched.\")]):_vm._e(),(_vm.status === 'thinking')?_c('div',{attrs:{\"id\":\"result\"}},[_vm._v(\"Thinking!\")]):_vm._e(),(_vm.status === 'found')?_c('div',{attrs:{\"id\":\"result\"}},[_vm._v(\"It might be...\"),_c('div',{staticClass:\"projection\"},[(_vm.spatialRefLink(_vm.result.projection))?_c('a',{attrs:{\"href\":_vm.spatialRefLink(_vm.result.projection),\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.result.projection))]):_c('span',[_vm._v(_vm._s(_vm.result.projection))])]),_c('div',{staticClass:\"definition\"},[_vm._v(_vm._s(_vm.result.def))]),_vm._v(\"That gives a result \"+_vm._s(Math.round(_vm.result.distance))+\"km from your target.\")]):_vm._e(),(_vm.status === 'found')?_c('div',{attrs:{\"id\":\"other-results\"}},[_vm._v(\"Or maybe:\"),_c('table',_vm._l((_vm.results.slice(1,10)),function(result){return _c('tr',[_c('td',{staticClass:\"projection\"},[(_vm.spatialRefLink(result.projection))?_c('a',{attrs:{\"href\":_vm.spatialRefLink(result.projection),\"target\":\"_blank\"}},[_vm._v(_vm._s(result.projection))]):_c('span',[_vm._v(_vm._s(result.projection))])]),_c('td',{staticClass:\"distance\"},[_vm._v(_vm._s(Math.round(result.distance))+\"km\")]),_c('td',{staticClass:\"definition\"},[_vm._v(_vm._s(result.def))])])}))]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"preamble\"},[_vm._v(\"Do you have a Shapefile with no projection information? A GeoJSON with no CRS?\"),_c('br'),_vm._v(\" WhatTheProj can help you guess the projection for a given point.\")])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('h4',[_vm._v(\"I think it \"),_c('i',[_vm._v(\"should\")]),_vm._v(\" be somewhere near:\")])}]\n\nexport { render, staticRenderFns }","\n #guesser\n h1 What the proj?\n .preamble\n | Do you have a Shapefile with no projection information? A GeoJSON with no CRS?\n br\n | WhatTheProj can help you guess the projection for a given point.\n h4 Someone gave me this projected coordinate:\n label X:\n input(type='text' v-model='x' v-on:change='change')\n br\n label Y:\n input(type='text' v-model='y' v-on:change='change')\n br\n small(style=\"color:grey;font-size:14px\") Tip: try pasting a full X,Y string into the X box.\n\n h4 I think it should be somewhere near:\n label Longitude:\n input(type='text' v-model='lon' v-on:change='change')\n br\n label Latitude:\n input(type='text' v-model='lat' v-on:change='change')\n #submit(v-on:click='guess' v-show='x && y && lon && lat')\n a(href='#')\n b Guess!\n #result(v-if=\"status === 'failed'\")\n | Oh dear. Couldn't find any projection that matched.\n #result(v-if=\"status === 'thinking'\")\n | Thinking!\n #result(v-if=\"status === 'found'\")\n | It might be...\n .projection\n a(v-if='spatialRefLink(result.projection)' :href='spatialRefLink(result.projection)' target='_blank') {{ result.projection }}\n span(v-else='') {{ result.projection }}\n .definition\n | {{ result.def }}\n | That gives a result {{ Math.round(result.distance) }}km from your target.\n #other-results(v-if=\"status === 'found'\")\n | Or maybe:\n table\n tr(v-for='result in results.slice(1,10)')\n td.projection\n a(v-if='spatialRefLink(result.projection)' :href='spatialRefLink(result.projection)' target='_blank') {{ result.projection }}\n span(v-else='') {{ result.projection }}\n td.distance {{ Math.round(result.distance) }}km\n td.definition {{ result.def }}\n\n\n\n\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Guesser.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Guesser.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Guesser.vue?vue&type=template&id=9b916924&scoped=true&lang=pug&\"\nimport script from \"./Guesser.vue?vue&type=script&lang=js&\"\nexport * from \"./Guesser.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Guesser.vue?vue&type=style&index=0&id=9b916924&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9b916924\",\n null\n \n)\n\ncomponent.options.__file = \"Guesser.vue\"\nexport default component.exports","\n \n \n \n
\n\n\n\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=56512ac1&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\ncomponent.options.__file = \"App.vue\"\nexport default component.exports","import Vue from 'vue'\nimport App from './App.vue'\n\nVue.config.productionTip = false\n\nwindow.v = new Vue({\n render: function (h) { return h(App) },\n}).$mount('#app')\n"],"sourceRoot":""}
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "what-the-proj",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "start": "vue-cli-service serve",
7 | "serve": "vue-cli-service serve",
8 | "build": "vue-cli-service build",
9 | "deploy": "bash deploy.sh",
10 | "lint": "vue-cli-service lint",
11 | "postbuild": "react-snap"
12 | },
13 | "dependencies": {
14 | "guess-projection": "^0.3.0",
15 | "pug": "^2.0.3",
16 | "pug-loader": "^2.4.0",
17 | "pug-plain-loader": "^1.0.0",
18 | "vue": "^2.5.17"
19 | },
20 | "devDependencies": {
21 | "@vue/cli-plugin-eslint": "^3.1.2",
22 | "@vue/cli-service": "^3.1.2",
23 | "babel-eslint": "^10.0.1",
24 | "eslint": "^5.8.0",
25 | "eslint-plugin-vue": "^5.0.0-0",
26 | "react-snap": "^1.23.0",
27 | "vue-template-compiler": "^2.5.17"
28 | },
29 | "reactSnap": {
30 | "source": "dist",
31 | "minifyHtml": {
32 | "collapseWhitespace": false,
33 | "removeComments": false
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevage/WhatTheProj/6d96c98d0b9f0d58e5a3ebebf1e23d18b19538f0/public/favicon.ico
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | What the Proj?!
10 |
11 |
12 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
11 |
12 |
24 |
25 |
44 |
--------------------------------------------------------------------------------
/src/components/Guesser.vue:
--------------------------------------------------------------------------------
1 |
2 | #guesser
3 | h1 What the proj?
4 | .preamble
5 | | Do you have a Shapefile with no projection information? A GeoJSON with no CRS?
6 | br
7 | | WhatTheProj can help you guess the projection for a given point.
8 | h4 Someone gave me this projected coordinate:
9 | label X:
10 | input(type='text' v-model='x' v-on:change='change')
11 | br
12 | label Y:
13 | input(type='text' v-model='y' v-on:change='change')
14 | br
15 | h4 I think it should be somewhere near:
16 | label Longitude:
17 | input(type='text' v-model='lon' v-on:change='change')
18 | br
19 | label Latitude:
20 | input(type='text' v-model='lat' v-on:change='change')
21 | #submit(v-on:click='guess' v-show='x && y && lon && lat')
22 | a(href='#')
23 | b Guess!
24 | #result(v-if="status === 'failed'")
25 | | Oh dear. Couldn't find any projection that matched.
26 | #result(v-if="status === 'thinking'")
27 | | Thinking!
28 | #result(v-if="status === 'found'")
29 | | It might be...
30 | .projection
31 | a(v-if='spatialRefLink(result.projection)' :href='spatialRefLink(result.projection)' target='_blank') {{ result.projection }}
32 | span(v-else='') {{ result.projection }}
33 | .definition
34 | | {{ result.def }}
35 | | That gives a result {{ Math.round(result.distance) }}km from your target.
36 | #other-results(v-if="status === 'found'")
37 | | Or maybe:
38 | table
39 | tr(v-for='result in results.slice(1,10)')
40 | td.projection
41 | a(v-if='spatialRefLink(result.projection)' :href='spatialRefLink(result.projection)' target='_blank') {{ result.projection }}
42 | span(v-else='') {{ result.projection }}
43 | td.distance {{ Math.round(result.distance) }}km
44 | td.definition {{ result.def }}
45 |
46 |
47 |
48 |
49 |
108 |
109 |
110 |
177 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App.vue'
3 |
4 | Vue.config.productionTip = false
5 |
6 | window.v = new Vue({
7 | render: function (h) { return h(App) },
8 | }).$mount('#app')
9 |
--------------------------------------------------------------------------------
/vue.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | baseUrl: ''
3 | }
--------------------------------------------------------------------------------