@flumens/utils 0.8.1 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,5 @@
1
- import { Polygon, LineString } from 'geojson';
1
+ import { Polygon, LineString, MultiPolygon, Point } from 'geojson';
2
+ export type Position = [number, number];
2
3
  export type Location = {
3
4
  latitude: number;
4
5
  longitude: number;
@@ -9,7 +10,7 @@ export type Location = {
9
10
  altitudeAccuracy?: number;
10
11
  shape?: LineString | Polygon;
11
12
  geocoded?: {
12
- center: [number, number];
13
+ center: Position;
13
14
  };
14
15
  };
15
16
  export declare const gridrefAccuracy: any;
@@ -69,10 +70,15 @@ type LatLng = {
69
70
  */
70
71
  export declare const normalizeCoords: ({ lat, lng }: LatLng) => LatLng;
71
72
  export declare const isValidLocation: (location?: Location | null) => boolean;
72
- type XYPoint = [number, number];
73
- export declare function transformToLatLon(geometry: any): any;
73
+ export declare function coordsToMeters(latLon: Position): Position;
74
+ export declare function metersToCoords(XY: Position): Position;
75
+ export declare function getGeomMetersToLatLon(geometry: Point | LineString | Polygon | MultiPolygon): LineString | Polygon | Point | {
76
+ coordinates: Position[][][];
77
+ type: "MultiPolygon";
78
+ bbox?: import("geojson").BBox | undefined;
79
+ };
74
80
  export declare function getGeomWKT(geometry: LineString | Polygon): string;
75
- export declare function getGeomCenter(geometry: LineString | Polygon): XYPoint;
81
+ export declare function getGeomCenter(geometry: LineString | Polygon): Position;
76
82
  /**
77
83
  * Calculates the length of a linestring in meters.
78
84
  */
package/dist/location.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isValidLocation=exports.normalizeCoords=exports.gridrefAccuracy=void 0,exports.prettyPrintGridRef=n,exports.locationToGrid=i,exports.parseGrid=function(t){let e;const o=r.default.GridRefParser.factory(t);o&&(o.osRef.x+=o.length/2,o.osRef.y+=o.length/2,e=o.osRef);return e},exports.gridrefStringToLatLng=function(t){try{const e=r.default.GridRefParser.factory(t);return e?e.osRef.to_latLng():null}catch(t){console.error(t.message)}return null},exports.isValidGridRef=function(t){try{const e=r.default.GridRefParser.factory(t);return!(!e||!r.default.MappingUtils.is_gb_hectad(e.hectad))}catch(t){console.error(t.message)}return!1},exports.isInGB=function(t){if(t.latitude){const e=r.default.latlng_to_grid_coords(t.latitude,t.longitude);return!!e&&"GB"===e.country}return!1},exports.updateModelLocation=function(e,r){return t.__awaiter(this,arguments,void 0,(function*(t,e,r=!1){var o;if(null===(o=t.metadata)||void 0===o?void 0:o.deleted)return void console.warn("LocationUtils: skipping deleted model location set");const n=Object.assign({},e);n.latitude=parseFloat(parseFloat(`${n.latitude}`).toFixed(5)),n.longitude=parseFloat(parseFloat(`${n.longitude}`).toFixed(5)),(n.accuracy||Number.isFinite(n.accuracy))&&(n.accuracy=parseFloat(parseFloat(`${n.accuracy}`).toFixed(2))),(n.altitude||Number.isFinite(n.altitude))&&(n.altitude=parseFloat(parseFloat(`${n.altitude}`).toFixed(2))),(n.altitudeAccuracy||Number.isFinite(n.altitudeAccuracy))&&(n.altitudeAccuracy=parseFloat(parseFloat(`${n.altitudeAccuracy}`).toFixed(2))),n.source="gps",r||(n.gridref=i(n));const a=t.data.location,c=Object.assign(Object.assign({},a),n);t.setGPSLocation?yield t.setGPSLocation(c):(t.data.location=c,yield t.save())}))},exports.prettyPrintLocation=function(t){if(!t||!t.latitude)return"";if(t.gridref)return n(t.gridref);const e=i(t);if(e)return n(e);return`${parseFloat(t.latitude).toFixed(4)}, ${parseFloat(t.longitude).toFixed(4)}`},exports.checkGridType=function(t,e){if(!e)return!1;const r=t.gridref||"";let{length:o}=exports.gridrefAccuracy[e];/^.\d/.test(r)&&(o-=1);return r.length===o},exports.doesExceedGridRef=a,exports.normalizeGridRefAcc=function t(e,r,o){if(o>=1e4)return null;if(a(e,r,o))return t(e,r,10*o);return e.to_gridref(o)},exports.getGridSquareCenter=function(t){const e=r.default.GridRefParser.factory(t);if(!e)return null;const o=e.osRef;return new e.NationalRef(o.x+e.length/2,o.y+e.length/2).to_latLng()},exports.transformToLatLon=function t(e){const r=new o.SphericalMercator;try{const{type:o}=e;let{coordinates:n}=e;if("Point"===o)n=[n];else if("MultiLineString"===o){const r=e=>t({coordinates:e});return e.coordinates.map(r)}const i=t=>r.inverse(t);return n.map(i)}catch(t){return[]}},exports.getGeomWKT=function(t){const r=new o.SphericalMercator;function n(t){return t.map((([t,e])=>r.forward([t,e])))}const i=JSON.parse(JSON.stringify(t));"Polygon"===i.type?i.coordinates[0]=n(i.coordinates[0]):i.coordinates=n(i.coordinates);return e.default.stringify(i)},exports.getGeomCenter=function(t){const e=JSON.parse(JSON.stringify(t));if("Polygon"===e.type)return[e.coordinates[0][0][0],e.coordinates[0][0][1]];return[e.coordinates[0][0],e.coordinates[0][1]]},exports.calculateLineLength=function(t){function e(t,e,r,o){const n=(r-t)*Math.PI/180;e=e*Math.PI/180,o=o*Math.PI/180;const i=n*Math.cos((e+o)/2),a=o-e;return 6371e3*Math.sqrt(i*i+a*a)}if(t.length<2)return 0;let r=0;for(let o=1;o<t.length;o++)r+=e(t[o-1][0],t[o-1][1],t[o][0],t[o][1]);return r};const t=require("tslib"),e=t.__importDefault(require("wellknown")),r=t.__importDefault(require("@flumens/bigu")),o=require("@mapbox/sphericalmercator");function n(t){const[,e]=t.match(/^([A-Z]*)\d/i),r=t.replace(e,""),o=r.length;if(o%2)return`${e} ${r}`;return`${e} ${r.slice(0,o/2)} ${r.slice(o/2)}`}function i(t){const e=r.default.latlng_to_grid_coords(t.latitude,t.longitude);if(!e||!Number.isFinite(t.accuracy))return null;const o=r.default.GridRefParser.get_normalized_precision(2*t.accuracy);return e.to_gridref(o)}function a(t,e,r){const{accuracy:o}=e,{x:n}=t,{y:i}=t;return n%r-o<0||(n%r+o>r||(i%r-o<0||i%r+o>r))}exports.gridrefAccuracy={tetrad:{label:"Tetrad (2km square)",length:5},monad:{label:"Monad (1km square)",length:6}};exports.normalizeCoords=({lat:t,lng:e})=>e>180?{lat:t,lng:e-180-180}:e<-180?{lat:t,lng:180+(e+180)}:{lat:t,lng:e};exports.isValidLocation=t=>Number.isFinite(null==t?void 0:t.latitude)&&Number.isFinite(null==t?void 0:t.longitude);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isValidLocation=exports.normalizeCoords=exports.gridrefAccuracy=void 0,exports.prettyPrintGridRef=n,exports.locationToGrid=i,exports.parseGrid=function(t){let e;const o=r.default.GridRefParser.factory(t);o&&(o.osRef.x+=o.length/2,o.osRef.y+=o.length/2,e=o.osRef);return e},exports.gridrefStringToLatLng=function(t){try{const e=r.default.GridRefParser.factory(t);return e?e.osRef.to_latLng():null}catch(t){console.error(t.message)}return null},exports.isValidGridRef=function(t){try{const e=r.default.GridRefParser.factory(t);return!(!e||!r.default.MappingUtils.is_gb_hectad(e.hectad))}catch(t){console.error(t.message)}return!1},exports.isInGB=function(t){if(t.latitude){const e=r.default.latlng_to_grid_coords(t.latitude,t.longitude);return!!e&&"GB"===e.country}return!1},exports.updateModelLocation=function(e,r){return t.__awaiter(this,arguments,void 0,(function*(t,e,r=!1){var o;if(null===(o=t.metadata)||void 0===o?void 0:o.deleted)return void console.warn("LocationUtils: skipping deleted model location set");const n=Object.assign({},e);n.latitude=parseFloat(parseFloat(`${n.latitude}`).toFixed(5)),n.longitude=parseFloat(parseFloat(`${n.longitude}`).toFixed(5)),(n.accuracy||Number.isFinite(n.accuracy))&&(n.accuracy=parseFloat(parseFloat(`${n.accuracy}`).toFixed(2))),(n.altitude||Number.isFinite(n.altitude))&&(n.altitude=parseFloat(parseFloat(`${n.altitude}`).toFixed(2))),(n.altitudeAccuracy||Number.isFinite(n.altitudeAccuracy))&&(n.altitudeAccuracy=parseFloat(parseFloat(`${n.altitudeAccuracy}`).toFixed(2))),n.source="gps",r||(n.gridref=i(n));const a=t.data.location,s=Object.assign(Object.assign({},a),n);t.setGPSLocation?yield t.setGPSLocation(s):(t.data.location=s,yield t.save())}))},exports.prettyPrintLocation=function(t){if(!t||!t.latitude)return"";if(t.gridref)return n(t.gridref);const e=i(t);if(e)return n(e);return`${parseFloat(t.latitude).toFixed(4)}, ${parseFloat(t.longitude).toFixed(4)}`},exports.checkGridType=function(t,e){if(!e)return!1;const r=t.gridref||"";let{length:o}=exports.gridrefAccuracy[e];/^.\d/.test(r)&&(o-=1);return r.length===o},exports.doesExceedGridRef=a,exports.normalizeGridRefAcc=function t(e,r,o){if(o>=1e4)return null;if(a(e,r,o))return t(e,r,10*o);return e.to_gridref(o)},exports.getGridSquareCenter=function(t){const e=r.default.GridRefParser.factory(t);if(!e)return null;const o=e.osRef;return new e.NationalRef(o.x+e.length/2,o.y+e.length/2).to_latLng()},exports.coordsToMeters=s,exports.metersToCoords=c,exports.getGeomMetersToLatLon=function(t){if("Point"===t.type)return Object.assign(Object.assign({},t),{coordinates:c(t.coordinates)});if("LineString"===t.type)return Object.assign(Object.assign({},t),{coordinates:t.coordinates.map((t=>c(t)))});if("Polygon"===t.type)return Object.assign(Object.assign({},t),{coordinates:t.coordinates.map((t=>t.map((t=>c(t)))))});return Object.assign(Object.assign({},t),{coordinates:t.coordinates.map((t=>t.map((t=>t.map((t=>c(t)))))))})},exports.getGeomWKT=function(t){const r=JSON.parse(JSON.stringify(t));"Polygon"===r.type?r.coordinates[0]=r.coordinates[0].map(s):r.coordinates=r.coordinates.map(s);return e.default.stringify(r)},exports.getGeomCenter=function(t){const e=JSON.parse(JSON.stringify(t));if("Polygon"===e.type)return[e.coordinates[0][0][0],e.coordinates[0][0][1]];return[e.coordinates[0][0],e.coordinates[0][1]]},exports.calculateLineLength=function(t){function e(t,e,r,o){const n=(r-t)*Math.PI/180;e=e*Math.PI/180,o=o*Math.PI/180;const i=n*Math.cos((e+o)/2),a=o-e;return 6371e3*Math.sqrt(i*i+a*a)}if(t.length<2)return 0;let r=0;for(let o=1;o<t.length;o++)r+=e(t[o-1][0],t[o-1][1],t[o][0],t[o][1]);return r};const t=require("tslib"),e=t.__importDefault(require("wellknown")),r=t.__importDefault(require("@flumens/bigu")),o=require("@mapbox/sphericalmercator");function n(t){const[,e]=t.match(/^([A-Z]*)\d/i),r=t.replace(e,""),o=r.length;if(o%2)return`${e} ${r}`;return`${e} ${r.slice(0,o/2)} ${r.slice(o/2)}`}function i(t){const e=r.default.latlng_to_grid_coords(t.latitude,t.longitude);if(!e||!Number.isFinite(t.accuracy))return null;const o=r.default.GridRefParser.get_normalized_precision(2*t.accuracy);return e.to_gridref(o)}function a(t,e,r){const{accuracy:o}=e,{x:n}=t,{y:i}=t;return n%r-o<0||(n%r+o>r||(i%r-o<0||i%r+o>r))}exports.gridrefAccuracy={tetrad:{label:"Tetrad (2km square)",length:5},monad:{label:"Monad (1km square)",length:6}};exports.normalizeCoords=({lat:t,lng:e})=>e>180?{lat:t,lng:e-180-180}:e<-180?{lat:t,lng:180+(e+180)}:{lat:t,lng:e};function s(t){const e=new o.SphericalMercator;return(([t,r])=>e.forward([t,r]))(t)}function c(t){const e=new o.SphericalMercator;return(([t,r])=>e.inverse([t,r]))(t)}exports.isValidLocation=t=>Number.isFinite(null==t?void 0:t.latitude)&&Number.isFinite(null==t?void 0:t.longitude);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flumens/utils",
3
- "version": "0.8.1",
3
+ "version": "0.10.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "scripts": {