@konfirm/geojson 1.0.0 → 1.0.1

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.
Files changed (127) hide show
  1. package/README.md +7 -7
  2. package/dist/{geojson.d.ts → main.d.mts} +18 -79
  3. package/dist/main.d.ts +137 -15
  4. package/dist/main.global.js +853 -0
  5. package/dist/main.global.js.map +1 -0
  6. package/dist/main.js +824 -0
  7. package/dist/main.js.map +1 -0
  8. package/dist/main.mjs +772 -0
  9. package/dist/main.mjs.map +1 -0
  10. package/package.json +101 -63
  11. package/.editorconfig +0 -16
  12. package/.github/workflows/release.yml +0 -21
  13. package/.github/workflows/tests.yml +0 -56
  14. package/CHANGELOG.md +0 -21
  15. package/dist/Domain/Constants.d.ts +0 -5
  16. package/dist/Domain/GeoJSON/Concept/Altitude.d.ts +0 -3
  17. package/dist/Domain/GeoJSON/Concept/BoundingBox.d.ts +0 -6
  18. package/dist/Domain/GeoJSON/Concept/ExteriorRing.d.ts +0 -4
  19. package/dist/Domain/GeoJSON/Concept/GeoJSONObject.d.ts +0 -11
  20. package/dist/Domain/GeoJSON/Concept/InteriorRing.d.ts +0 -4
  21. package/dist/Domain/GeoJSON/Concept/Latitude.d.ts +0 -3
  22. package/dist/Domain/GeoJSON/Concept/LinearRing.d.ts +0 -4
  23. package/dist/Domain/GeoJSON/Concept/Longitude.d.ts +0 -3
  24. package/dist/Domain/GeoJSON/Concept/Position.d.ts +0 -7
  25. package/dist/Domain/GeoJSON/Feature.d.ts +0 -12
  26. package/dist/Domain/GeoJSON/FeatureCollection.d.ts +0 -8
  27. package/dist/Domain/GeoJSON/GeoJSON.d.ts +0 -7
  28. package/dist/Domain/GeoJSON/Geometry/LineString.d.ts +0 -11
  29. package/dist/Domain/GeoJSON/Geometry/MultiLineString.d.ts +0 -7
  30. package/dist/Domain/GeoJSON/Geometry/MultiPoint.d.ts +0 -8
  31. package/dist/Domain/GeoJSON/Geometry/MultiPolygon.d.ts +0 -7
  32. package/dist/Domain/GeoJSON/Geometry/Point.d.ts +0 -11
  33. package/dist/Domain/GeoJSON/Geometry/Polygon.d.ts +0 -11
  34. package/dist/Domain/GeoJSON/Geometry.d.ts +0 -9
  35. package/dist/Domain/GeoJSON/GeometryCollection.d.ts +0 -8
  36. package/dist/Domain/GeoJSON/GeometryObject.d.ts +0 -12
  37. package/dist/Domain/Guards/Number.d.ts +0 -3
  38. package/dist/Domain/Guards/Tuple.d.ts +0 -3
  39. package/dist/Domain/Iterator/IterablePair.d.ts +0 -32
  40. package/dist/Domain/Iterator/SimpleGeometry.d.ts +0 -90
  41. package/dist/Domain/Utility/Calculate.d.ts +0 -9
  42. package/dist/Domain/Utility/Distance.d.ts +0 -3
  43. package/dist/Domain/Utility/Intersect.d.ts +0 -2
  44. package/dist/Domain/Utility/Segments.d.ts +0 -2
  45. package/dist/Domain/Utility/Winding.d.ts +0 -3
  46. package/dist/geojson.cjs.js +0 -655
  47. package/dist/geojson.cjs.min.js +0 -1
  48. package/dist/geojson.es.js +0 -627
  49. package/dist/geojson.es.min.js +0 -1
  50. package/dist/geojson.js +0 -660
  51. package/dist/geojson.min.js +0 -1
  52. package/rollup.config.mjs +0 -43
  53. package/source/Domain/Constants.ts +0 -5
  54. package/source/Domain/GeoJSON/Concept/Altitude.ts +0 -9
  55. package/source/Domain/GeoJSON/Concept/BoundingBox.ts +0 -31
  56. package/source/Domain/GeoJSON/Concept/ExteriorRing.ts +0 -12
  57. package/source/Domain/GeoJSON/Concept/GeoJSONObject.ts +0 -23
  58. package/source/Domain/GeoJSON/Concept/InteriorRing.ts +0 -12
  59. package/source/Domain/GeoJSON/Concept/Latitude.ts +0 -7
  60. package/source/Domain/GeoJSON/Concept/LinearRing.ts +0 -14
  61. package/source/Domain/GeoJSON/Concept/Longitude.ts +0 -7
  62. package/source/Domain/GeoJSON/Concept/Position.ts +0 -18
  63. package/source/Domain/GeoJSON/Feature.ts +0 -24
  64. package/source/Domain/GeoJSON/FeatureCollection.ts +0 -16
  65. package/source/Domain/GeoJSON/GeoJSON.ts +0 -9
  66. package/source/Domain/GeoJSON/Geometry/LineString.ts +0 -12
  67. package/source/Domain/GeoJSON/Geometry/MultiLineString.ts +0 -9
  68. package/source/Domain/GeoJSON/Geometry/MultiPoint.ts +0 -10
  69. package/source/Domain/GeoJSON/Geometry/MultiPolygon.ts +0 -9
  70. package/source/Domain/GeoJSON/Geometry/Point.ts +0 -12
  71. package/source/Domain/GeoJSON/Geometry/Polygon.ts +0 -20
  72. package/source/Domain/GeoJSON/Geometry.ts +0 -11
  73. package/source/Domain/GeoJSON/GeometryCollection.ts +0 -23
  74. package/source/Domain/GeoJSON/GeometryObject.ts +0 -20
  75. package/source/Domain/Guards/Number.ts +0 -13
  76. package/source/Domain/Guards/Tuple.ts +0 -6
  77. package/source/Domain/Guards/Utility.ts +0 -1
  78. package/source/Domain/Iterator/IterablePair.ts +0 -47
  79. package/source/Domain/Iterator/SimpleGeometry.ts +0 -137
  80. package/source/Domain/Utility/Calculate.ts +0 -143
  81. package/source/Domain/Utility/Distance.ts +0 -56
  82. package/source/Domain/Utility/Intersect.ts +0 -42
  83. package/source/Domain/Utility/Numeric.ts +0 -8
  84. package/source/Domain/Utility/Segments.ts +0 -5
  85. package/source/Domain/Utility/Winding.ts +0 -19
  86. package/source/main.ts +0 -20
  87. package/test/Domain/GeoJSON/Concept/Altitude.ts +0 -58
  88. package/test/Domain/GeoJSON/Concept/BoundingBox.ts +0 -77
  89. package/test/Domain/GeoJSON/Concept/ExteriorRing.ts +0 -65
  90. package/test/Domain/GeoJSON/Concept/GeoJSONObject.ts +0 -56
  91. package/test/Domain/GeoJSON/Concept/InteriorRing.ts +0 -65
  92. package/test/Domain/GeoJSON/Concept/Latitude.ts +0 -56
  93. package/test/Domain/GeoJSON/Concept/LinearRing.ts +0 -63
  94. package/test/Domain/GeoJSON/Concept/Longitude.ts +0 -56
  95. package/test/Domain/GeoJSON/Concept/Position.ts +0 -56
  96. package/test/Domain/GeoJSON/Feature.ts +0 -9
  97. package/test/Domain/GeoJSON/FeatureCollection.ts +0 -9
  98. package/test/Domain/GeoJSON/GeoJSON.ts +0 -21
  99. package/test/Domain/GeoJSON/Geometry/LineString.ts +0 -11
  100. package/test/Domain/GeoJSON/Geometry/MultiLineString.ts +0 -11
  101. package/test/Domain/GeoJSON/Geometry/MultiPoint.ts +0 -11
  102. package/test/Domain/GeoJSON/Geometry/MultiPolygon.ts +0 -11
  103. package/test/Domain/GeoJSON/Geometry/Point.ts +0 -11
  104. package/test/Domain/GeoJSON/Geometry/Polygon.ts +0 -11
  105. package/test/Domain/GeoJSON/Geometry.ts +0 -9
  106. package/test/Domain/GeoJSON/GeometryCollection.ts +0 -9
  107. package/test/Domain/GeoJSON/GeometryObject.ts +0 -4
  108. package/test/Domain/Guards/Number.ts +0 -49
  109. package/test/Domain/Guards/Tuple.ts +0 -27
  110. package/test/Domain/Iterator/IterablePair.ts +0 -203
  111. package/test/Domain/Iterator/SimpleGeometry.ts +0 -195
  112. package/test/Domain/Utility/Calculate.ts +0 -178
  113. package/test/Domain/Utility/Distance.ts +0 -19
  114. package/test/Domain/Utility/Intersect.ts +0 -54
  115. package/test/Domain/Utility/Numeric.ts +0 -30
  116. package/test/Domain/Utility/Winding.ts +0 -52
  117. package/test/README.ts +0 -123
  118. package/test/data/Distance.ts +0 -51
  119. package/test/data/HolySee.ts +0 -74
  120. package/test/data/Intersect.ts +0 -300
  121. package/test/data/Italy.ts +0 -2883
  122. package/test/data/SanMarino.ts +0 -83
  123. package/test/data/Shapes.ts +0 -107
  124. package/test/helper/geometry.ts +0 -76
  125. package/test/helper/malform.ts +0 -82
  126. package/test/main.ts +0 -4
  127. package/tsconfig.json +0 -12
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../source/Domain/GeoJSON/Concept/Position.ts","../source/Domain/Guards/Tuple.ts","../source/Domain/Constants.ts","../source/Domain/Guards/Number.ts","../source/Domain/GeoJSON/Concept/Altitude.ts","../source/Domain/GeoJSON/Concept/Latitude.ts","../source/Domain/GeoJSON/Concept/Longitude.ts","../source/Domain/GeoJSON/Feature.ts","../source/Domain/GeoJSON/Concept/GeoJSONObject.ts","../source/Domain/GeoJSON/Concept/BoundingBox.ts","../source/Domain/GeoJSON/Geometry.ts","../source/Domain/GeoJSON/GeometryObject.ts","../source/Domain/GeoJSON/Geometry/MultiPoint.ts","../source/Domain/GeoJSON/Geometry/Point.ts","../source/Domain/GeoJSON/Geometry/LineString.ts","../source/Domain/GeoJSON/Geometry/MultiLineString.ts","../source/Domain/GeoJSON/Geometry/MultiPolygon.ts","../source/Domain/GeoJSON/Geometry/Polygon.ts","../source/Domain/GeoJSON/Concept/ExteriorRing.ts","../source/Domain/Utility/Winding.ts","../source/Domain/GeoJSON/Concept/LinearRing.ts","../source/Domain/GeoJSON/Concept/InteriorRing.ts","../source/Domain/GeoJSON/GeometryCollection.ts","../source/Domain/GeoJSON/FeatureCollection.ts","../source/Domain/GeoJSON/GeoJSON.ts","../source/Domain/Iterator/SimpleGeometry.ts","../source/Domain/Iterator/IterablePair.ts","../source/Domain/Utility/Box.ts","../source/Domain/Utility/Calculate.ts","../source/Domain/Utility/Segments.ts","../source/Domain/Utility/Distance.ts","../source/Domain/Utility/Intersect.ts"],"sourcesContent":["import { any } from '@konfirm/guard';\nimport { isTuple } from '../../Guards/Tuple';\nimport { type Altitude, isAltitude, isStrictAltitude } from './Altitude';\nimport { isLatitude, isStrictLatitude, type Latitude } from './Latitude';\nimport { isLongitude, isStrictLongitude, type Longitude } from './Longitude';\n\nexport type Position = [Longitude, Latitude, Altitude?];\nexport const isPosition = any<Position>(\n\tisTuple(isLongitude, isLatitude),\n\tisTuple(isLongitude, isLatitude, isAltitude),\n);\nexport const isStrictPosition = any<Position>(\n\tisTuple(isStrictLongitude, isStrictLatitude),\n\tisTuple(isStrictLongitude, isStrictLatitude, isStrictAltitude),\n);\nexport function isEquivalentPosition(one: unknown, two: unknown): boolean {\n\treturn (\n\t\tisPosition(one) &&\n\t\tisPosition(two) &&\n\t\tone.length === two.length &&\n\t\tone.every((v, i) => v === two[i])\n\t);\n}\n","import { type Guard, isArray, type Validator } from '@konfirm/guard';\n\nexport function isTuple<T extends Array<unknown>>(\n\t...rules: Array<Validator>\n): Guard<T> {\n\treturn (value: unknown): value is T =>\n\t\tisArray(value) &&\n\t\tvalue.length === rules.length &&\n\t\trules.every((rule, index) => rule(value[index]));\n}\n","export const EARTH_RADIUS = 6_371_008.7714; // mean radius\nexport const EARTH_RADIUS_MAJOR = 6_378_137; // equatorial radius\nexport const EARTH_RADIUS_MINOR = 6_356_752.314_245; // semiminor axis\nexport const EARTH_FLATTENING = 298.257_223_563;\nexport const GPS_SATELLITE_ORBIT = 20_180_000;\n","import { type Guard, isNumber } from '@konfirm/guard';\n\nexport function isNumberValue<T extends number>(value: unknown): value is T {\n\treturn isNumber(value) && Number.isFinite(value);\n}\n\nexport function isNumberBetween<T extends number>(\n\ta: number,\n\tb: number = Infinity,\n): Guard<T> {\n\tconst min = Math.min(a, b);\n\tconst max = Math.max(a, b);\n\n\treturn (value: unknown): value is T =>\n\t\tisNumberValue(value) && value >= min && value <= max;\n}\n","import { EARTH_RADIUS, GPS_SATELLITE_ORBIT } from '../../Constants';\nimport { isNumberBetween, isNumberValue } from '../../Guards/Number';\n\nexport type Altitude = number;\nexport function isAltitude(value: unknown): value is Altitude {\n\treturn isNumberValue(value);\n}\n\nexport const isStrictAltitude = isNumberBetween<Altitude>(\n\t-EARTH_RADIUS,\n\tGPS_SATELLITE_ORBIT,\n);\n","import { isNumberBetween, isNumberValue } from '../../Guards/Number';\n\nexport type Latitude = number;\nexport function isLatitude(value: unknown): value is Latitude {\n\treturn isNumberValue(value);\n}\nexport const isStrictLatitude = isNumberBetween<Latitude>(-90, 90);\n","import { isNumberBetween, isNumberValue } from '../../Guards/Number';\n\nexport type Longitude = number;\nexport function isLongitude(value: unknown): value is Longitude {\n\treturn isNumberValue(value);\n}\nexport const isStrictLongitude = isNumberBetween<Longitude>(-180, 180);\n","import { all, any, isNULL, isObject, isStructure } from '@konfirm/guard';\nimport { type GeoJSONObject, isGeoJSONObject } from './Concept/GeoJSONObject';\nimport { type Geometry, isGeometry, isStrictGeometry } from './Geometry';\nimport {\n\ttype GeometryCollection,\n\tisGeometryCollection,\n\tisStrictGeometryCollection,\n} from './GeometryCollection';\n\nexport type Feature = GeoJSONObject<{\n\ttype: 'Feature';\n\tgeometry: Geometry | GeometryCollection;\n\tproperties: { [key: string]: unknown } | null;\n}>;\nexport const isFeature = all<Feature>(\n\tisGeoJSONObject('Feature'),\n\tisStructure({\n\t\tgeometry: any(isGeometry, isGeometryCollection),\n\t\tproperties: any(isNULL, isObject),\n\t}),\n);\nexport const isStrictFeature = all<Feature>(\n\tisGeoJSONObject('Feature'),\n\tisStructure({\n\t\tgeometry: any(isStrictGeometry, isStrictGeometryCollection),\n\t\tproperties: any(isNULL, isObject),\n\t}),\n);\n","import { all, type Guard, isString, isStructure } from '@konfirm/guard';\nimport {\n\ttype BoundingBox,\n\tisBoundingBox,\n\tisStrictBoundingBox,\n} from './BoundingBox';\n\ntype GeoJSONBase = {\n\ttype: string;\n\tbbox?: BoundingBox;\n\t[key: string]: unknown;\n};\nexport type GeoJSONObject<T extends GeoJSONBase = GeoJSONBase> = GeoJSONBase &\n\tT;\nexport function isGeoJSONObject<T extends GeoJSONBase>(type: string): Guard<T> {\n\treturn isStructure<T>(\n\t\t{\n\t\t\ttype: all(isString, (value: unknown) => value === type),\n\t\t\tbbox: isBoundingBox,\n\t\t},\n\t\t'bbox',\n\t);\n}\nexport function isStrictGeoJSONObject<T extends GeoJSONBase>(\n\ttype: string,\n): Guard<T> {\n\treturn isStructure<T>(\n\t\t{\n\t\t\ttype: all(isString, (value: unknown) => value === type),\n\t\t\tbbox: isStrictBoundingBox,\n\t\t},\n\t\t'bbox',\n\t);\n}\n","import { all, any } from '@konfirm/guard';\nimport { isTuple } from '../../Guards/Tuple';\nimport { type Altitude, isAltitude, isStrictAltitude } from './Altitude';\nimport { isLatitude, isStrictLatitude, type Latitude } from './Latitude';\nimport { isLongitude, isStrictLongitude, type Longitude } from './Longitude';\n\nexport type BoundingBox =\n\t| [Longitude, Latitude, Altitude, Longitude, Latitude, Altitude]\n\t| [Longitude, Latitude, Longitude, Latitude];\nconst isBoundingBoxWithAltitude = all(\n\tisTuple(\n\t\tisLongitude,\n\t\tisLatitude,\n\t\tisAltitude,\n\t\tisLongitude,\n\t\tisLatitude,\n\t\tisAltitude,\n\t),\n\t([, s, , , n]) => s <= n,\n);\nconst isBoundingBoxWithoutAltitude = all(\n\tisTuple(isLongitude, isLatitude, isLongitude, isLatitude),\n\t([, s, , n]) => s <= n,\n);\nexport const isBoundingBox = any<BoundingBox>(\n\tisBoundingBoxWithAltitude,\n\tisBoundingBoxWithoutAltitude,\n);\nexport const isStrictBoundingBox = any<BoundingBox>(\n\tall(\n\t\tisTuple(\n\t\t\tisStrictLongitude,\n\t\t\tisStrictLatitude,\n\t\t\tisStrictAltitude,\n\t\t\tisStrictLongitude,\n\t\t\tisStrictLatitude,\n\t\t\tisStrictAltitude,\n\t\t),\n\t\tisBoundingBoxWithAltitude,\n\t),\n\tall(\n\t\tisTuple(\n\t\t\tisStrictLongitude,\n\t\t\tisStrictLatitude,\n\t\t\tisStrictLongitude,\n\t\t\tisStrictLatitude,\n\t\t),\n\t\tisBoundingBoxWithoutAltitude,\n\t),\n);\n","import { any } from '@konfirm/guard';\nimport {\n\tisLineString,\n\tisStrictLineString,\n\ttype LineString,\n} from './Geometry/LineString';\nimport {\n\tisMultiLineString,\n\tisStrictMultiLineString,\n\ttype MultiLineString,\n} from './Geometry/MultiLineString';\nimport {\n\tisMultiPoint,\n\tisStrictMultiPoint,\n\ttype MultiPoint,\n} from './Geometry/MultiPoint';\nimport {\n\tisMultiPolygon,\n\tisStrictMultiPolygon,\n\ttype MultiPolygon,\n} from './Geometry/MultiPolygon';\nimport { isPoint, isStrictPoint, type Point } from './Geometry/Point';\nimport { isPolygon, isStrictPolygon, type Polygon } from './Geometry/Polygon';\n\nexport type Geometry =\n\t| Point\n\t| MultiPoint\n\t| LineString\n\t| MultiLineString\n\t| Polygon\n\t| MultiPolygon;\nexport const isGeometry = any<Geometry>(\n\tisPoint,\n\tisMultiPoint,\n\tisLineString,\n\tisMultiLineString,\n\tisPolygon,\n\tisMultiPolygon,\n);\nexport const isStrictGeometry = any<Geometry>(\n\tisStrictPoint,\n\tisStrictMultiPoint,\n\tisStrictLineString,\n\tisStrictMultiLineString,\n\tisStrictPolygon,\n\tisStrictMultiPolygon,\n);\n","import { all, type Guard, isKeyOfType, type Validator } from '@konfirm/guard';\nimport { type GeoJSONObject, isGeoJSONObject } from './Concept/GeoJSONObject';\n\ntype GeometryBase = GeoJSONObject & {\n\tcoordinates: Array<unknown>;\n};\n\nexport type GeometryObject<T extends GeometryBase> = Omit<\n\tGeometryBase,\n\t'coordinates'\n> &\n\tT;\nexport type MultiGeometryObject<T extends GeometryBase> = GeometryObject<{\n\ttype: `Multi${T['type']}`;\n\tcoordinates: Array<T['coordinates']>;\n}>;\nexport function isGeometryObject<T extends GeometryBase>(\n\ttype: string,\n\tisCoordinates: Validator,\n): Guard<T> {\n\treturn all<T>(\n\t\tisGeoJSONObject(type),\n\t\tisKeyOfType('coordinates', isCoordinates),\n\t);\n}\n","import { type Guard, isArrayOfType } from '@konfirm/guard';\nimport { isGeometryObject, type MultiGeometryObject } from '../GeometryObject';\nimport {\n\tisPointCoordinates,\n\tisStrictPointCoordinates,\n\ttype Point,\n} from './Point';\n\nexport type MultiPoint = MultiGeometryObject<Point>;\nexport const isMultiPointCoordinates: Guard<MultiPoint['coordinates']> =\n\tisArrayOfType(isPointCoordinates);\nexport const isMultiPoint = isGeometryObject<MultiPoint>(\n\t'MultiPoint',\n\tisMultiPointCoordinates,\n);\nexport const isStrictMultiPointCoordinates: Guard<MultiPoint['coordinates']> =\n\tisArrayOfType(isStrictPointCoordinates);\nexport const isStrictMultiPoint = isGeometryObject<MultiPoint>(\n\t'MultiPoint',\n\tisStrictMultiPointCoordinates,\n);\n","import type { Guard } from '@konfirm/guard';\nimport {\n\tisPosition,\n\tisStrictPosition,\n\ttype Position,\n} from '../Concept/Position';\nimport { type GeometryObject, isGeometryObject } from '../GeometryObject';\n\nexport type Point = GeometryObject<{\n\ttype: 'Point';\n\tcoordinates: Position;\n}>;\nexport const isPointCoordinates: Guard<Point['coordinates']> = isPosition;\nexport const isPoint: Guard<Point> = isGeometryObject<Point>(\n\t'Point',\n\tisPointCoordinates,\n);\nexport const isStrictPointCoordinates: Guard<Point['coordinates']> =\n\tisStrictPosition;\nexport const isStrictPoint: Guard<Point> = isGeometryObject<Point>(\n\t'Point',\n\tisStrictPointCoordinates,\n);\n","import type { Guard } from '@konfirm/guard';\nimport { type GeometryObject, isGeometryObject } from '../GeometryObject';\nimport {\n\tisMultiPointCoordinates,\n\tisStrictMultiPointCoordinates,\n\ttype MultiPoint,\n} from './MultiPoint';\n\nexport type LineString = GeometryObject<{\n\ttype: 'LineString';\n\tcoordinates: MultiPoint['coordinates'];\n}>;\nexport const isLineStringCoordinates = isMultiPointCoordinates;\nexport const isLineString: Guard<LineString> = isGeometryObject<LineString>(\n\t'LineString',\n\tisLineStringCoordinates,\n);\nexport const isStrictLineStringCoordinates = isStrictMultiPointCoordinates;\nexport const isStrictLineString: Guard<LineString> =\n\tisGeometryObject<LineString>('LineString', isStrictLineStringCoordinates);\n","import { isArrayOfType } from '@konfirm/guard';\nimport { isGeometryObject, type MultiGeometryObject } from '../GeometryObject';\nimport {\n\tisLineStringCoordinates,\n\tisStrictLineStringCoordinates,\n\ttype LineString,\n} from './LineString';\n\nexport type MultiLineString = MultiGeometryObject<LineString>;\nexport const isMultiLineStringCoordinates = isArrayOfType(\n\tisLineStringCoordinates,\n);\nexport const isMultiLineString = isGeometryObject<MultiLineString>(\n\t'MultiLineString',\n\tisMultiLineStringCoordinates,\n);\nexport const isStrictMultiLineStringCoordinates = isArrayOfType(\n\tisStrictLineStringCoordinates,\n);\nexport const isStrictMultiLineString = isGeometryObject<MultiLineString>(\n\t'MultiLineString',\n\tisStrictMultiLineStringCoordinates,\n);\n","import { isArrayOfType } from '@konfirm/guard';\nimport { isGeometryObject, type MultiGeometryObject } from '../GeometryObject';\nimport {\n\tisPolygonCoordinates,\n\tisStrictPolygonCoordinates,\n\ttype Polygon,\n} from './Polygon';\n\nexport type MultiPolygon = MultiGeometryObject<Polygon>;\nexport const isMultiPolygonCoordinates = isArrayOfType(isPolygonCoordinates);\nexport const isMultiPolygon = isGeometryObject<MultiPolygon>(\n\t'MultiPolygon',\n\tisMultiPolygonCoordinates,\n);\nexport const isStrictMultiPolygonCoordinates = isArrayOfType(\n\tisStrictPolygonCoordinates,\n);\nexport const isStrictMultiPolygon = isGeometryObject<MultiPolygon>(\n\t'MultiPolygon',\n\tisStrictMultiPolygonCoordinates,\n);\n","import { all, isArrayOfType } from '@konfirm/guard';\nimport { type ExteriorRing, isExteriorRing } from '../Concept/ExteriorRing';\nimport { type InteriorRing, isInteriorRing } from '../Concept/InteriorRing';\nimport { isLinearRing, isStrictLinearRing } from '../Concept/LinearRing';\nimport { type GeometryObject, isGeometryObject } from '../GeometryObject';\n\nexport type Polygon = GeometryObject<{\n\ttype: 'Polygon';\n\tcoordinates: [ExteriorRing, ...Array<InteriorRing>];\n}>;\nexport const isPolygonCoordinates = all(isArrayOfType(isLinearRing));\nexport const isPolygon = isGeometryObject<Polygon>(\n\t'Polygon',\n\tisPolygonCoordinates,\n);\nexport const isStrictPolygonCoordinates = all(\n\tisArrayOfType(isStrictLinearRing),\n\t(value: unknown) => isExteriorRing((<Array<unknown>>value)[0]),\n\t(value: unknown) => (<Array<unknown>>value).slice(1).every(isInteriorRing),\n);\nexport const isStrictPolygon = isGeometryObject<Polygon>(\n\t'Polygon',\n\tisStrictPolygonCoordinates,\n);\n","import { all } from '@konfirm/guard';\nimport { isCounterClockwiseWinding } from '../../Utility/Winding';\nimport {\n\tisLinearRing,\n\tisStrictLinearRing,\n\ttype LinearRing,\n} from './LinearRing';\n\nexport type ExteriorRing = LinearRing;\nexport const isExteriorRing = all<ExteriorRing>(isLinearRing);\nexport const isStrictExteriorRing = all<ExteriorRing>(\n\tisStrictLinearRing,\n\tisCounterClockwiseWinding,\n);\n","import { isArrayOfType } from '@konfirm/guard';\nimport { isPosition, type Position } from '../GeoJSON/Concept/Position';\n\nfunction winding(positions: Array<Position>): number {\n\treturn positions.reduce((carry, [x, y], i, a) => {\n\t\tconst [nx, ny] = a[(i + 1) % a.length];\n\n\t\treturn carry + (nx - x) * (ny + y);\n\t}, 0);\n}\n\nconst isPositionArray = isArrayOfType<Array<Position>>(isPosition);\n\nexport function isClockwiseWinding<T extends Array<Position>>(\n\tvalue: unknown,\n): value is T {\n\treturn isPositionArray(value) && winding(value) <= 0;\n}\nexport function isCounterClockwiseWinding<T extends Array<Position>>(\n\tvalue: unknown,\n): value is T {\n\treturn isPositionArray(value) && winding(value) >= 0;\n}\n","import { all, isArrayOfSize, isArrayOfType } from '@konfirm/guard';\nimport { isPosition, isStrictPosition, type Position } from './Position';\n\nexport type LinearRing = Array<Position>;\nexport const isLinearRing = all<LinearRing>(\n\tisArrayOfType(isPosition),\n\tisArrayOfSize(4),\n\t(value: Array<Position>) =>\n\t\tvalue[value.length - 1].every((v, i) => v === value[0][i]),\n);\nexport const isStrictLinearRing = all<LinearRing>(\n\tisArrayOfType(isStrictPosition),\n\tisArrayOfSize(4),\n\t(value: Array<Position>) =>\n\t\tvalue[value.length - 1].every((v, i) => v === value[0][i]),\n);\n","import { all } from '@konfirm/guard';\nimport { isClockwiseWinding } from '../../Utility/Winding';\nimport {\n\tisLinearRing,\n\tisStrictLinearRing,\n\ttype LinearRing,\n} from './LinearRing';\n\nexport type InteriorRing = LinearRing;\nexport const isInteriorRing = all<InteriorRing>(isLinearRing);\nexport const isStrictInteriorRing = all<InteriorRing>(\n\tisStrictLinearRing,\n\tisClockwiseWinding,\n);\n","import { all, any, isArrayOfType, isKeyOfType } from '@konfirm/guard';\nimport { type GeoJSONObject, isGeoJSONObject } from './Concept/GeoJSONObject';\nimport { type Geometry, isGeometry, isStrictGeometry } from './Geometry';\n\nexport type GeometryCollection = GeoJSONObject<{\n\ttype: 'GeometryCollection';\n\tgeometries: Array<Geometry | GeometryCollection>;\n}>;\n\nconst isGeometryCollectionObject = all<GeometryCollection>(\n\tisGeoJSONObject('GeometryCollection'),\n\tisKeyOfType(\n\t\t'geometries',\n\t\tisArrayOfType(any(isGeometry, isGeometryCollection)),\n\t),\n);\nconst isStrictGeometryCollectionObject = all<GeometryCollection>(\n\tisGeoJSONObject('GeometryCollection'),\n\tisKeyOfType(\n\t\t'geometries',\n\t\tisArrayOfType(any(isStrictGeometry, isStrictGeometryCollection)),\n\t),\n);\nexport function isGeometryCollection(\n\tvalue: unknown,\n): value is GeometryCollection {\n\treturn isGeometryCollectionObject(value);\n}\nexport function isStrictGeometryCollection(\n\tvalue: unknown,\n): value is GeometryCollection {\n\treturn isStrictGeometryCollectionObject(value);\n}\n","import { all, isArrayOfType, isKeyOfType } from '@konfirm/guard';\nimport { type GeoJSONObject, isGeoJSONObject } from './Concept/GeoJSONObject';\nimport { type Feature, isFeature, isStrictFeature } from './Feature';\n\nexport type FeatureCollection = GeoJSONObject<{\n\ttype: 'FeatureCollection';\n\tfeatures: Array<Feature>;\n}>;\nexport const isFeatureCollection = all<FeatureCollection>(\n\tisGeoJSONObject('FeatureCollection'),\n\tisKeyOfType('features', isArrayOfType(isFeature)),\n);\nexport const isStrictFeatureCollection = all<FeatureCollection>(\n\tisGeoJSONObject('FeatureCollection'),\n\tisKeyOfType('features', isArrayOfType(isStrictFeature)),\n);\n","import { any } from '@konfirm/guard';\nimport { type Feature, isFeature, isStrictFeature } from './Feature';\nimport {\n\ttype FeatureCollection,\n\tisFeatureCollection,\n\tisStrictFeatureCollection,\n} from './FeatureCollection';\nimport { type Geometry, isGeometry, isStrictGeometry } from './Geometry';\nimport {\n\ttype GeometryCollection,\n\tisGeometryCollection,\n\tisStrictGeometryCollection,\n} from './GeometryCollection';\n\nexport type GeoJSON =\n\t| Geometry\n\t| GeometryCollection\n\t| Feature\n\t| FeatureCollection;\nexport const isGeoJSON = any<GeoJSON>(\n\tisGeometry,\n\tisGeometryCollection,\n\tisFeature,\n\tisFeatureCollection,\n);\nexport const isStrictGeoJSON = any<GeoJSON>(\n\tisStrictGeometry,\n\tisStrictGeometryCollection,\n\tisStrictFeature,\n\tisStrictFeatureCollection,\n);\n","import type {\n\tLineString,\n\tMultiLineString,\n\tMultiPoint,\n\tMultiPolygon,\n\tPoint,\n\tPolygon,\n} from '../../main';\nimport type { Feature } from '../GeoJSON/Feature';\nimport type { FeatureCollection } from '../GeoJSON/FeatureCollection';\nimport type { GeoJSON } from '../GeoJSON/GeoJSON';\nimport type { GeometryCollection } from '../GeoJSON/GeometryCollection';\n\ntype SimpleGeometry = Point | LineString | Polygon;\ntype UnwrapGeometry = Exclude<GeoJSON, SimpleGeometry>;\n\ntype Reducer = {\n\t[K in UnwrapGeometry['type']]: (\n\t\tgeo: Extract<UnwrapGeometry, { type: K }>,\n\t\tunwrap: (geo: GeoJSON) => Iterable<SimpleGeometry>,\n\t) => Iterable<SimpleGeometry>;\n};\n\nconst reducers: Reducer = {\n\t*MultiPoint(\n\t\t{ coordinates, ...rest }: MultiPoint,\n\t\tunwrap,\n\t): Iterable<SimpleGeometry> {\n\t\tfor (const pair of coordinates) {\n\t\t\tyield* unwrap(<Point>{\n\t\t\t\tcoordinates: pair,\n\t\t\t\t...rest,\n\t\t\t\ttype: 'Point',\n\t\t\t});\n\t\t}\n\t},\n\t*MultiLineString(\n\t\t{ coordinates, ...rest }: MultiLineString,\n\t\tunwrap,\n\t): Iterable<SimpleGeometry> {\n\t\tfor (const pair of coordinates) {\n\t\t\tyield* unwrap(<LineString>{\n\t\t\t\tcoordinates: pair,\n\t\t\t\t...rest,\n\t\t\t\ttype: 'LineString',\n\t\t\t});\n\t\t}\n\t},\n\t*MultiPolygon(\n\t\t{ coordinates, ...rest }: MultiPolygon,\n\t\tunwrap,\n\t): Iterable<SimpleGeometry> {\n\t\tfor (const pair of coordinates) {\n\t\t\tyield* unwrap(<Polygon>{\n\t\t\t\tcoordinates: pair,\n\t\t\t\t...rest,\n\t\t\t\ttype: 'Polygon',\n\t\t\t});\n\t\t}\n\t},\n\t*GeometryCollection(\n\t\t{ geometries }: GeometryCollection,\n\t\tunwrap,\n\t): Iterable<SimpleGeometry> {\n\t\tfor (const geometry of geometries) {\n\t\t\tyield* unwrap(geometry);\n\t\t}\n\t},\n\t*Feature({ geometry }: Feature, unwrap): Iterable<SimpleGeometry> {\n\t\tyield* unwrap(geometry);\n\t},\n\t*FeatureCollection(\n\t\t{ features }: FeatureCollection,\n\t\tunwrap,\n\t): Iterable<SimpleGeometry> {\n\t\tfor (const { geometry } of features) {\n\t\t\tyield* unwrap(geometry);\n\t\t}\n\t},\n};\n\n/**\n * Iterator class to turn any GeoJSON structure into one or more SimpleGeometry (Point | LineString | Polygon) objects\n *\n * @export\n * @class SimpleGeometryIterator\n */\nexport class SimpleGeometryIterator {\n\tprivate readonly inputs: Array<GeoJSON> = [];\n\n\tconstructor(...inputs: [GeoJSON, ...Array<GeoJSON>]) {\n\t\tthis.inputs = inputs;\n\t}\n\n\t/**\n\t * Generator yielding all SimpleGeometry objects from the provided GeoJSON structure(s)\n\t *\n\t * @return {*} {Iterator<SimpleGeometry>}\n\t * @memberof SimpleGeometryIterator\n\t */\n\t*[Symbol.iterator](): Iterator<SimpleGeometry> {\n\t\tfor (const input of this.inputs) {\n\t\t\tfor (const simple of this.unwrap(input)) {\n\t\t\t\tyield simple;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * unwrap any GeoJSON object into one or more SimpleGeometry object\n\t *\n\t * @private\n\t * @param {GeoJSON} geo\n\t * @return {*} {Iterable<SimpleGeometry>}\n\t * @memberof SimpleGeometryIterator\n\t */\n\tprivate *unwrap(geo: GeoJSON): Iterable<SimpleGeometry> {\n\t\ttype Invoke = (\n\t\t\tgeo: GeoJSON,\n\t\t\tunwrap: (geo: GeoJSON) => Iterable<SimpleGeometry>,\n\t\t) => Iterable<SimpleGeometry>;\n\t\tgeo.type in reducers\n\t\t\t? yield* (<Invoke>reducers[<keyof Reducer>geo.type])(\n\t\t\t\t\tgeo,\n\t\t\t\t\t(g: GeoJSON): Iterable<SimpleGeometry> => this.unwrap(g),\n\t\t\t\t)\n\t\t\t: yield <SimpleGeometry>geo;\n\t}\n}\n","/**\n * Iterator class which traverses all value pairs of two or more Iterable instances\n *\n * @export\n * @class IterablePairIterator\n * @template T\n */\nexport class IterablePairIterator<T = unknown> {\n\tprivate readonly iterators: Array<Iterable<T>> = [];\n\n\t/**\n\t * Constructs a new instance of IterablePairIterator\n\t *\n\t * @param iterators\n\t */\n\tconstructor(\n\t\t...iterators: [Iterable<T>, Iterable<T>, ...Array<Iterable<T>>]\n\t) {\n\t\tthis.iterators = iterators;\n\t}\n\n\t/**\n\t * Generator yielding all value pairs from the provided iterators\n\t *\n\t * @return {*} {Iterator<[T, T]>}\n\t * @memberof IterablePairIterator\n\t */\n\t*[Symbol.iterator](): Iterator<[T, T]> {\n\t\tfor (const [a, b] of this.pairs(this.iterators)) {\n\t\t\tfor (const one of a) {\n\t\t\t\tfor (const two of b) {\n\t\t\t\t\tyield [one, two];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Create unique Iterator<T> combinations to traverse over\n\t *\n\t * @private\n\t * @param {Array<Iterable<T>>} source\n\t * @return {*} {Array<[Iterable<T>, Iterable<T>]>}\n\t * @memberof IterablePairIterator\n\t */\n\tprivate pairs(\n\t\tsource: Array<Iterable<T>>,\n\t): Array<[Iterable<T>, Iterable<T>]> {\n\t\treturn source.flatMap((a, i) =>\n\t\t\tsource.slice(i + 1).map((b) => [a, b]),\n\t\t) as Array<[Iterable<T>, Iterable<T>]>;\n\t}\n}\n","import type { GeoJSON } from '../GeoJSON/GeoJSON';\nimport type { Point } from '../GeoJSON/Geometry/Point';\nimport { SimpleGeometryIterator } from '../Iterator/SimpleGeometry';\n\nexport type Box = [\n\tminLon: number,\n\tminLat: number,\n\tmaxLon: number,\n\tmaxLat: number,\n];\n\nfunction* positions(\n\tcoordinates: Array<unknown>,\n): Generator<Point['coordinates']> {\n\tif (typeof coordinates[0] === 'number') {\n\t\tyield coordinates as Point['coordinates'];\n\t} else {\n\t\tfor (const child of coordinates as Array<Array<unknown>>) {\n\t\t\tyield* positions(child);\n\t\t}\n\t}\n}\n\nfunction boxFromPositions(source: Iterable<Point['coordinates']>): Box {\n\tlet minLon = Infinity,\n\t\tminLat = Infinity,\n\t\tmaxLon = -Infinity,\n\t\tmaxLat = -Infinity;\n\n\tfor (const [lon, lat] of source) {\n\t\tif (lon < minLon) minLon = lon;\n\t\tif (lat < minLat) minLat = lat;\n\t\tif (lon > maxLon) maxLon = lon;\n\t\tif (lat > maxLat) maxLat = lat;\n\t}\n\n\treturn [minLon, minLat, maxLon, maxLat];\n}\n\nexport function createBoxFromCoordinates(coordinates: Array<unknown>): Box {\n\treturn boxFromPositions(positions(coordinates));\n}\n\nexport function createBox(shape: GeoJSON): Box {\n\treturn boxFromPositions(\n\t\t(function* () {\n\t\t\tfor (const geometry of new SimpleGeometryIterator(shape)) {\n\t\t\t\tyield* positions(\n\t\t\t\t\t(geometry as unknown as { coordinates: Array<unknown> })\n\t\t\t\t\t\t.coordinates,\n\t\t\t\t);\n\t\t\t}\n\t\t})(),\n\t);\n}\n\nexport function isWithinBox(\n\t[lon, lat]: Point['coordinates'],\n\t[minLon, minLat, maxLon, maxLat]: Box,\n): boolean {\n\treturn lon >= minLon && lon <= maxLon && lat >= minLat && lat <= maxLat;\n}\n","import {\n\tEARTH_FLATTENING,\n\tEARTH_RADIUS,\n\tEARTH_RADIUS_MAJOR,\n\tEARTH_RADIUS_MINOR,\n} from '../Constants';\nimport type { Point } from '../GeoJSON/Geometry/Point';\nimport { createBoxFromCoordinates, isWithinBox } from './Box';\n\nconst D2R = Math.PI / 180;\nconst π = Math.PI;\n\nfunction constrain(value: number, min: number, max: number): number {\n\treturn Math.max(Math.min(value, max), min);\n}\n\nfunction squared(n: number): number {\n\treturn n * n;\n}\n\nfunction rad(n: number): number {\n\treturn n * D2R;\n}\n\nconst EARTH_RADIUS_MAJOR_SQUARED = squared(EARTH_RADIUS_MAJOR);\nconst EARTH_RADIUS_MINOR_SQUARED = squared(EARTH_RADIUS_MINOR);\nconst EARTH_RADIUS_FACTOR =\n\t(EARTH_RADIUS_MAJOR_SQUARED - EARTH_RADIUS_MINOR_SQUARED) /\n\tEARTH_RADIUS_MINOR_SQUARED;\nconst EARTH_INVERSE_FLATTENING = 1 / EARTH_FLATTENING;\n\nconst PointToPoint: {\n\t[key: string]: (\n\t\t...positions: [Point['coordinates'], Point['coordinates']]\n\t) => number;\n} = {\n\tcartesian([λa, φa], [λb, φb]) {\n\t\treturn (\n\t\t\tEARTH_RADIUS * rad(Math.sqrt(squared(λb - λa) + squared(φb - φa)))\n\t\t);\n\t},\n\thaversine([λa, φa], [λb, φb]) {\n\t\t//https://www.movable-type.co.uk/scripts/latlong.html\n\t\tconst Δ =\n\t\t\tsquared(Math.sin(rad(φb - φa) / 2)) +\n\t\t\tMath.cos(rad(φa)) *\n\t\t\t\tMath.cos(rad(φb)) *\n\t\t\t\tsquared(Math.sin(rad(λb - λa) / 2));\n\n\t\treturn EARTH_RADIUS * Math.atan2(Math.sqrt(Δ), Math.sqrt(1 - Δ)) * 2;\n\t},\n\tvincenty(...points) {\n\t\t//https://www.movable-type.co.uk/scripts/latlong-vincenty.html\n\t\tconst [[λ1, φ1], [λ2, φ2]] = points.map((p) =>\n\t\t\t(<Array<number>>p).map(rad),\n\t\t);\n\t\tconst L = λ2 - λ1; // L = difference in longitude, U = reduced latitude, defined by tan U = (1-f)·tanφ.\n\t\tconst tanU1 = (1 - EARTH_INVERSE_FLATTENING) * Math.tan(φ1),\n\t\t\tcosU1 = 1 / Math.sqrt(1 + tanU1 * tanU1),\n\t\t\tsinU1 = tanU1 * cosU1;\n\t\tconst tanU2 = (1 - EARTH_INVERSE_FLATTENING) * Math.tan(φ2),\n\t\t\tcosU2 = 1 / Math.sqrt(1 + tanU2 * tanU2),\n\t\t\tsinU2 = tanU2 * cosU2;\n\n\t\tconst antipodal = Math.abs(L) > π / 2 || Math.abs(φ2 - φ1) > π / 2;\n\n\t\tlet λ = L;\n\t\tlet sinλ = null;\n\t\tlet cosλ = null; // λ = difference in longitude on an auxiliary sphere\n\t\tlet σ = antipodal ? π : 0;\n\t\tlet sinσ = 0;\n\t\tlet cosσ = antipodal ? -1 : 1;\n\t\tlet sinSqσ = null; // σ = angular distance P₁ P₂ on the sphere\n\t\tlet cos2σₘ = 1; // σₘ = angular distance on the sphere from the equator to the midpoint of the line\n\t\tlet cosSqα = 1; // α = azimuth of the geodesic at the equator\n\t\tlet λʹ = null;\n\t\tlet iterations = 0;\n\n\t\tdo {\n\t\t\tsinλ = Math.sin(λ);\n\t\t\tcosλ = Math.cos(λ);\n\t\t\tsinSqσ =\n\t\t\t\t(cosU2 * sinλ) ** 2 +\n\t\t\t\t(cosU1 * sinU2 - sinU1 * cosU2 * cosλ) ** 2;\n\t\t\tif (Math.abs(sinSqσ) < 1e-24) break; // co-incident/antipodal points (σ < ≈0.006mm)\n\t\t\tsinσ = Math.sqrt(sinSqσ);\n\t\t\tcosσ = sinU1 * sinU2 + cosU1 * cosU2 * cosλ;\n\t\t\tσ = Math.atan2(sinσ, cosσ);\n\t\t\tconst sinα = (cosU1 * cosU2 * sinλ) / sinσ;\n\t\t\tcosSqα = 1 - sinα * sinα;\n\t\t\tcos2σₘ = cosSqα !== 0 ? cosσ - (2 * sinU1 * sinU2) / cosSqα : 0; // on equatorial line cos²α = 0 (§6)\n\t\t\tconst C =\n\t\t\t\t(EARTH_INVERSE_FLATTENING / 16) *\n\t\t\t\tcosSqα *\n\t\t\t\t(4 + EARTH_INVERSE_FLATTENING * (4 - 3 * cosSqα));\n\t\t\tλʹ = λ;\n\t\t\tλ =\n\t\t\t\tL +\n\t\t\t\t(1 - C) *\n\t\t\t\t\tEARTH_INVERSE_FLATTENING *\n\t\t\t\t\tsinα *\n\t\t\t\t\t(σ +\n\t\t\t\t\t\tC *\n\t\t\t\t\t\t\tsinσ *\n\t\t\t\t\t\t\t(cos2σₘ + C * cosσ * (-1 + 2 * cos2σₘ * cos2σₘ)));\n\t\t\t// TODO: add tests\n\t\t\t// const iterationCheck = antipodal ? Math.abs(λ) - π : Math.abs(λ);\n\t\t\t// if (iterationCheck > π) throw new EvalError('λ > π');\n\t\t} while (Math.abs(λ - λʹ) > 1e-12 && ++iterations < 1000); // TV: 'iterate until negligible change in λ' (≈0.006mm)\n\t\t// TODO: add tests\n\t\t// if (iterations >= 1000) throw new EvalError('Vincenty formula failed to converge');\n\n\t\tconst uSq = cosSqα * EARTH_RADIUS_FACTOR;\n\t\tconst A =\n\t\t\t1 + (uSq / 16384) * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq)));\n\t\tconst B = (uSq / 1024) * (256 + uSq * (-128 + uSq * (74 - 47 * uSq)));\n\t\tconst Δσ =\n\t\t\tB *\n\t\t\tsinσ *\n\t\t\t(cos2σₘ +\n\t\t\t\t(B / 4) *\n\t\t\t\t\t(cosσ * (-1 + 2 * cos2σₘ * cos2σₘ) -\n\t\t\t\t\t\t(B / 6) *\n\t\t\t\t\t\t\tcos2σₘ *\n\t\t\t\t\t\t\t(-3 + 4 * sinσ * sinσ) *\n\t\t\t\t\t\t\t(-3 + 4 * cos2σₘ * cos2σₘ)));\n\n\t\treturn EARTH_RADIUS_MINOR * A * (σ - Δσ);\n\t},\n};\n\nexport type PointToPointCalculation =\n\t| 'cartesian'\n\t| 'haversine'\n\t| 'vincenty'\n\t| ((a: Point['coordinates'], b: Point['coordinates']) => number);\n\nexport function getClosestPointOnLineByPoint(\n\tpoint: Point['coordinates'],\n\tline: [Point['coordinates'], Point['coordinates']],\n): Point['coordinates'] {\n\tconst [[px, py], [ax, ay], [bx, by]] = [point, ...line];\n\tconst [abx, aby] = [bx - ax, by - ay];\n\tconst [apx, apy] = [px - ax, py - ay];\n\tconst t = constrain(\n\t\t(apx * abx + apy * aby) / (abx * abx + aby * aby),\n\t\t0,\n\t\t1,\n\t);\n\n\treturn t === 0 || t === 1 ? line[t] : [ax + abx * t, ay + aby * t];\n}\n\nexport function getDistanceOfPointToPoint(\n\ta: Point['coordinates'],\n\tb: Point['coordinates'],\n\tcalculation: PointToPointCalculation,\n): number {\n\tconst calc =\n\t\ttypeof calculation === 'function'\n\t\t\t? calculation\n\t\t\t: PointToPoint[calculation];\n\n\tif (typeof calc === 'function') {\n\t\treturn calc(a, b);\n\t}\n\n\tthrow new Error(`Not a PointToPoint calculation function ${calculation}`);\n}\n\nexport function getDistanceOfPointToLine(\n\tpoint: Point['coordinates'],\n\tline: [Point['coordinates'], Point['coordinates']],\n\tcalculation: PointToPointCalculation,\n): number {\n\treturn getDistanceOfPointToPoint(\n\t\tpoint,\n\t\tgetClosestPointOnLineByPoint(point, line),\n\t\tcalculation,\n\t);\n}\n\nexport function getDistanceOfLineToLine(\n\ta: [Point['coordinates'], Point['coordinates']],\n\tb: [Point['coordinates'], Point['coordinates']],\n\tcalculation: PointToPointCalculation,\n): number {\n\treturn isLinesCrossing(a, b)\n\t\t? 0\n\t\t: Math.min(\n\t\t\t\t...a.map((a) => getDistanceOfPointToLine(a, b, calculation)),\n\t\t\t\t...b.map((b) => getDistanceOfPointToLine(b, a, calculation)),\n\t\t\t);\n}\n\nexport function isLinesCrossing(\n\ta: [Point['coordinates'], Point['coordinates']],\n\tb: [Point['coordinates'], Point['coordinates']],\n): boolean {\n\tconst [[a1x, a1y], [a2x, a2y]] = a;\n\tconst [[b1x, b1y], [b2x, b2y]] = b;\n\tconst [s1x, s1y, s2x, s2y] = [a2x - a1x, a2y - a1y, b2x - b1x, b2y - b1y];\n\tconst s =\n\t\t(-s1y * (a1x - b1x) + s1x * (a1y - b1y)) / (-s2x * s1y + s1x * s2y);\n\tconst t =\n\t\t(s2x * (a1y - b1y) - s2y * (a1x - b1x)) / (-s2x * s1y + s1x * s2y);\n\n\treturn s >= 0 && s <= 1 && t >= 0 && t <= 1;\n}\n\nexport function isPointOnLine(\n\tpoint: Point['coordinates'],\n\tline: [Point['coordinates'], Point['coordinates']],\n\tthreshold: number = 1e-14,\n): boolean {\n\treturn getDistanceOfPointToLine(point, line, 'cartesian') < threshold;\n}\n\nexport function isPointInRing(\n\tp: Point['coordinates'],\n\tring: Array<Point['coordinates']>,\n): boolean {\n\tif (!isWithinBox(p, createBoxFromCoordinates(ring))) {\n\t\treturn false;\n\t}\n\n\tconst { length } = ring;\n\tconst odd = ring.reduce((odd, a, i) => {\n\t\tconst b = ring[(length + i - 1) % length];\n\n\t\treturn ((a[1] < p[1] && b[1] >= p[1]) ||\n\t\t\t(b[1] < p[1] && a[1] >= p[1])) &&\n\t\t\t(a[0] <= p[0] || b[0] <= p[0])\n\t\t\t? odd ^\n\t\t\t\t\tNumber(\n\t\t\t\t\t\ta[0] + ((p[1] - a[1]) / (b[1] - a[1])) * (b[0] - a[0]) <\n\t\t\t\t\t\t\tp[0],\n\t\t\t\t\t)\n\t\t\t: odd;\n\t}, 0);\n\n\treturn (\n\t\todd !== 0 ||\n\t\tring.slice(1).some((a, index) => isPointOnLine(p, [ring[index], a]))\n\t);\n}\n","import type { Point } from '../GeoJSON/Geometry/Point';\n\nexport function segments(\n\tline: Array<Point['coordinates']>,\n): Array<[Point['coordinates'], Point['coordinates']]> {\n\treturn line.slice(1).map((point, index) => [line[index], point]);\n}\n","import type { GeoJSON } from '../GeoJSON/GeoJSON';\nimport type { LineString } from '../GeoJSON/Geometry/LineString';\nimport type { Point } from '../GeoJSON/Geometry/Point';\nimport type { Polygon } from '../GeoJSON/Geometry/Polygon';\nimport { IterablePairIterator } from '../Iterator/IterablePair';\nimport { SimpleGeometryIterator } from '../Iterator/SimpleGeometry';\nimport {\n\tgetDistanceOfLineToLine,\n\tgetDistanceOfPointToLine,\n\tgetDistanceOfPointToPoint,\n\tisPointInRing,\n\ttype PointToPointCalculation,\n} from './Calculate';\nimport { segments } from './Segments';\n\nconst geometries = {\n\tPointPoint(\n\t\ta: Point['coordinates'],\n\t\tb: Point['coordinates'],\n\t\tcalculation: PointToPointCalculation,\n\t): number {\n\t\treturn getDistanceOfPointToPoint(a, b, calculation);\n\t},\n\tLineStringPoint(\n\t\ta: LineString['coordinates'],\n\t\tb: Point['coordinates'],\n\t\tcalculation: PointToPointCalculation,\n\t): number {\n\t\treturn Math.min(\n\t\t\t...segments(a).map((line) =>\n\t\t\t\tgetDistanceOfPointToLine(b, line, calculation),\n\t\t\t),\n\t\t);\n\t},\n\tLineStringLineString(\n\t\ta: LineString['coordinates'],\n\t\tb: LineString['coordinates'],\n\t\tcalculation: PointToPointCalculation,\n\t): number {\n\t\tconst sa = segments(a);\n\t\tconst sb = segments(b);\n\n\t\treturn sa.reduce(\n\t\t\t(carry, a) =>\n\t\t\t\tsb.reduce(\n\t\t\t\t\t(carry, b) =>\n\t\t\t\t\t\tcarry > 0\n\t\t\t\t\t\t\t? Math.min(\n\t\t\t\t\t\t\t\t\tcarry,\n\t\t\t\t\t\t\t\t\tgetDistanceOfLineToLine(a, b, calculation),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: carry,\n\t\t\t\t\tcarry,\n\t\t\t\t),\n\t\t\tInfinity,\n\t\t);\n\t},\n\tPolygonPoint(\n\t\t[exterior, ...interior]: Polygon['coordinates'],\n\t\tb: Point['coordinates'],\n\t\tcalculation: PointToPointCalculation,\n\t): number {\n\t\tif (isPointInRing(b, exterior)) {\n\t\t\tconst [excluded] = interior.filter((ring) =>\n\t\t\t\tisPointInRing(b, ring),\n\t\t\t);\n\n\t\t\treturn excluded\n\t\t\t\t? this.LineStringPoint(excluded, b, calculation)\n\t\t\t\t: 0;\n\t\t}\n\n\t\treturn this.LineStringPoint(exterior, b, calculation);\n\t},\n\tPolygonLineString(\n\t\ta: Polygon['coordinates'],\n\t\tb: LineString['coordinates'],\n\t\tcalculation: PointToPointCalculation,\n\t): number {\n\t\tconst [exterior, ...interior] = a;\n\t\tconst line = segments(b);\n\t\tconst ring = b.some((b) => isPointInRing(b, exterior))\n\t\t\t? interior.find((a) => b.every((b) => isPointInRing(b, a)))\n\t\t\t: exterior;\n\n\t\treturn ring\n\t\t\t? Math.min(\n\t\t\t\t\t...segments(ring).map((a) =>\n\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t...line.map((b) =>\n\t\t\t\t\t\t\t\tgetDistanceOfLineToLine(a, b, calculation),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t: 0;\n\t},\n\tPolygonPolygon(\n\t\ta: Polygon['coordinates'],\n\t\tb: Polygon['coordinates'],\n\t\tcalculation: PointToPointCalculation,\n\t): number {\n\t\treturn Math.min(\n\t\t\tthis.PolygonLineString(a, b[0], calculation),\n\t\t\tthis.PolygonLineString(b, a[0], calculation),\n\t\t);\n\t},\n};\n\nexport function distance(\n\ta: GeoJSON,\n\tb: GeoJSON,\n\tcalculation: PointToPointCalculation = 'cartesian',\n): number {\n\tconst lookup = <\n\t\tRecord<\n\t\t\tstring,\n\t\t\t(\n\t\t\t\ta: unknown,\n\t\t\t\tb: unknown,\n\t\t\t\tcalculation: PointToPointCalculation,\n\t\t\t) => number\n\t\t>\n\t>geometries;\n\treturn Math.min(\n\t\t...[\n\t\t\t...new IterablePairIterator(\n\t\t\t\tnew SimpleGeometryIterator(a),\n\t\t\t\tnew SimpleGeometryIterator(b),\n\t\t\t),\n\t\t].map(([a, b]) => {\n\t\t\treturn a.type + b.type in lookup\n\t\t\t\t? lookup[a.type + b.type](\n\t\t\t\t\t\ta.coordinates,\n\t\t\t\t\t\tb.coordinates,\n\t\t\t\t\t\tcalculation,\n\t\t\t\t\t)\n\t\t\t\t: b.type + a.type in lookup\n\t\t\t\t\t? lookup[b.type + a.type](\n\t\t\t\t\t\t\tb.coordinates,\n\t\t\t\t\t\t\ta.coordinates,\n\t\t\t\t\t\t\tcalculation,\n\t\t\t\t\t\t)\n\t\t\t\t\t: Infinity;\n\t\t}),\n\t);\n}\n","import type { GeoJSON } from '../GeoJSON/GeoJSON';\nimport type { LineString } from '../GeoJSON/Geometry/LineString';\nimport type { Point } from '../GeoJSON/Geometry/Point';\nimport type { Polygon } from '../GeoJSON/Geometry/Polygon';\nimport { IterablePairIterator } from '../Iterator/IterablePair';\nimport { SimpleGeometryIterator } from '../Iterator/SimpleGeometry';\nimport { isLinesCrossing, isPointInRing, isPointOnLine } from './Calculate';\nimport { segments } from './Segments';\n\nconst geometries = {\n\tPointPoint(a: Point['coordinates'], b: Point['coordinates']): boolean {\n\t\treturn (\n\t\t\ta.length >= 2 &&\n\t\t\tb.length >= 2 &&\n\t\t\ta.slice(0, 2).every((v, i) => v === b[i])\n\t\t);\n\t},\n\tLineStringPoint(\n\t\ta: LineString['coordinates'],\n\t\tb: Point['coordinates'],\n\t): boolean {\n\t\treturn (\n\t\t\ta.some((a) => this.PointPoint(a, b)) ||\n\t\t\tsegments(a).some((line) => isPointOnLine(b, line))\n\t\t);\n\t},\n\tLineStringLineString(\n\t\ta: LineString['coordinates'],\n\t\tb: LineString['coordinates'],\n\t): boolean {\n\t\tconst lines = segments(b);\n\n\t\treturn segments(a).some((a) =>\n\t\t\tlines.some((b) => isLinesCrossing(a, b)),\n\t\t);\n\t},\n\tPolygonPoint(\n\t\t[exterior, ...interior]: Polygon['coordinates'],\n\t\tb: Point['coordinates'],\n\t): boolean {\n\t\treturn (\n\t\t\t(this.LineStringPoint(exterior, b) || isPointInRing(b, exterior)) &&\n\t\t\t(!interior.length ||\n\t\t\t\tinterior.every((ring) => !isPointInRing(b, ring)))\n\t\t);\n\t},\n\tPolygonLineString(\n\t\ta: Polygon['coordinates'],\n\t\tb: LineString['coordinates'],\n\t): boolean {\n\t\treturn (\n\t\t\ta.some((ring) => this.LineStringLineString(ring, b)) ||\n\t\t\tb.some((point) => this.PolygonPoint(a, point))\n\t\t);\n\t},\n\tPolygonPolygon(\n\t\ta: Polygon['coordinates'],\n\t\tb: Polygon['coordinates'],\n\t): boolean {\n\t\treturn (\n\t\t\tb.some(\n\t\t\t\t(b1) =>\n\t\t\t\t\tthis.PolygonLineString(a, b1) ||\n\t\t\t\t\tb1.some((b2) => this.PolygonPoint(a, b2)),\n\t\t\t) ||\n\t\t\ta.some(\n\t\t\t\t(a1) =>\n\t\t\t\t\tthis.PolygonLineString(b, a1) ||\n\t\t\t\t\ta1.some((a2) => this.PolygonPoint(b, a2)),\n\t\t\t)\n\t\t);\n\t},\n};\n\nexport function intersect(a: GeoJSON, b: GeoJSON): boolean {\n\tconst lookup = <Record<string, (a: unknown, b: unknown) => boolean>>(\n\t\tgeometries\n\t);\n\tfor (const [itA, itB] of new IterablePairIterator(\n\t\tnew SimpleGeometryIterator(a),\n\t\tnew SimpleGeometryIterator(b),\n\t)) {\n\t\tif (\n\t\t\t(itA.type + itB.type in lookup &&\n\t\t\t\tlookup[itA.type + itB.type](\n\t\t\t\t\titA.coordinates,\n\t\t\t\t\titB.coordinates,\n\t\t\t\t)) ||\n\t\t\t(itB.type + itA.type in lookup &&\n\t\t\t\tlookup[itB.type + itA.type](itB.coordinates, itA.coordinates))\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n"],"mappings":"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","names":["all","any","isStructure","all","any","any","all","any","all","all","isArrayOfType","isArrayOfType","isArrayOfType","all","isArrayOfType","all","isArrayOfType","positions","isArrayOfType","all","isArrayOfType","all","isArrayOfType","all","all","all","all","isArrayOfType","isArrayOfType","any","all","any","isArrayOfType","isKeyOfType","all","isKeyOfType","isArrayOfType","any","all","isStructure","any","all","isArrayOfType","isKeyOfType","all","isKeyOfType","isArrayOfType","any","any","geometries","a","b","odd","a","carry","b","geometries","a","b"]}
package/package.json CHANGED
@@ -1,63 +1,101 @@
1
- {
2
- "name": "@konfirm/geojson",
3
- "version": "1.0.0",
4
- "description": "GeoJSON implementation",
5
- "iife": "dist/geojson.js",
6
- "main": "dist/geojson.cjs.js",
7
- "module": "dist/geojson.es.js",
8
- "types": "dist/geojson.d.ts",
9
- "exports": {
10
- ".": {
11
- "types": "./source/main.ts",
12
- "import": "./dist/geojson.es.js",
13
- "require": "./dist/geojson.cjs.js"
14
- }
15
- },
16
- "repository": {
17
- "type": "git",
18
- "url": "https://github.com/konfirm/geojson.git"
19
- },
20
- "bugs": {
21
- "url": "https://github.com/konfirm/geojson/issues"
22
- },
23
- "scripts": {
24
- "test": "run-script-os",
25
- "test:nix": "ts-node node_modules/tape/bin/tape 'test/**/*.ts'",
26
- "test:win32": "ts-node node_modules/tape/bin/tape test/**/*.ts",
27
- "test:coverage": "run-script-os",
28
- "test:coverage:nix": "nyc --reporter=html --require ts-node/register tape 'test/**/*.ts' | tap-arc",
29
- "test:coverage:win32": "nyc --reporter=html --require ts-node/register tape test/**/*.ts | tap-arc",
30
- "test:pretty": "run-script-os",
31
- "test:pretty:nix": "nyc --require ts-node/register tape 'test/**/*.ts' | tap-arc",
32
- "test:pretty:win32": "nyc --require ts-node/register tape test/**/*.ts | tap-arc",
33
- "prebuild": "tsc --declarationDir temp --declaration true --emitDeclarationOnly true",
34
- "build": "rollup -c rollup.config.mjs",
35
- "postbuild": "rm -rf temp",
36
- "prepublish": "npm run build"
37
- },
38
- "keywords": [
39
- "geojson"
40
- ],
41
- "author": "Rogier Spieker <rogier+npm@konfirm.eu>",
42
- "license": "MIT",
43
- "devDependencies": {
44
- "@rollup/plugin-commonjs": "^24.0.1",
45
- "@rollup/plugin-node-resolve": "^15.0.1",
46
- "@rollup/plugin-terser": "^0.4.0",
47
- "@rollup/plugin-typescript": "^11.0.0",
48
- "@types/tape": "^4.13.2",
49
- "nyc": "^15.1.0",
50
- "rollup": "^3.14.0",
51
- "rollup-plugin-dts": "^5.1.1",
52
- "run-script-os": "^1.1.6",
53
- "tap-arc": "^0.3.5",
54
- "tape": "^5.6.3",
55
- "template-literal-each": "^3.0.0",
56
- "ts-node": "^10.9.1",
57
- "tslib": "^2.5.0",
58
- "typescript": "^4.9.5"
59
- },
60
- "dependencies": {
61
- "@konfirm/guard": "^2.0.0"
62
- }
63
- }
1
+ {
2
+ "name": "@konfirm/geojson",
3
+ "version": "1.0.1",
4
+ "description": "TypeScript-first GeoJSON validation, intersection, and geodesic distance — RFC 7946 compliant",
5
+ "main": "dist/main.js",
6
+ "module": "dist/main.mjs",
7
+ "types": "dist/main.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/main.d.ts",
11
+ "import": "./dist/main.mjs",
12
+ "require": "./dist/main.js"
13
+ }
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/konfirm/geojson.git"
18
+ },
19
+ "bugs": {
20
+ "url": "https://github.com/konfirm/geojson/issues"
21
+ },
22
+ "scripts": {
23
+ "test": "npm run test:unit && npm run test:integration",
24
+ "test:unit": "node --require ./test.register.cjs --test 'source/**/*.spec.ts'",
25
+ "test:integration": "node --require ./test.register.cjs --test 'test/**/*.spec.ts'",
26
+ "test:coverage": "odz -s 'source/**' -S 'source/**/*.spec.ts' 'source/main.ts' -- node --require ./test.register.cjs --test 'source/**/*.spec.ts' 'test/**/*.spec.ts'",
27
+ "test:coverage:html": "odz -s 'source/**' -S 'source/**/*.spec.ts' 'source/main.ts' -r html -rd ./coverage -- node --require ./test.register.cjs --test 'source/**/*.spec.ts' 'test/**/*.spec.ts'",
28
+ "build": "tsup",
29
+ "lint": "biome lint",
30
+ "format": "biome format",
31
+ "check": "biome check",
32
+ "check:write": "biome check --write",
33
+ "release": "release-it --ci",
34
+ "release:beta": "release-it --preRelease=beta --ci",
35
+ "prepublish": "npm run build",
36
+ "prepare": "husky || true"
37
+ },
38
+ "files": [
39
+ "dist",
40
+ "README.md",
41
+ "LICENSE"
42
+ ],
43
+ "keywords": [
44
+ "geojson",
45
+ "gis",
46
+ "rfc7946",
47
+ "typescript",
48
+ "validation",
49
+ "geodesy",
50
+ "intersection",
51
+ "distance",
52
+ "haversine",
53
+ "vincenty",
54
+ "guard",
55
+ "geometry"
56
+ ],
57
+ "sideEffects": false,
58
+ "author": "Rogier Spieker <rogier+npm@konfirm.eu>",
59
+ "license": "MIT",
60
+ "devDependencies": {
61
+ "@biomejs/biome": "^2.4.16",
62
+ "@commitlint/config-conventional": "^20.5.3",
63
+ "@release-it/conventional-changelog": "^10.0.6",
64
+ "@types/node": "^22.0.0",
65
+ "commitlint": "^20.5.3",
66
+ "husky": "^9.1.7",
67
+ "one-double-zero": "^1.1.1",
68
+ "release-it": "^19.2.4",
69
+ "template-literal-each": "^3.0.0",
70
+ "ts-node": "^10.9.1",
71
+ "tslib": "^2.5.0",
72
+ "tsup": "^8.5.1",
73
+ "typescript": "^6.0.0"
74
+ },
75
+ "release-it": {
76
+ "git": {
77
+ "commitMessage": "chore: release v${version}",
78
+ "tagName": "v${version}",
79
+ "requireCleanWorkingDir": true,
80
+ "push": true,
81
+ "pushTags": true
82
+ },
83
+ "github": {
84
+ "release": true,
85
+ "tokenRef": "GITHUB_TOKEN"
86
+ },
87
+ "npm": {
88
+ "publish": false,
89
+ "skipChecks": true
90
+ },
91
+ "plugins": {
92
+ "@release-it/conventional-changelog": {
93
+ "preset": "conventionalcommits",
94
+ "infile": "CHANGELOG.md"
95
+ }
96
+ }
97
+ },
98
+ "dependencies": {
99
+ "@konfirm/guard": "^2.0.0"
100
+ }
101
+ }
package/.editorconfig DELETED
@@ -1,16 +0,0 @@
1
- # EditorConfig is awesome: https://EditorConfig.org
2
-
3
- # top-most EditorConfig file
4
- root = true
5
-
6
- [*]
7
- indent_style = tab
8
- indent_size = 4
9
- end_of_line = crlf
10
- charset = utf-8
11
- trim_trailing_whitespace = true
12
- insert_final_newline = true
13
-
14
- [*.yml]
15
- indent_style = space
16
- indent_size = 2
@@ -1,21 +0,0 @@
1
- name: Release
2
-
3
- on:
4
- push:
5
- tags:
6
- - "**"
7
-
8
- jobs:
9
- package:
10
- runs-on: ubuntu-latest
11
- steps:
12
- - uses: actions/checkout@v3
13
- - uses: actions/setup-node@v3
14
- with:
15
- node-version: 16
16
- registry-url: https://registry.npmjs.org/
17
- - run: npm install
18
- - run: npm run test:pretty
19
- - run: npm publish --access public
20
- env:
21
- NODE_AUTH_TOKEN: ${{secrets.NPM_AUTH_TOKEN}}
@@ -1,56 +0,0 @@
1
- # This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node
2
- # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
3
-
4
- name: Tests
5
-
6
- on:
7
- push:
8
- branches:
9
- - "main"
10
- - "fix/*"
11
- - "feature/*"
12
- paths-ignore:
13
- - "**.md"
14
- pull_request:
15
- types: [opened, synchronize, closed]
16
- paths-ignore:
17
- - "**.md"
18
-
19
- jobs:
20
- test-typescript:
21
- runs-on: ${{ matrix.os }}
22
-
23
- strategy:
24
- matrix:
25
- os:
26
- - ubuntu-latest
27
- - windows-latest
28
- - macos-latest
29
- node-version:
30
- - 14.x
31
- - 16.x
32
- - 18.x
33
-
34
- steps:
35
- - uses: actions/checkout@v3
36
- - name: Use Node ${{ matrix.node-version }}
37
- uses: actions/setup-node@v3
38
- with:
39
- node-version: ${{ matrix.node-version }}
40
- - run: npm install
41
- - run: npm run test:pretty
42
-
43
- build:
44
- needs: test-typescript
45
- runs-on: ubuntu-latest
46
- steps:
47
- - uses: actions/checkout@v3
48
- - uses: actions/setup-node@v3
49
- with:
50
- node-version: 16
51
- - run: npm install
52
- - run: npm run build
53
- - uses: actions/upload-artifact@v3
54
- with:
55
- name: bundle
56
- path: dist/
package/CHANGELOG.md DELETED
@@ -1,21 +0,0 @@
1
- # Changelog
2
- All notable changes to this project will be documented in this file.
3
-
4
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
-
7
- ## [Unreleased] -
8
-
9
- ### Added
10
- ### Changed
11
- ### Deprecated
12
- ### Removed
13
- ### Fixed
14
- ### Security
15
-
16
- ## [1.0.0] - 2023-02-05
17
-
18
- _Initial release_
19
-
20
- [unreleased]: https://github.com/konfirm/geojson/compare/v1.0.0...HEAD
21
- [1.0.0]: https://github.com/konfirm/geojson/releases/tag/v1.0.0
@@ -1,5 +0,0 @@
1
- export declare const EARTH_RADIUS = 6371008.7714;
2
- export declare const EARTH_RADIUS_MAJOR = 6378137;
3
- export declare const EARTH_RADIUS_MINOR = 6356752.314245;
4
- export declare const EARTH_FLATTENING = 298.257223563;
5
- export declare const GPS_SATELLITE_ORBIT = 20180000;
@@ -1,3 +0,0 @@
1
- export type Altitude = number;
2
- export declare function isAltitude(value: any): value is Altitude;
3
- export declare const isStrictAltitude: import("../../Guards/Utility").Guard<number>;
@@ -1,6 +0,0 @@
1
- import { Longitude } from "./Longitude";
2
- import { Latitude } from "./Latitude";
3
- import { Altitude } from "./Altitude";
4
- export type BoundingBox = [Longitude, Latitude, Altitude, Longitude, Latitude, Altitude] | [Longitude, Latitude, Longitude, Latitude];
5
- export declare const isBoundingBox: import("@konfirm/guard").Guard<BoundingBox>;
6
- export declare const isStrictBoundingBox: import("@konfirm/guard").Guard<BoundingBox>;
@@ -1,4 +0,0 @@
1
- import { LinearRing } from "./LinearRing";
2
- export type ExteriorRing = LinearRing;
3
- export declare const isExteriorRing: import("@konfirm/guard").Guard<LinearRing>;
4
- export declare const isStrictExteriorRing: import("@konfirm/guard").Guard<LinearRing>;
@@ -1,11 +0,0 @@
1
- import { Guard } from "@konfirm/guard";
2
- import { BoundingBox } from "./BoundingBox";
3
- type GeoJSONBase = {
4
- type: string;
5
- bbox?: BoundingBox;
6
- [key: string]: unknown;
7
- };
8
- export type GeoJSONObject<T extends GeoJSONBase = GeoJSONBase> = GeoJSONBase & T;
9
- export declare function isGeoJSONObject<T extends GeoJSONBase>(type: string): Guard<T>;
10
- export declare function isStrictGeoJSONObject<T extends GeoJSONBase>(type: string): Guard<T>;
11
- export {};
@@ -1,4 +0,0 @@
1
- import { LinearRing } from "./LinearRing";
2
- export type InteriorRing = LinearRing;
3
- export declare const isInteriorRing: import("@konfirm/guard").Guard<LinearRing>;
4
- export declare const isStrictInteriorRing: import("@konfirm/guard").Guard<LinearRing>;
@@ -1,3 +0,0 @@
1
- export type Latitude = number;
2
- export declare function isLatitude(value: any): value is Latitude;
3
- export declare const isStrictLatitude: import("../../Guards/Utility").Guard<number>;
@@ -1,4 +0,0 @@
1
- import { Position } from "./Position";
2
- export type LinearRing = Array<Position>;
3
- export declare const isLinearRing: import("@konfirm/guard").Guard<LinearRing>;
4
- export declare const isStrictLinearRing: import("@konfirm/guard").Guard<LinearRing>;
@@ -1,3 +0,0 @@
1
- export type Longitude = number;
2
- export declare function isLongitude(value: any): value is Longitude;
3
- export declare const isStrictLongitude: import("../../Guards/Utility").Guard<number>;
@@ -1,7 +0,0 @@
1
- import { Altitude } from "./Altitude";
2
- import { Latitude } from "./Latitude";
3
- import { Longitude } from "./Longitude";
4
- export type Position = [Longitude, Latitude, Altitude?];
5
- export declare const isPosition: import("@konfirm/guard").Guard<Position>;
6
- export declare const isStrictPosition: import("@konfirm/guard").Guard<Position>;
7
- export declare function isEquivalentPosition(one: any, two: any): boolean;
@@ -1,12 +0,0 @@
1
- import { GeoJSONObject } from "./Concept/GeoJSONObject";
2
- import { Geometry } from "./Geometry";
3
- import { GeometryCollection } from "./GeometryCollection";
4
- export type Feature = GeoJSONObject<{
5
- type: 'Feature';
6
- geometry: Geometry | GeometryCollection;
7
- properties: {
8
- [key: string]: unknown;
9
- } | null;
10
- }>;
11
- export declare const isFeature: import("@konfirm/guard").Guard<Feature>;
12
- export declare const isStrictFeature: import("@konfirm/guard").Guard<Feature>;
@@ -1,8 +0,0 @@
1
- import { Feature } from "./Feature";
2
- import { GeoJSONObject } from "./Concept/GeoJSONObject";
3
- export type FeatureCollection = GeoJSONObject<{
4
- type: 'FeatureCollection';
5
- features: Array<Feature>;
6
- }>;
7
- export declare const isFeatureCollection: import("@konfirm/guard").Guard<FeatureCollection>;
8
- export declare const isStrictFeatureCollection: import("@konfirm/guard").Guard<FeatureCollection>;
@@ -1,7 +0,0 @@
1
- import { Feature } from "./Feature";
2
- import { FeatureCollection } from "./FeatureCollection";
3
- import { GeometryCollection } from "./GeometryCollection";
4
- import { Geometry } from "./Geometry";
5
- export type GeoJSON = Geometry | GeometryCollection | Feature | FeatureCollection;
6
- export declare const isGeoJSON: import("@konfirm/guard").Guard<GeoJSON>;
7
- export declare const isStrictGeoJSON: import("@konfirm/guard").Guard<GeoJSON>;
@@ -1,11 +0,0 @@
1
- import { Guard } from "../../Guards/Utility";
2
- import { GeometryObject } from "../GeometryObject";
3
- import { MultiPoint } from "./MultiPoint";
4
- export type LineString = GeometryObject<{
5
- type: 'LineString';
6
- coordinates: MultiPoint['coordinates'];
7
- }>;
8
- export declare const isLineStringCoordinates: Guard<import("../Concept/Position").Position[]>;
9
- export declare const isLineString: Guard<LineString>;
10
- export declare const isStrictLineStringCoordinates: Guard<import("../Concept/Position").Position[]>;
11
- export declare const isStrictLineString: Guard<LineString>;
@@ -1,7 +0,0 @@
1
- import { MultiGeometryObject } from "../GeometryObject";
2
- import { LineString } from "./LineString";
3
- export type MultiLineString = MultiGeometryObject<LineString>;
4
- export declare const isMultiLineStringCoordinates: import("@konfirm/guard").Guard<unknown>;
5
- export declare const isMultiLineString: import("@konfirm/guard").Guard<MultiLineString>;
6
- export declare const isStrictMultiLineStringCoordinates: import("@konfirm/guard").Guard<unknown>;
7
- export declare const isStrictMultiLineString: import("@konfirm/guard").Guard<MultiLineString>;
@@ -1,8 +0,0 @@
1
- import { Guard } from "../../Guards/Utility";
2
- import { MultiGeometryObject } from "../GeometryObject";
3
- import { Point } from "./Point";
4
- export type MultiPoint = MultiGeometryObject<Point>;
5
- export declare const isMultiPointCoordinates: Guard<MultiPoint['coordinates']>;
6
- export declare const isMultiPoint: import("@konfirm/guard").Guard<MultiPoint>;
7
- export declare const isStrictMultiPointCoordinates: Guard<MultiPoint['coordinates']>;
8
- export declare const isStrictMultiPoint: import("@konfirm/guard").Guard<MultiPoint>;
@@ -1,7 +0,0 @@
1
- import { MultiGeometryObject } from "../GeometryObject";
2
- import { Polygon } from "./Polygon";
3
- export type MultiPolygon = MultiGeometryObject<Polygon>;
4
- export declare const isMultiPolygonCoordinates: import("@konfirm/guard").Guard<unknown>;
5
- export declare const isMultiPolygon: import("@konfirm/guard").Guard<MultiPolygon>;
6
- export declare const isStrictMultiPolygonCoordinates: import("@konfirm/guard").Guard<unknown>;
7
- export declare const isStrictMultiPolygon: import("@konfirm/guard").Guard<MultiPolygon>;
@@ -1,11 +0,0 @@
1
- import { GeometryObject } from "../GeometryObject";
2
- import { Position } from "../Concept/Position";
3
- import { Guard } from "../../Guards/Utility";
4
- export type Point = GeometryObject<{
5
- type: 'Point';
6
- coordinates: Position;
7
- }>;
8
- export declare const isPointCoordinates: Guard<Point['coordinates']>;
9
- export declare const isPoint: Guard<Point>;
10
- export declare const isStrictPointCoordinates: Guard<Point['coordinates']>;
11
- export declare const isStrictPoint: Guard<Point>;
@@ -1,11 +0,0 @@
1
- import { GeometryObject } from "../GeometryObject";
2
- import { ExteriorRing } from "../Concept/ExteriorRing";
3
- import { InteriorRing } from "../Concept/InteriorRing";
4
- export type Polygon = GeometryObject<{
5
- type: 'Polygon';
6
- coordinates: [ExteriorRing, ...Array<InteriorRing>];
7
- }>;
8
- export declare const isPolygonCoordinates: import("@konfirm/guard").Guard<unknown>;
9
- export declare const isPolygon: import("@konfirm/guard").Guard<Polygon>;
10
- export declare const isStrictPolygonCoordinates: import("@konfirm/guard").Guard<unknown>;
11
- export declare const isStrictPolygon: import("@konfirm/guard").Guard<Polygon>;
@@ -1,9 +0,0 @@
1
- import { LineString } from "./Geometry/LineString";
2
- import { MultiLineString } from "./Geometry/MultiLineString";
3
- import { MultiPoint } from "./Geometry/MultiPoint";
4
- import { MultiPolygon } from "./Geometry/MultiPolygon";
5
- import { Point } from "./Geometry/Point";
6
- import { Polygon } from "./Geometry/Polygon";
7
- export type Geometry = Point | MultiPoint | LineString | MultiLineString | Polygon | MultiPolygon;
8
- export declare const isGeometry: import("@konfirm/guard").Guard<Geometry>;
9
- export declare const isStrictGeometry: import("@konfirm/guard").Guard<Geometry>;
@@ -1,8 +0,0 @@
1
- import { GeoJSONObject } from "./Concept/GeoJSONObject";
2
- import { Geometry } from "./Geometry";
3
- export type GeometryCollection = GeoJSONObject<{
4
- type: 'GeometryCollection';
5
- geometries: Array<Geometry | GeometryCollection>;
6
- }>;
7
- export declare function isGeometryCollection(value: any): value is GeometryCollection;
8
- export declare function isStrictGeometryCollection(value: any): value is GeometryCollection;