@loaders.gl/shapefile 3.1.0-alpha.4 → 3.1.0-beta.3

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 (110) hide show
  1. package/dist/bundle.d.ts +2 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +7554 -0
  4. package/dist/dbf-loader.d.ts +8 -0
  5. package/dist/dbf-loader.d.ts.map +1 -0
  6. package/dist/dbf-loader.js +32 -0
  7. package/dist/dbf-worker.js +912 -2
  8. package/dist/es5/bundle.js +1 -1
  9. package/dist/es5/bundle.js.map +1 -1
  10. package/dist/es5/dbf-loader.js +5 -40
  11. package/dist/es5/dbf-loader.js.map +1 -1
  12. package/dist/es5/index.js +5 -5
  13. package/dist/es5/lib/parsers/parse-dbf.js +86 -232
  14. package/dist/es5/lib/parsers/parse-dbf.js.map +1 -1
  15. package/dist/es5/lib/parsers/parse-shapefile.js +151 -404
  16. package/dist/es5/lib/parsers/parse-shapefile.js.map +1 -1
  17. package/dist/es5/lib/parsers/parse-shp-geometry.js +49 -96
  18. package/dist/es5/lib/parsers/parse-shp-geometry.js.map +1 -1
  19. package/dist/es5/lib/parsers/parse-shp-header.js +4 -4
  20. package/dist/es5/lib/parsers/parse-shp-header.js.map +1 -1
  21. package/dist/es5/lib/parsers/parse-shp.js +47 -165
  22. package/dist/es5/lib/parsers/parse-shp.js.map +1 -1
  23. package/dist/es5/lib/parsers/parse-shx.js +11 -11
  24. package/dist/es5/lib/parsers/parse-shx.js.map +1 -1
  25. package/dist/es5/lib/streaming/binary-chunk-reader.js +99 -172
  26. package/dist/es5/lib/streaming/binary-chunk-reader.js.map +1 -1
  27. package/dist/es5/lib/streaming/binary-reader.js +24 -35
  28. package/dist/es5/lib/streaming/binary-reader.js.map +1 -1
  29. package/dist/es5/lib/streaming/zip-batch-iterators.js +37 -96
  30. package/dist/es5/lib/streaming/zip-batch-iterators.js.map +1 -1
  31. package/dist/es5/shapefile-loader.js +3 -3
  32. package/dist/es5/shapefile-loader.js.map +1 -1
  33. package/dist/es5/shp-loader.js +6 -41
  34. package/dist/es5/shp-loader.js.map +1 -1
  35. package/dist/es5/workers/dbf-worker.js +7 -3
  36. package/dist/es5/workers/dbf-worker.js.map +1 -0
  37. package/dist/es5/workers/shp-worker.js +7 -3
  38. package/dist/es5/workers/shp-worker.js.map +1 -0
  39. package/dist/esm/dbf-loader.js +1 -1
  40. package/dist/esm/dbf-loader.js.map +1 -1
  41. package/dist/esm/lib/parsers/parse-dbf.js +4 -6
  42. package/dist/esm/lib/parsers/parse-dbf.js.map +1 -1
  43. package/dist/esm/lib/parsers/parse-shapefile.js +1 -1
  44. package/dist/esm/lib/parsers/parse-shapefile.js.map +1 -1
  45. package/dist/esm/lib/parsers/parse-shp-geometry.js +1 -1
  46. package/dist/esm/lib/parsers/parse-shp-geometry.js.map +1 -1
  47. package/dist/esm/lib/parsers/parse-shp-header.js +2 -2
  48. package/dist/esm/lib/parsers/parse-shp-header.js.map +1 -1
  49. package/dist/esm/lib/parsers/parse-shp.js +2 -2
  50. package/dist/esm/lib/parsers/parse-shp.js.map +1 -1
  51. package/dist/esm/shapefile-loader.js +1 -1
  52. package/dist/esm/shapefile-loader.js.map +1 -1
  53. package/dist/esm/shp-loader.js +1 -1
  54. package/dist/esm/shp-loader.js.map +1 -1
  55. package/dist/esm/workers/dbf-worker.js +3 -3
  56. package/dist/esm/workers/dbf-worker.js.map +1 -0
  57. package/dist/esm/workers/shp-worker.js +3 -3
  58. package/dist/esm/workers/shp-worker.js.map +1 -0
  59. package/dist/index.d.ts +4 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +11 -0
  62. package/dist/lib/parsers/parse-dbf.d.ts +28 -0
  63. package/dist/lib/parsers/parse-dbf.d.ts.map +1 -0
  64. package/dist/lib/parsers/parse-dbf.js +335 -0
  65. package/dist/lib/parsers/parse-shapefile.d.ts +54 -0
  66. package/dist/lib/parsers/parse-shapefile.d.ts.map +1 -0
  67. package/dist/lib/parsers/parse-shapefile.js +245 -0
  68. package/dist/lib/parsers/parse-shp-geometry.d.ts +11 -0
  69. package/dist/lib/parsers/parse-shp-geometry.d.ts.map +1 -0
  70. package/dist/lib/parsers/parse-shp-geometry.js +287 -0
  71. package/dist/lib/parsers/parse-shp-header.d.ts +26 -0
  72. package/dist/lib/parsers/parse-shp-header.d.ts.map +1 -0
  73. package/dist/lib/parsers/parse-shp-header.js +43 -0
  74. package/dist/lib/parsers/parse-shp.d.ts +9 -0
  75. package/dist/lib/parsers/parse-shp.d.ts.map +1 -0
  76. package/dist/lib/parsers/parse-shp.js +170 -0
  77. package/dist/lib/parsers/parse-shx.d.ts +10 -0
  78. package/dist/lib/parsers/parse-shx.d.ts.map +1 -0
  79. package/dist/lib/parsers/parse-shx.js +28 -0
  80. package/dist/lib/streaming/binary-chunk-reader.d.ts +59 -0
  81. package/dist/lib/streaming/binary-chunk-reader.d.ts.map +1 -0
  82. package/dist/lib/streaming/binary-chunk-reader.js +161 -0
  83. package/dist/lib/streaming/binary-reader.d.ts +32 -0
  84. package/dist/lib/streaming/binary-reader.d.ts.map +1 -0
  85. package/dist/lib/streaming/binary-reader.js +52 -0
  86. package/dist/lib/streaming/zip-batch-iterators.d.ts +8 -0
  87. package/dist/lib/streaming/zip-batch-iterators.d.ts.map +1 -0
  88. package/dist/lib/streaming/zip-batch-iterators.js +61 -0
  89. package/dist/shapefile-loader.d.ts +26 -0
  90. package/dist/shapefile-loader.d.ts.map +1 -0
  91. package/dist/shapefile-loader.js +31 -0
  92. package/dist/shp-loader.d.ts +9 -0
  93. package/dist/shp-loader.d.ts.map +1 -0
  94. package/dist/shp-loader.js +35 -0
  95. package/dist/shp-worker.js +606 -2
  96. package/dist/workers/dbf-worker.d.ts +2 -0
  97. package/dist/workers/dbf-worker.d.ts.map +1 -0
  98. package/dist/workers/dbf-worker.js +5 -0
  99. package/dist/workers/shp-worker.d.ts +2 -0
  100. package/dist/workers/shp-worker.d.ts.map +1 -0
  101. package/dist/workers/shp-worker.js +5 -0
  102. package/package.json +10 -10
  103. package/src/lib/parsers/parse-dbf.ts +5 -3
  104. package/src/lib/parsers/parse-shp-geometry.ts +1 -1
  105. package/src/workers/{dbf-worker.js → dbf-worker.ts} +0 -0
  106. package/src/workers/{shp-worker.js → shp-worker.ts} +0 -0
  107. package/dist/dbf-worker.js.map +0 -1
  108. package/dist/dist.min.js +0 -2
  109. package/dist/dist.min.js.map +0 -1
  110. package/dist/shp-worker.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:///./src/bundle.ts","webpack:///./src/lib/streaming/binary-chunk-reader.ts","webpack:///./src/lib/parsers/parse-shp-header.ts","webpack:///./src/lib/parsers/parse-shp-geometry.ts","webpack:///./src/lib/parsers/parse-shp.ts","webpack:///./src/shp-loader.ts","webpack:///../gis/src/lib/binary-to-geojson.ts","webpack:///../gis/src/lib/transform.ts","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/global.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/constants/values.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/constants/PrimeMeridian.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/constants/units.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/match.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projString.js","webpack:////home/user/apps/loaders.gl/node_modules/wkt-parser/parser.js","webpack:////home/user/apps/loaders.gl/node_modules/wkt-parser/process.js","webpack:////home/user/apps/loaders.gl/node_modules/wkt-parser/index.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/defs.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/parseCode.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/extend.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/msfnz.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/sign.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/adjust_lon.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/tsfnz.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/phi2z.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/longlat.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/merc.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/constants/Ellipsoid.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/constants/Datum.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/datum.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/Proj.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/deriveConstants.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/datumUtils.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/datum_transform.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/adjust_axis.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/toPoint.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/checkSanity.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/transform.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/core.js","webpack:////home/user/apps/loaders.gl/node_modules/mgrs/mgrs.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/Point.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/pj_enfn.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/pj_mlfn.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/pj_inv_mlfn.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/tmerc.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/sinh.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/hypot.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/asinhy.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/log1py.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/gatg.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/clens_cmplx.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/cosh.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/etmerc.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/clens.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/utm.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/adjust_zone.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/srat.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/gauss.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/sterea.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/stere.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/somerc.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/omerc.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/lcc.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/krovak.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/mlfn.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/e0fn.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/e1fn.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/e2fn.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/e3fn.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/gN.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/adjust_lat.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/imlfn.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/cass.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/qsfnz.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/laea.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/asinz.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/aea.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/gnom.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/cea.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/common/iqsfnz.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/eqc.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/poly.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/nzmg.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/mill.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/sinu.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/moll.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/eqdc.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/vandg.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/aeqd.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/ortho.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/qsc.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/robin.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/projections/geocent.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/projs.js","webpack:////home/user/apps/loaders.gl/node_modules/proj4/lib/index.js","webpack:////home/user/apps/loaders.gl/node_modules/@math.gl/proj4/dist/esm/lib/proj4-projection.js","webpack:///./src/lib/streaming/zip-batch-iterators.ts","webpack:///../schema/src/lib/schema/impl/schema.ts","webpack:///../schema/src/lib/utils/assert.ts","webpack:///../schema/src/lib/schema/impl/field.ts","webpack:///../schema/src/lib/schema/impl/enum.ts","webpack:///../schema/src/lib/schema/impl/type.ts","webpack:///./src/lib/parsers/parse-dbf.ts","webpack:///./src/dbf-loader.ts","webpack:///./src/lib/parsers/parse-shapefile.ts","webpack:///./src/lib/parsers/parse-shx.ts","webpack:///./src/shapefile-loader.ts"],"names":["root","factory","exports","module","define","amd","a","i","window","installedModules","__webpack_require__","moduleId","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","moduleExports","require","globalThis","loaders","assign","BinaryChunkReader","constructor","options","maxRewindBytes","this","offset","arrayBuffers","ended","write","arrayBuffer","push","end","hasAvailableBytes","bytes","bytesAvailable","byteLength","findBufferOffsets","selectedBuffers","length","buf","start","Math","abs","getDataView","bufferOffsets","Error","bufferIndex","view","DataView","disposeBuffers","_combineArrayBuffers","shift","bufferOffset","result","Uint8Array","resultOffset","sourceArray","set","subarray","buffer","skip","rewind","parseSHPHeader","headerView","header","magic","getInt32","version","type","bbox","minX","getFloat64","minY","minZ","minM","maxX","maxY","maxZ","maxM","console","error","parseRecord","_maxDimensions","shp","Int32Array","BYTES_PER_ELEMENT","parsePoint","min","parsePoly","parseMultiPoint","dim","positions","parsePositions","size","Float64Array","nPoints","xyPositions","mPositions","zPositions","concatPositions","nParts","byteOffset","bufferLength","ringIndices","slice","pathIndices","polygonIndices","startRingIndex","endRingIndex","getWindingDirection","primitivePolygonIndices","Uint32Array","arrayLength","nDim","sign","area","nCoords","getSignedArea","STATE","SHPParser","geometries","binaryReader","state","parseState","parseSHP","shpParser","dataView","progress","bytesUsed","bytesTotal","rows","currentIndex","recordHeaderView","recordHeader","recordNumber","SHP_RECORD_HEADER_SIZE","geometry","message","SHP_MAGIC_NUMBER","SHPWorkerLoader","id","worker","category","extensions","mimeTypes","tests","SHPLoader","parse","async","parseSync","parseInBatches","asyncIterator","parser","headerReturned","binaryToGeometry","data","startIndex","endIndex","coordinates","ringToGeoJson","pointToGeoJson","Infinity","filter","x","ringCoordinates","lineStringToGeoJson","polygonToGeoJson","startPolygonIndex","endPolygonIndex","polygonCoordinates","unexpectedInput","j","coord","Array","k","Number","coordMap","array","fn","isFinite","isCoord","map","item","SEC_TO_RAD","HALF_PI","PI","D2R","R2D","FORTPI","TWO_PI","SPI","ft","to_meter","ignoredChar","match","obj","testkey","keys","lkey","toLowerCase","replace","paramName","paramVal","paramOutname","self","paramObj","defData","split","v","trim","reduce","params","proj","datum","rf","parseFloat","lat_0","lat0","lat_1","lat1","lat_2","lat2","lat_ts","lon_0","long0","lon_1","long1","lon_2","long2","alpha","lonc","longc","x_0","x0","y_0","y0","k_0","k0","b","r_a","R_A","zone","parseInt","south","utmSouth","towgs84","datum_params","units","unit","from_greenwich","pm","nadgrids","datumCode","axis","indexOf","substr","txt","Parser","output","whitespace","latin","keyword","endThings","digets","text","level","place","stack","currentObject","mapit","isArray","unshift","thing","out","newObj","sExpr","convert","readCharicter","char","test","neutral","quoted","afterquote","number","word","afterItem","pop","newObjects","d2r","input","lisp","wkt","projName","local","PROJECTION","AXIS","axisOrder","ii","descriptor","UNIT","DATUM","SPHEROID","geogcs","GEOGCS","toMeter","sphere","ellps","TOWGS84","forEach","outName","inName","cleanWKT","defs","that","arguments","def","charAt","apply","EPSG","ESRI","IAU2000","log","WGS84","GOOGLE","global","codeWords","codes","code","testObj","testDef","some","testWKT","auth","checkMercator","maybeProjStr","ext","checkProjStr","testProj","destination","source","undefined","con","eccent","sinphi","cosphi","sqrt","com","pow","tan","phi","dphi","eccnth","atan","ts","sin","identity","pt","projs","init","es","e","cos","msfnz","forward","y","lon","lat","adjust_lon","tsfnz","inverse","exp","phi2z","names","projStore","add","len","ellipseName","wgs84","ellipse","datumName","ch1903","ggrs87","nad83","nad27","potsdam","carthage","hermannskogel","osni52","ire65","rassadiran","nzgd49","osgb36","s_jtsk","beduaram","gunung_segara","rnb72","ep2","datum_type","Projection","srsCode","callback","json","parseCode","ourProj","projections","datumDef","a2","b2","sphere_","ecc","datumObj","extend","Proj","geodeticToGeocentric","Rn","Sin_Lat","Sin2_Lat","Cos_Lat","Longitude","Latitude","Height","z","geocentricToGeodetic","P","RR","CT","ST","RX","RK","RN","CPHI0","SPHI0","CPHI","SPHI","SDPHI","iter","X","Y","Z","atan2","checkParams","dest","compareDatums","point","Dx_BF","Dy_BF","Dz_BF","Rx_BF","Ry_BF","Rz_BF","M_BF","geocentricToWgs84","x_tmp","y_tmp","z_tmp","geocentricFromWgs84","xin","yin","zin","denorm","crs","checkCoord","num","TypeError","transform","toPoint","checkSanity","checkNotWGS","adjust_axis","datum_transform","transformer","from","to","coords","transformedArray","NaN","concat","splice","checkProj","oProj","fromProj","toProj","single","I","O","mgrs","UTMtoLL","decode","toUpperCase","left","bottom","right","top","ll","accuracy","utm","seasting","easting","snorthing","northing","zoneNumber","zoneLetter","setParm","get100kSetForZone","setColumn","floor","setRow","column","row","parm","index","colOrigin","charCodeAt","rowOrigin","colInt","rowInt","rollover","String","fromCharCode","encode","N","T","C","A","M","LongOriginRad","ZoneNumber","Lat","Long","LatRad","degToRad","LongRad","UTMEasting","UTMNorthing","round","getLetterDesignator","LLtoUTM","deg","radToDeg","rad","N1","T1","C1","R1","D","LongOrigin","mu","phi1Rad","e1","topRight","LetterDesignator","mgrsString","testChar","hunK","sb","substring","east100k","curCol","eastingValue","rewindMarker","getEastingFromChar","north100k","curRow","northingValue","getNorthingFromChar","getMinNorthing","remainder","accuracyBonus","sepEastingString","sepNorthingString","sep","sepEasting","sepNorthing","Point","warn","fromMGRS","mgrsStr","toMGRS","C08","en","cphi","sphi","arg","pj_mlfn","pj_enfn","ml0","delta_lon","sin_phi","cos_phi","al","als","cs","tq","ml","acos","pj_inv_mlfn","tan_phi","ds","f","g","temp","h","asin","max","log1py","hypot","cos_2B","B","pp","h1","h2","hr2","hi2","sin_arg_r","arg_r","cos_arg_r","sinh_arg_i","sinh","arg_i","cosh_arg_i","cosh","hr","hi1","hr1","hi","cgb","cbg","utg","gtu","np","Qn","gatg","Zb","clens","Ce","Cn","sin_Cn","cos_Cn","sin_Ce","cos_Ce","asinhy","tmp","clens_cmplx","adjust_zone","etmerc","dependsOn","esinp","rc","phic0","ratexp","K","srat","gauss","sinc0","cosc0","R2","title","sinc","cosc","cosl","rho","coslat0","sinlat0","isNaN","cons","ms1","X0","ssfn_","cosX0","sinX0","sinX","cosX","rh","sinlat","coslat","dlon","ce","Chi","phit","eccen","phy0","lambda0","sinPhy0","semiMajorAxis","flattening","e2","R","b0","k1","k2","k3","Sa1","Sa2","S","rotI","rotB","lambda","phy","prevPhy","iteration","no_off","no_rot","bl","fl","gl","t0","dl","t1","t2","el","hl","jl","pl","dlon12","dlon10","gamma0","uc","us","vs","ql","sl","tl","vl","ul","POSITIVE_INFINITY","qp","sp","tp","vp","up","sin1","cos1","ts1","sin2","cos2","ms2","ts2","ts0","f0","rh1","theta","s45","s90","fi0","alfa","uq","u0","n0","s0","ro0","ad","gfi","u","deltav","eps","ro","czech","fi1","ok","e0","e3","e0fn","e1fn","e2fn","e3fn","mlfn","lam","nl","gN","asq","cl","dd","ml1","phi1","imlfn","nl1","rl1","tl1","dsq","adjust_lat","S_POLE","N_POLE","EQUIT","OBLIQ","qsfnz","mmf","apa","APA","authset","rq","xmf","ymf","sinb1","cosb1","sinph0","cosph0","coslam","sinlam","q","sinb","cosb","cCe","sCe","ab","beta","cosz","sinz","sin_po","cos_po","qs1","qs2","t3","qs0","ns0","qs","phi1z","asinz","eccnts","sin_p14","cos_p14","infinity_dist","coslon","iqsfnz","dlat","tanphi","mln","mlnp","ma","B_re","B_im","C_re","C_im","delta_lat","d_phi","d_lambda","d_phi_n","d_psi","th_n_im1","th_re","th_im","th_n_re","th_n_im","z_re","z_im","z_n_im1","delta_x","z_n_re","z_n_im","iterations","num_re","num_im","den_re","den_im","den2","d_psi_n","C_y","C_x","V","delta_theta","ml2","sinth","costh","gsq","msq","xx","yy","xys","c1","c2","c3","a1","m1","th1","sin_p12","cos_p12","Mlp","Ml","Nl1","Nl","psi","Az","G","H","GH","Hs","kp","cos_c","s2","s3","s4","cosAz","Ee","F","sinpsi","FACE_ENUM","AREA_ENUM","qsc_fwd_equat_face_theta","qsc_shift_lon_origin","slon","face","one_minus_f","one_minus_f_squared","xy","sinlon","nu","cosmu","tannu","tantheta","invert_sign","xa","lp","COEFS_X","COEFS_Y","poly3_val","coefs","NODES","f_df","max_err","iters","upd","newton_rapshon","poly3_der","defaultDatum","tmerc","proj4","sterea","stere","somerc","omerc","lcc","krovak","cass","laea","aea","gnom","cea","eqc","poly","nzmg","mill","sinu","moll","eqdc","vandg","aeqd","ortho","qsc","robin","geocent","aliases","aliasArray","alias","projection","project","unproject","extractBatch","batch1","batch2","batchLength","batch","Schema","fields","metadata","condition","assert","usedNames","field","checkNames","Map","compareTo","other","select","columnNames","nameMap","selectedFields","selectAt","columnIndices","Boolean","schemaOrFields","otherSchema","mergeMaps","fieldMap","mergedFields","values","m2","Field","nullable","typeId","clone","toString","Type","DataType","Null","Int","Float","Binary","Utf8","Bool","Decimal","Date","Time","Timestamp","Interval","List","Struct","Union","FixedSizeBinary","FixedSizeList","Dictionary","NONE","Precision","precision","super","Float64","TimeUnit","SECOND","MILLISECOND","MICROSECOND","NANOSECOND","timezone","TimestampMillisecond","DBFParser","encoding","START","textDecoder","TextDecoder","END","ERROR","parseDBF","loaderOptions","dbf","dbfParser","schema","tables","format","dbfHeader","year","getUint8","month","day","nRecords","getUint32","headerLength","getUint16","recordLength","languageDriver","rowsTotal","FIELD_DESCRIPTORS","fieldDescriptorView","dbfFields","parseFieldDescriptors","dbfField","makeField","FIELD_PROPERTIES","recordView","parseRow","nFields","dataType","fieldLength","decimal","parseField","parseNumber","parseCharacter","str","UTC","DBFWorkerLoader","DBFLoader","parseGeometries","geojsonGeometries","geom","joinProperties","properties","features","feature","reprojectFeatures","sourceCrs","targetCrs","Proj4Projection","transformGeoJsonCoords","loadShapefileSidecarFiles","context","url","fetch","shxPromise","replaceExtension","cpgPromise","prjPromise","shx","cpg","prj","Promise","all","shxResponse","contentLength","contentView","offsets","lengths","parseShx","cpgResponse","prjResponse","newExtension","baseName","extIndex","lastIndexOf","basename","extension","extname","ShapefileLoader","shapefile","reproject","_targetCrs","gis","dbfResponse","shapeIterable","propertyIterable","shapeHeader","next","batchType","iterator","iterator1","iterator2","iterator1Done","iterator2Done","done","zipBatchIterators"],"mappings":"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","file":"dist.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\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\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n","export default class BinaryChunkReader {\n offset: number;\n arrayBuffers: ArrayBuffer[];\n ended: boolean;\n maxRewindBytes: number;\n\n constructor(options?: {[key: string]: any}) {\n const {maxRewindBytes = 0} = options || {};\n\n /** current global offset into current array buffer*/\n this.offset = 0;\n /** current buffer from iterator */\n this.arrayBuffers = [];\n this.ended = false;\n\n /** bytes behind offset to hold on to */\n this.maxRewindBytes = maxRewindBytes;\n }\n /**\n * @param arrayBuffer\n */\n write(arrayBuffer: ArrayBuffer): void {\n this.arrayBuffers.push(arrayBuffer);\n }\n\n end(): void {\n this.arrayBuffers = [];\n this.ended = true;\n }\n\n /**\n * Has enough bytes available in array buffers\n *\n * @param bytes Number of bytes\n * @return boolean\n */\n hasAvailableBytes(bytes: number): boolean {\n let bytesAvailable = -this.offset;\n for (const arrayBuffer of this.arrayBuffers) {\n bytesAvailable += arrayBuffer.byteLength;\n if (bytesAvailable >= bytes) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Find offsets of byte ranges within this.arrayBuffers\n *\n * @param bytes Byte length to read\n * @return Arrays with byte ranges pointing to this.arrayBuffers, Output type is nested array, e.g. [ [0, [1, 2]], ...]\n */\n findBufferOffsets(bytes: number): any[] | null {\n let offset = -this.offset;\n const selectedBuffers: any = [];\n\n for (let i = 0; i < this.arrayBuffers.length; i++) {\n const buf = this.arrayBuffers[i];\n\n // Current buffer isn't long enough to reach global offset\n if (offset + buf.byteLength <= 0) {\n offset += buf.byteLength;\n // eslint-disable-next-line no-continue\n continue;\n }\n\n // Find start/end offsets for this buffer\n // When offset < 0, need to skip over Math.abs(offset) bytes\n // When offset > 0, implies bytes in previous buffer, start at 0\n const start = offset <= 0 ? Math.abs(offset) : 0;\n let end: number;\n\n // Length of requested bytes is contained in current buffer\n if (start + bytes <= buf.byteLength) {\n end = start + bytes;\n selectedBuffers.push([i, [start, end]]);\n return selectedBuffers;\n }\n\n // Will need to look into next buffer\n end = buf.byteLength;\n selectedBuffers.push([i, [start, end]]);\n\n // Need to read fewer bytes in next iter\n bytes -= buf.byteLength - start;\n offset += buf.byteLength;\n }\n\n // Should only finish loop if exhausted all arrays\n return null;\n }\n\n /**\n * Get the required number of bytes from the iterator\n *\n * @param bytes Number of bytes\n * @return DataView with data\n */\n getDataView(bytes: number): DataView | null {\n const bufferOffsets = this.findBufferOffsets(bytes);\n // return `null` if not enough data, except if end() already called, in\n // which case throw an error.\n if (!bufferOffsets && this.ended) {\n throw new Error('binary data exhausted');\n }\n\n if (!bufferOffsets) {\n // @ts-ignore\n return null;\n }\n\n // If only one arrayBuffer needed, return DataView directly\n if (bufferOffsets.length === 1) {\n const [bufferIndex, [start, end]] = bufferOffsets[0];\n const arrayBuffer = this.arrayBuffers[bufferIndex];\n const view = new DataView(arrayBuffer, start, end - start);\n\n this.offset += bytes;\n this.disposeBuffers();\n return view;\n }\n\n // Concatenate portions of multiple ArrayBuffers\n const view = new DataView(this._combineArrayBuffers(bufferOffsets));\n this.offset += bytes;\n this.disposeBuffers();\n return view;\n }\n\n /**\n * Dispose of old array buffers\n */\n disposeBuffers(): void {\n while (\n this.arrayBuffers.length > 0 &&\n this.offset - this.maxRewindBytes >= this.arrayBuffers[0].byteLength\n ) {\n this.offset -= this.arrayBuffers[0].byteLength;\n this.arrayBuffers.shift();\n }\n }\n\n /**\n * Copy multiple ArrayBuffers into one contiguous ArrayBuffer\n *\n * In contrast to concatenateArrayBuffers, this only copies the necessary\n * portions of the source arrays, rather than first copying the entire arrays\n * then taking a part of them.\n *\n * @param bufferOffsets List of internal array offsets\n * @return New contiguous ArrayBuffer\n */\n _combineArrayBuffers(bufferOffsets: any[]): ArrayBufferLike {\n let byteLength: number = 0;\n for (const bufferOffset of bufferOffsets) {\n const [start, end] = bufferOffset[1];\n byteLength += end - start;\n }\n\n const result = new Uint8Array(byteLength);\n\n // Copy the subarrays\n let resultOffset: number = 0;\n for (const bufferOffset of bufferOffsets) {\n const [bufferIndex, [start, end]] = bufferOffset;\n const sourceArray = new Uint8Array(this.arrayBuffers[bufferIndex]);\n result.set(sourceArray.subarray(start, end), resultOffset);\n resultOffset += end - start;\n }\n\n return result.buffer;\n }\n /**\n * @param bytes\n */\n skip(bytes: number): void {\n this.offset += bytes;\n }\n /**\n * @param bytes\n */\n rewind(bytes: number): void {\n // TODO - only works if offset is already set\n this.offset -= bytes;\n }\n}\n","export interface SHPHeader {\n /** SHP Magic number */\n magic: number;\n\n /** Number of bytes in file */\n length: number;\n version: number;\n type: number;\n bbox: {\n minX: number;\n minY: number;\n minZ: number;\n minM: number;\n maxX: number;\n maxY: number;\n maxZ: number;\n maxM: number;\n };\n}\n\nconst LITTLE_ENDIAN = true;\nconst BIG_ENDIAN = false;\nconst SHP_MAGIC_NUMBER = 0x0000270a;\n\n/**\n * Extract the binary header\n * Note: Also used by SHX\n * @param headerView\n * @returns SHPHeader\n */\nexport function parseSHPHeader(headerView: DataView): SHPHeader {\n // Note: The SHP format switches endianness between fields!\n // https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf\n const header = {\n magic: headerView.getInt32(0, BIG_ENDIAN),\n // Length is stored as # of 2-byte words; multiply by 2 to get # of bytes\n length: headerView.getInt32(24, BIG_ENDIAN) * 2,\n version: headerView.getInt32(28, LITTLE_ENDIAN),\n type: headerView.getInt32(32, LITTLE_ENDIAN),\n bbox: {\n minX: headerView.getFloat64(36, LITTLE_ENDIAN),\n minY: headerView.getFloat64(44, LITTLE_ENDIAN),\n minZ: headerView.getFloat64(68, LITTLE_ENDIAN),\n minM: headerView.getFloat64(84, LITTLE_ENDIAN),\n maxX: headerView.getFloat64(52, LITTLE_ENDIAN),\n maxY: headerView.getFloat64(60, LITTLE_ENDIAN),\n maxZ: headerView.getFloat64(76, LITTLE_ENDIAN),\n maxM: headerView.getFloat64(92, LITTLE_ENDIAN)\n }\n };\n if (header.magic !== SHP_MAGIC_NUMBER) {\n // eslint-disable-next-line\n console.error(`SHP file: bad magic number ${header.magic}`);\n }\n if (header.version !== 1000) {\n // eslint-disable-next-line\n console.error(`SHP file: bad version ${header.version}`);\n }\n return header;\n}\n","import type {BinaryGeometry, BinaryGeometryType} from '@loaders.gl/schema';\n\nconst LITTLE_ENDIAN = true;\n\n/**\n * Parse individual record\n *\n * @param view Record data\n * @return Binary Geometry Object\n */\n// eslint-disable-next-line complexity\nexport function parseRecord(view: DataView, options?: {shp?: any}): BinaryGeometry | null {\n const {_maxDimensions} = options?.shp || {};\n\n let offset = 0;\n const type: number = view.getInt32(offset, LITTLE_ENDIAN);\n offset += Int32Array.BYTES_PER_ELEMENT;\n\n switch (type) {\n case 0:\n // Null Shape\n return parseNull();\n case 1:\n // Point\n return parsePoint(view, offset, Math.min(2, _maxDimensions));\n case 3:\n // PolyLine\n return parsePoly(view, offset, Math.min(2, _maxDimensions), 'LineString');\n case 5:\n // Polygon\n return parsePoly(view, offset, Math.min(2, _maxDimensions), 'Polygon');\n case 8:\n // MultiPoint\n return parseMultiPoint(view, offset, Math.min(2, _maxDimensions));\n // GeometryZ can have 3 or 4 dimensions, since the M is not required to\n // exist\n case 11:\n // PointZ\n return parsePoint(view, offset, Math.min(4, _maxDimensions));\n case 13:\n // PolyLineZ\n return parsePoly(view, offset, Math.min(4, _maxDimensions), 'LineString');\n case 15:\n // PolygonZ\n return parsePoly(view, offset, Math.min(4, _maxDimensions), 'Polygon');\n case 18:\n // MultiPointZ\n return parseMultiPoint(view, offset, Math.min(4, _maxDimensions));\n case 21:\n // PointM\n return parsePoint(view, offset, Math.min(3, _maxDimensions));\n case 23:\n // PolyLineM\n return parsePoly(view, offset, Math.min(3, _maxDimensions), 'LineString');\n case 25:\n // PolygonM\n return parsePoly(view, offset, Math.min(3, _maxDimensions), 'Polygon');\n case 28:\n // MultiPointM\n return parseMultiPoint(view, offset, Math.min(3, _maxDimensions));\n default:\n throw new Error(`unsupported shape type: ${type}`);\n }\n}\n\n// TODO handle null\n/**\n * Parse Null geometry\n *\n * @return null\n */\nfunction parseNull(): null {\n return null;\n}\n\n/**\n * Parse point geometry\n *\n * @param view Geometry data\n * @param offset Offset in view\n * @param dim Dimension size\n */\nfunction parsePoint(view: DataView, offset: number, dim: number): BinaryGeometry {\n let positions: Float64Array;\n [positions, offset] = parsePositions(view, offset, 1, dim);\n\n return {\n positions: {value: positions, size: dim},\n type: 'Point'\n };\n}\n\n/**\n * Parse MultiPoint geometry\n *\n * @param view Geometry data\n * @param offset Offset in view\n * @param dim Input dimension\n * @return Binary geometry object\n */\nfunction parseMultiPoint(view: DataView, offset: number, dim: number): BinaryGeometry {\n // skip parsing box\n offset += 4 * Float64Array.BYTES_PER_ELEMENT;\n\n const nPoints = view.getInt32(offset, LITTLE_ENDIAN);\n offset += Int32Array.BYTES_PER_ELEMENT;\n\n let xyPositions: Float64Array | null = null;\n let mPositions: Float64Array | null = null;\n let zPositions: Float64Array | null = null;\n [xyPositions, offset] = parsePositions(view, offset, nPoints, 2);\n\n // Parse Z coordinates\n if (dim === 4) {\n // skip parsing range\n offset += 2 * Float64Array.BYTES_PER_ELEMENT;\n [zPositions, offset] = parsePositions(view, offset, nPoints, 1);\n }\n\n // Parse M coordinates\n if (dim >= 3) {\n // skip parsing range\n offset += 2 * Float64Array.BYTES_PER_ELEMENT;\n [mPositions, offset] = parsePositions(view, offset, nPoints, 1);\n }\n\n const positions = concatPositions(xyPositions, mPositions, zPositions);\n\n return {\n positions: {value: positions, size: dim},\n type: 'Point'\n };\n}\n\n/**\n * Polygon and PolyLine parsing\n *\n * @param view Geometry data\n * @param offset Offset in view\n * @param dim Input dimension\n * @param type Either 'Polygon' or 'Polyline'\n * @return Binary geometry object\n */\n// eslint-disable-next-line max-statements\nfunction parsePoly(\n view: DataView,\n offset: number,\n dim: number,\n type: BinaryGeometryType\n): BinaryGeometry {\n // skip parsing bounding box\n offset += 4 * Float64Array.BYTES_PER_ELEMENT;\n\n const nParts = view.getInt32(offset, LITTLE_ENDIAN);\n offset += Int32Array.BYTES_PER_ELEMENT;\n const nPoints = view.getInt32(offset, LITTLE_ENDIAN);\n offset += Int32Array.BYTES_PER_ELEMENT;\n\n // Create longer indices array by 1 because output format is expected to\n // include the last index as the total number of positions\n const bufferOffset = view.byteOffset + offset;\n const bufferLength = nParts * Int32Array.BYTES_PER_ELEMENT;\n const ringIndices = new Int32Array(nParts + 1);\n ringIndices.set(new Int32Array(view.buffer.slice(bufferOffset, bufferOffset + bufferLength)));\n ringIndices[nParts] = nPoints;\n offset += nParts * Int32Array.BYTES_PER_ELEMENT;\n\n let xyPositions: Float64Array | null = null;\n let mPositions: Float64Array | null = null;\n let zPositions: Float64Array | null = null;\n [xyPositions, offset] = parsePositions(view, offset, nPoints, 2);\n\n // Parse Z coordinates\n if (dim === 4) {\n // skip parsing range\n offset += 2 * Float64Array.BYTES_PER_ELEMENT;\n [zPositions, offset] = parsePositions(view, offset, nPoints, 1);\n }\n\n // Parse M coordinates\n if (dim >= 3) {\n // skip parsing range\n offset += 2 * Float64Array.BYTES_PER_ELEMENT;\n [mPositions, offset] = parsePositions(view, offset, nPoints, 1);\n }\n\n const positions = concatPositions(xyPositions, mPositions, zPositions);\n\n // parsePoly only accepts type = LineString or Polygon\n if (type === 'LineString') {\n return {\n type,\n positions: {value: positions, size: dim},\n pathIndices: {value: ringIndices, size: 1}\n };\n }\n\n // for every ring, determine sign of polygon\n // Use only 2D positions for ring calc\n const polygonIndices: number[] = [];\n for (let i = 1; i < ringIndices.length; i++) {\n const startRingIndex = ringIndices[i - 1];\n const endRingIndex = ringIndices[i];\n // @ts-ignore\n const ring = xyPositions.subarray(startRingIndex * 2, endRingIndex * 2);\n const sign = getWindingDirection(ring);\n\n // A positive sign implies clockwise\n // A clockwise ring is a filled ring\n if (sign > 0) {\n polygonIndices.push(startRingIndex);\n }\n }\n\n polygonIndices.push(nPoints);\n\n return {\n type,\n positions: {value: positions, size: dim},\n primitivePolygonIndices: {value: ringIndices, size: 1},\n // TODO: Dynamically choose Uint32Array over Uint16Array only when\n // necessary. I believe the implementation requires nPoints to be the\n // largest value in the array, so you should be able to use Uint32Array only\n // when nPoints > 65535.\n polygonIndices: {value: new Uint32Array(polygonIndices), size: 1}\n };\n}\n\n/**\n * Parse a contiguous block of positions into a Float64Array\n *\n * @param view Geometry data\n * @param offset Offset in view\n * @param nPoints Number of points\n * @param dim Input dimension\n * @return Data and offset\n */\nfunction parsePositions(\n view: DataView,\n offset: number,\n nPoints: number,\n dim: number\n): [Float64Array, number] {\n const bufferOffset = view.byteOffset + offset;\n const bufferLength = nPoints * dim * Float64Array.BYTES_PER_ELEMENT;\n return [\n new Float64Array(view.buffer.slice(bufferOffset, bufferOffset + bufferLength)),\n offset + bufferLength\n ];\n}\n\n/**\n * Concatenate and interleave positions arrays\n * xy positions are interleaved; mPositions, zPositions are their own arrays\n *\n * @param xyPositions 2d positions\n * @param mPositions M positions\n * @param zPositions Z positions\n * @return Combined interleaved positions\n */\n// eslint-disable-next-line complexity\nfunction concatPositions(\n xyPositions: Float64Array,\n mPositions: Float64Array | null,\n zPositions: Float64Array | null\n): Float64Array {\n if (!(mPositions || zPositions)) {\n return xyPositions;\n }\n\n let arrayLength = xyPositions.length;\n let nDim = 2;\n\n if (zPositions && zPositions.length) {\n arrayLength += zPositions.length;\n nDim++;\n }\n\n if (mPositions && mPositions.length) {\n arrayLength += mPositions.length;\n nDim++;\n }\n\n const positions = new Float64Array(arrayLength);\n for (let i = 0; i < xyPositions.length / 2; i++) {\n positions[nDim * i] = xyPositions[i * 2];\n positions[nDim * i + 1] = xyPositions[i * 2 + 1];\n }\n\n if (zPositions && zPositions.length) {\n for (let i = 0; i < zPositions.length; i++) {\n // If Z coordinates exist; used as third coord in positions array\n positions[nDim * i + 2] = zPositions[i];\n }\n }\n\n if (mPositions && mPositions.length) {\n for (let i = 0; i < mPositions.length; i++) {\n // M is always last, either 3rd or 4th depending on if Z exists\n positions[nDim * i + (nDim - 1)] = mPositions[i];\n }\n }\n\n return positions;\n}\n\n/**\n * Returns the direction of the polygon path\n * A positive number is clockwise.\n * A negative number is counter clockwise.\n *\n * @param positions\n * @return Sign of polygon ring\n */\nfunction getWindingDirection(positions: Float64Array): number {\n return Math.sign(getSignedArea(positions));\n}\n\n/**\n * Get signed area of flat typed array of 2d positions\n *\n * @param positions\n * @return Signed area of polygon ring\n */\nfunction getSignedArea(positions: Float64Array): number {\n let area = 0;\n\n // Rings are closed according to shapefile spec\n const nCoords = positions.length / 2 - 1;\n for (let i = 0; i < nCoords; i++) {\n area +=\n (positions[i * 2] + positions[(i + 1) * 2]) *\n (positions[i * 2 + 1] - positions[(i + 1) * 2 + 1]);\n }\n\n return area / 2;\n}\n","import type {LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {BinaryGeometry} from '@loaders.gl/schema';\nimport BinaryChunkReader from '../streaming/binary-chunk-reader';\nimport {parseSHPHeader} from './parse-shp-header';\nimport {parseRecord} from './parse-shp-geometry';\n\nconst LITTLE_ENDIAN = true;\nconst BIG_ENDIAN = false;\n\nconst SHP_HEADER_SIZE = 100;\n// According to the spec, the record header is just 8 bytes, but here we set it\n// to 12 so that we can also access the record's type\nconst SHP_RECORD_HEADER_SIZE = 12;\n\nconst STATE = {\n EXPECTING_HEADER: 0,\n EXPECTING_RECORD: 1,\n END: 2,\n ERROR: 3\n};\n\ntype SHPResult = {\n geometries: [];\n header?: {};\n error?: string;\n};\n\nclass SHPParser {\n options?: any = {};\n binaryReader = new BinaryChunkReader({maxRewindBytes: SHP_RECORD_HEADER_SIZE});\n state = STATE.EXPECTING_HEADER;\n result: SHPResult = {\n geometries: []\n };\n\n constructor(options?: LoaderOptions) {\n this.options = options;\n }\n\n write(arrayBuffer: ArrayBuffer) {\n this.binaryReader.write(arrayBuffer);\n this.state = parseState(this.state, this.result, this.binaryReader, this.options);\n }\n\n end() {\n this.binaryReader.end();\n this.state = parseState(this.state, this.result, this.binaryReader, this.options);\n // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();\n if (this.state !== STATE.END) {\n this.state = STATE.ERROR;\n this.result.error = 'SHP incomplete file';\n }\n }\n}\n\nexport function parseSHP(arrayBuffer: ArrayBuffer, options?: object): BinaryGeometry[] {\n const shpParser = new SHPParser(options);\n shpParser.write(arrayBuffer);\n shpParser.end();\n\n // @ts-ignore\n return shpParser.result;\n}\n\n/**\n * @param asyncIterator\n * @param options\n * @returns\n */\nexport async function* parseSHPInBatches(\n asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options?: object\n): AsyncIterable<BinaryGeometry | object> {\n const parser = new SHPParser(options);\n let headerReturned = false;\n for await (const arrayBuffer of asyncIterator) {\n parser.write(arrayBuffer);\n if (!headerReturned && parser.result.header) {\n headerReturned = true;\n yield parser.result.header;\n }\n\n if (parser.result.geometries.length > 0) {\n yield parser.result.geometries;\n parser.result.geometries = [];\n }\n }\n parser.end();\n if (parser.result.geometries.length > 0) {\n yield parser.result.geometries;\n }\n\n return;\n}\n\n/**\n * State-machine parser for SHP data\n *\n * Note that whenever more data is needed, a `return`, not a `break`, is\n * necessary, as the `break` keeps the context within `parseState`, while\n * `return` releases context so that more data can be written into the\n * BinaryChunkReader.\n *\n * @param state Current state\n * @param result An object to hold result data\n * @param binaryReader\n * @return State at end of current parsing\n */\n/* eslint-disable complexity, max-depth */\nfunction parseState(\n state: number,\n result: {[key: string]: any},\n binaryReader: BinaryChunkReader,\n options: {shp?: any}\n): number {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n switch (state) {\n case STATE.ERROR:\n case STATE.END:\n return state;\n\n case STATE.EXPECTING_HEADER:\n // Parse initial file header\n const dataView = binaryReader.getDataView(SHP_HEADER_SIZE);\n if (!dataView) {\n return state;\n }\n\n result.header = parseSHPHeader(dataView);\n result.progress = {\n bytesUsed: 0,\n bytesTotal: result.header.length,\n rows: 0\n };\n // index numbering starts at 1\n result.currentIndex = 1;\n state = STATE.EXPECTING_RECORD;\n break;\n\n case STATE.EXPECTING_RECORD:\n while (binaryReader.hasAvailableBytes(SHP_RECORD_HEADER_SIZE)) {\n const recordHeaderView = binaryReader.getDataView(SHP_RECORD_HEADER_SIZE) as DataView;\n const recordHeader = {\n recordNumber: recordHeaderView.getInt32(0, BIG_ENDIAN),\n // 2 byte words; includes the four words of record header\n byteLength: recordHeaderView.getInt32(4, BIG_ENDIAN) * 2,\n // This is actually part of the record, not the header...\n type: recordHeaderView.getInt32(8, LITTLE_ENDIAN)\n };\n\n if (!binaryReader.hasAvailableBytes(recordHeader.byteLength - 4)) {\n binaryReader.rewind(SHP_RECORD_HEADER_SIZE);\n return state;\n }\n\n const invalidRecord =\n recordHeader.byteLength < 4 ||\n recordHeader.type !== result.header.type ||\n recordHeader.recordNumber !== result.currentIndex;\n\n // All records must have at least four bytes (for the record shape type)\n if (invalidRecord) {\n // Malformed record, try again, advancing just 4 bytes\n // Note: this is a rewind because binaryReader.getDataView above\n // moved the pointer forward 12 bytes, so rewinding 8 bytes still\n // leaves us 4 bytes ahead\n binaryReader.rewind(SHP_RECORD_HEADER_SIZE - 4);\n } else {\n // Note: type is actually part of the record, not the header, so\n // rewind 4 bytes before reading record\n binaryReader.rewind(4);\n\n const recordView = binaryReader.getDataView(recordHeader.byteLength) as DataView;\n const geometry = parseRecord(recordView, options);\n result.geometries.push(geometry);\n\n result.currentIndex++;\n result.progress.rows = result.currentIndex - 1;\n }\n }\n\n if (binaryReader.ended) {\n state = STATE.END;\n }\n\n return state;\n\n default:\n state = STATE.ERROR;\n result.error = `illegal parser state ${state}`;\n return state;\n }\n } catch (error) {\n state = STATE.ERROR;\n result.error = `SHP parsing failed: ${(error as Error)?.message}`;\n return state;\n }\n }\n}\n","import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parseSHP, parseSHPInBatches} from './lib/parsers/parse-shp';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport const SHP_MAGIC_NUMBER = [0x00, 0x00, 0x27, 0x0a];\n\n/**\n * SHP file loader\n */\nexport const SHPWorkerLoader: Loader = {\n name: 'SHP',\n id: 'shp',\n module: 'shapefile',\n version: VERSION,\n worker: true,\n category: 'geometry',\n extensions: ['shp'],\n mimeTypes: ['application/octet-stream'],\n // ISSUE: This also identifies SHX files, which are identical to SHP for the first 100 bytes...\n tests: [new Uint8Array(SHP_MAGIC_NUMBER).buffer],\n options: {\n shp: {\n _maxDimensions: 4\n }\n }\n};\n\n/** SHP file loader */\nexport const SHPLoader: LoaderWithParser = {\n ...SHPWorkerLoader,\n parse: async (arrayBuffer, options?) => parseSHP(arrayBuffer, options),\n parseSync: parseSHP,\n parseInBatches: parseSHPInBatches\n};\n","import type {\n BinaryGeometry,\n BinaryFeatures,\n BinaryGeometryType,\n BinaryPointFeatures,\n BinaryLineFeatures,\n BinaryPolygonFeatures,\n BinaryAttribute\n} from '@loaders.gl/schema';\nimport type {Feature, Geometry, Position, GeoJsonProperties} from '@loaders.gl/schema';\nimport type {\n Point,\n MultiPoint,\n LineString,\n MultiLineString,\n Polygon,\n MultiPolygon\n} from '@loaders.gl/schema';\n\n// Note:L We do not handle GeometryCollection, define a limited Geometry type that always has coordinates.\n// type FeatureGeometry = Point | MultiPoint | LineString | MultiLineString | Polygon | MultiPolygon;\n\ntype BinaryToGeoJsonOptions = {\n type?: BinaryGeometryType;\n globalFeatureId?: number;\n};\n\n/**\n * Convert binary geometry representation to GeoJSON\n * @param data geometry data in binary representation\n * @param options\n * @param options.type Input data type: Point, LineString, or Polygon\n * @param options.featureId Global feature id. If specified, only a single feature is extracted\n * @return GeoJSON objects\n */\nexport function binaryToGeojson(\n data: BinaryFeatures,\n options?: BinaryToGeoJsonOptions\n): Feature[] | Feature {\n const globalFeatureId = options?.globalFeatureId;\n if (globalFeatureId !== undefined) {\n return getSingleFeature(data, globalFeatureId);\n }\n return parseFeatures(data, options?.type);\n}\n\n/** @deprecated use `binaryToGeojson` or `binaryToGeometry` instead */\nexport function binaryToGeoJson(\n data: BinaryGeometry | BinaryFeatures,\n type?: BinaryGeometryType,\n format: 'feature' | 'geometry' = 'feature'\n): Geometry | Feature[] {\n switch (format) {\n case 'feature':\n return parseFeatures(data as BinaryFeatures, type);\n case 'geometry':\n return binaryToGeometry(data as BinaryGeometry);\n default:\n throw new Error(format);\n }\n}\n\n/**\n * Return a single feature from a binary geometry representation as GeoJSON\n * @param data geometry data in binary representation\n * @return GeoJSON feature\n */\nfunction getSingleFeature(data: BinaryFeatures, globalFeatureId: number): Feature {\n const dataArray = normalizeInput(data);\n for (const data of dataArray) {\n let lastIndex = 0;\n let lastValue = data.featureIds.value[0];\n\n // Scan through data until we find matching feature\n for (let i = 0; i < data.featureIds.value.length; i++) {\n const currValue = data.featureIds.value[i];\n if (currValue === lastValue) {\n // eslint-disable-next-line no-continue\n continue;\n }\n if (globalFeatureId === data.globalFeatureIds.value[lastIndex]) {\n return parseFeature(data, lastIndex, i);\n }\n lastIndex = i;\n lastValue = currValue;\n }\n\n if (globalFeatureId === data.globalFeatureIds.value[lastIndex]) {\n return parseFeature(data, lastIndex, data.featureIds.value.length);\n }\n }\n\n throw new Error(`featureId:${globalFeatureId} not found`);\n}\n\nfunction parseFeatures(data: BinaryFeatures, type?: BinaryGeometryType): Feature[] {\n const dataArray = normalizeInput(data, type);\n return parseFeatureCollection(dataArray);\n}\n\n/** Parse input binary data and return a valid GeoJSON geometry object */\nexport function binaryToGeometry(\n data: BinaryGeometry,\n startIndex?: number,\n endIndex?: number\n): Geometry {\n switch (data.type) {\n case 'Point':\n return pointToGeoJson(data, startIndex, endIndex);\n case 'LineString':\n return lineStringToGeoJson(data, startIndex, endIndex);\n case 'Polygon':\n return polygonToGeoJson(data, startIndex, endIndex);\n default:\n const unexpectedInput: never = data;\n throw new Error(`Unsupported geometry type: ${(unexpectedInput as any)?.type}`);\n }\n}\n\ntype BinaryFeature = BinaryPointFeatures | BinaryLineFeatures | BinaryPolygonFeatures;\ntype BinaryFeaturesArray = BinaryFeature[];\n\n// Normalize features\n// Return an array of data objects, each of which have a type key\nfunction normalizeInput(data: BinaryFeatures, type?: BinaryGeometryType): BinaryFeaturesArray {\n const isHeterogeneousType = Boolean(data.points || data.lines || data.polygons);\n\n if (!isHeterogeneousType) {\n // @ts-expect-error This is a legacy check which allowed `data` to be an instance of the values\n // here. Aka the new data.points, data.lines, or data.polygons.\n data.type = type || parseType(data);\n return [data] as BinaryFeaturesArray;\n }\n\n const features: BinaryFeaturesArray = [];\n if (data.points) {\n data.points.type = 'Point';\n features.push(data.points);\n }\n if (data.lines) {\n data.lines.type = 'LineString';\n features.push(data.lines);\n }\n if (data.polygons) {\n data.polygons.type = 'Polygon';\n features.push(data.polygons);\n }\n\n return features;\n}\n\n/** Parse input binary data and return an array of GeoJSON Features */\nfunction parseFeatureCollection(dataArray): Feature[] {\n const features: Feature[] = [];\n for (const data of dataArray) {\n if (data.featureIds.value.length === 0) {\n // eslint-disable-next-line no-continue\n continue;\n }\n let lastIndex = 0;\n let lastValue = data.featureIds.value[0];\n\n // Need to deduce start, end indices of each feature\n for (let i = 0; i < data.featureIds.value.length; i++) {\n const currValue = data.featureIds.value[i];\n if (currValue === lastValue) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n features.push(parseFeature(data, lastIndex, i));\n lastIndex = i;\n lastValue = currValue;\n }\n\n // Last feature\n features.push(parseFeature(data, lastIndex, data.featureIds.value.length));\n }\n return features;\n}\n\n/** Parse input binary data and return a single GeoJSON Feature */\nfunction parseFeature(data, startIndex?: number, endIndex?: number): Feature {\n const geometry = binaryToGeometry(data, startIndex, endIndex);\n const properties = parseProperties(data, startIndex, endIndex);\n const fields = parseFields(data, startIndex, endIndex);\n return {type: 'Feature', geometry, properties, ...fields};\n}\n\n/** Parse input binary data and return an object of fields */\nfunction parseFields(data, startIndex: number = 0, endIndex?: number): GeoJsonProperties {\n return data.fields && data.fields[data.featureIds.value[startIndex]];\n}\n\n/** Parse input binary data and return an object of properties */\nfunction parseProperties(data, startIndex: number = 0, endIndex?: number): GeoJsonProperties {\n const properties = Object.assign({}, data.properties[data.featureIds.value[startIndex]]);\n for (const key in data.numericProps) {\n properties[key] = data.numericProps[key].value[startIndex];\n }\n return properties;\n}\n\n/** Parse binary data of type Polygon */\nfunction polygonToGeoJson(\n data,\n startIndex: number = -Infinity,\n endIndex: number = Infinity\n): Polygon | MultiPolygon {\n const {positions} = data;\n const polygonIndices = data.polygonIndices.value.filter((x) => x >= startIndex && x <= endIndex);\n const primitivePolygonIndices = data.primitivePolygonIndices.value.filter(\n (x) => x >= startIndex && x <= endIndex\n );\n const multi = polygonIndices.length > 2;\n\n // Polygon\n if (!multi) {\n const coordinates: Position[][] = [];\n for (let i = 0; i < primitivePolygonIndices.length - 1; i++) {\n const startRingIndex = primitivePolygonIndices[i];\n const endRingIndex = primitivePolygonIndices[i + 1];\n const ringCoordinates = ringToGeoJson(positions, startRingIndex, endRingIndex);\n coordinates.push(ringCoordinates);\n }\n\n return {type: 'Polygon', coordinates};\n }\n\n // MultiPolygon\n const coordinates: Position[][][] = [];\n for (let i = 0; i < polygonIndices.length - 1; i++) {\n const startPolygonIndex = polygonIndices[i];\n const endPolygonIndex = polygonIndices[i + 1];\n const polygonCoordinates = polygonToGeoJson(\n data,\n startPolygonIndex,\n endPolygonIndex\n ).coordinates;\n coordinates.push(polygonCoordinates as Position[][]);\n }\n\n return {type: 'MultiPolygon', coordinates};\n}\n\n/** Parse binary data of type LineString */\nfunction lineStringToGeoJson(\n data,\n startIndex: number = -Infinity,\n endIndex: number = Infinity\n): LineString | MultiLineString {\n const {positions} = data;\n const pathIndices = data.pathIndices.value.filter((x) => x >= startIndex && x <= endIndex);\n const multi = pathIndices.length > 2;\n\n if (!multi) {\n const coordinates = ringToGeoJson(positions, pathIndices[0], pathIndices[1]);\n return {type: 'LineString', coordinates};\n }\n\n const coordinates: Position[][] = [];\n for (let i = 0; i < pathIndices.length - 1; i++) {\n const ringCoordinates = ringToGeoJson(positions, pathIndices[i], pathIndices[i + 1]);\n coordinates.push(ringCoordinates);\n }\n\n return {type: 'MultiLineString', coordinates};\n}\n\n/** Parse binary data of type Point */\nfunction pointToGeoJson(data, startIndex, endIndex): Point | MultiPoint {\n const {positions} = data;\n const coordinates = ringToGeoJson(positions, startIndex, endIndex);\n const multi = coordinates.length > 1;\n\n if (multi) {\n return {type: 'MultiPoint', coordinates};\n }\n\n return {type: 'Point', coordinates: coordinates[0]};\n}\n\n/**\n * Parse a linear ring of positions to a GeoJSON linear ring\n *\n * @param positions Positions TypedArray\n * @param startIndex Start index to include in ring\n * @param endIndex End index to include in ring\n * @returns GeoJSON ring\n */\nfunction ringToGeoJson(\n positions: BinaryAttribute,\n startIndex?: number,\n endIndex?: number\n): Position[] {\n startIndex = startIndex || 0;\n endIndex = endIndex || positions.value.length / positions.size;\n\n const ringCoordinates: Position[] = [];\n for (let j = startIndex; j < endIndex; j++) {\n const coord = Array<number>();\n for (let k = j * positions.size; k < (j + 1) * positions.size; k++) {\n coord.push(Number(positions.value[k]));\n }\n ringCoordinates.push(coord);\n }\n return ringCoordinates;\n}\n\n// Deduce geometry type of data object\nfunction parseType(data) {\n if (data.pathIndices) {\n return 'LineString';\n }\n\n if (data.polygonIndices) {\n return 'Polygon';\n }\n\n return 'Point';\n}\n","import type {BinaryFeatures, BinaryGeometry} from '@loaders.gl/schema';\n\ntype TransformCoordinate = (coord: number[]) => number[];\n\n/**\n * Apply transformation to every coordinate of binary features\n * @param binaryFeatures binary features\n * @param transformCoordinate Function to call on each coordinate\n * @return Transformed binary features\n */\nexport function transformBinaryCoords(\n binaryFeatures: BinaryFeatures,\n transformCoordinate: TransformCoordinate\n): BinaryFeatures {\n if (binaryFeatures.points) {\n transformBinaryGeometryPositions(binaryFeatures.points, transformCoordinate);\n }\n if (binaryFeatures.lines) {\n transformBinaryGeometryPositions(binaryFeatures.lines, transformCoordinate);\n }\n if (binaryFeatures.polygons) {\n transformBinaryGeometryPositions(binaryFeatures.polygons, transformCoordinate);\n }\n return binaryFeatures;\n}\n\n/** Transform one binary geometry */\nfunction transformBinaryGeometryPositions(binaryGeometry: BinaryGeometry, fn: TransformCoordinate) {\n const {positions} = binaryGeometry;\n for (let i = 0; i < positions.value.length; i += positions.size) {\n // @ts-ignore inclusion of bigint causes problems\n const coord: Array<number> = Array.from(positions.value.subarray(i, i + positions.size));\n const transformedCoord = fn(coord);\n // @ts-ignore typescript typing for .set seems to require bigint?\n positions.value.set(transformedCoord, i);\n }\n}\n\n/**\n * Apply transformation to every coordinate of GeoJSON features\n *\n * @param features Array of GeoJSON features\n * @param fn Function to call on each coordinate\n * @return Transformed GeoJSON features\n */\nexport function transformGeoJsonCoords(\n features: object[],\n fn: (coord: number[]) => number[]\n): object[] {\n for (const feature of features) {\n // @ts-ignore\n feature.geometry.coordinates = coordMap(feature.geometry.coordinates, fn);\n }\n return features;\n}\n\nfunction coordMap(array, fn) {\n if (isCoord(array)) {\n return fn(array);\n }\n\n return array.map((item) => {\n return coordMap(item, fn);\n });\n}\n\nfunction isCoord(array) {\n return Number.isFinite(array[0]) && Number.isFinite(array[1]);\n}\n","export default function(defs) {\n defs('EPSG:4326', \"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\");\n defs('EPSG:4269', \"+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\");\n defs('EPSG:3857', \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs\");\n\n defs.WGS84 = defs['EPSG:4326'];\n defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857\n defs.GOOGLE = defs['EPSG:3857'];\n defs['EPSG:900913'] = defs['EPSG:3857'];\n defs['EPSG:102113'] = defs['EPSG:3857'];\n}\n","export var PJD_3PARAM = 1;\nexport var PJD_7PARAM = 2;\nexport var PJD_WGS84 = 4; // WGS84 or equivalent\nexport var PJD_NODATUM = 5; // WGS84 or equivalent\nexport var SEC_TO_RAD = 4.84813681109535993589914102357e-6;\nexport var HALF_PI = Math.PI/2;\n// ellipoid pj_set_ell.c\nexport var SIXTH = 0.1666666666666666667;\n/* 1/6 */\nexport var RA4 = 0.04722222222222222222;\n/* 17/360 */\nexport var RA6 = 0.02215608465608465608;\nexport var EPSLN = 1.0e-10;\n// you'd think you could use Number.EPSILON above but that makes\n// Mollweide get into an infinate loop.\n\nexport var D2R = 0.01745329251994329577;\nexport var R2D = 57.29577951308232088;\nexport var FORTPI = Math.PI/4;\nexport var TWO_PI = Math.PI * 2;\n// SPI is slightly greater than Math.PI, so values that exceed the -180..180\n// degree range by a tiny amount don't get wrapped. This prevents points that\n// have drifted from their original location along the 180th meridian (due to\n// floating point error) from changing their sign.\nexport var SPI = 3.14159265359;\n","var exports = {};\nexport {exports as default};\n\nexports.greenwich = 0.0; //\"0dE\",\nexports.lisbon = -9.131906111111; //\"9d07'54.862\\\"W\",\nexports.paris = 2.337229166667; //\"2d20'14.025\\\"E\",\nexports.bogota = -74.080916666667; //\"74d04'51.3\\\"W\",\nexports.madrid = -3.687938888889; //\"3d41'16.58\\\"W\",\nexports.rome = 12.452333333333; //\"12d27'8.4\\\"E\",\nexports.bern = 7.439583333333; //\"7d26'22.5\\\"E\",\nexports.jakarta = 106.807719444444; //\"106d48'27.79\\\"E\",\nexports.ferro = -17.666666666667; //\"17d40'W\",\nexports.brussels = 4.367975; //\"4d22'4.71\\\"E\",\nexports.stockholm = 18.058277777778; //\"18d3'29.8\\\"E\",\nexports.athens = 23.7163375; //\"23d42'58.815\\\"E\",\nexports.oslo = 10.722916666667; //\"10d43'22.5\\\"E\"\n","export default {\n ft: {to_meter: 0.3048},\n 'us-ft': {to_meter: 1200 / 3937}\n};\n","var ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nexport default function match(obj, key) {\n if (obj[key]) {\n return obj[key];\n }\n var keys = Object.keys(obj);\n var lkey = key.toLowerCase().replace(ignoredChar, '');\n var i = -1;\n var testkey, processedKey;\n while (++i < keys.length) {\n testkey = keys[i];\n processedKey = testkey.toLowerCase().replace(ignoredChar, '');\n if (processedKey === lkey) {\n return obj[testkey];\n }\n }\n}\n","import {D2R} from './constants/values';\nimport PrimeMeridian from './constants/PrimeMeridian';\nimport units from './constants/units';\nimport match from './match';\n\nexport default function(defData) {\n var self = {};\n var paramObj = defData.split('+').map(function(v) {\n return v.trim();\n }).filter(function(a) {\n return a;\n }).reduce(function(p, a) {\n var split = a.split('=');\n split.push(true);\n p[split[0].toLowerCase()] = split[1];\n return p;\n }, {});\n var paramName, paramVal, paramOutname;\n var params = {\n proj: 'projName',\n datum: 'datumCode',\n rf: function(v) {\n self.rf = parseFloat(v);\n },\n lat_0: function(v) {\n self.lat0 = v * D2R;\n },\n lat_1: function(v) {\n self.lat1 = v * D2R;\n },\n lat_2: function(v) {\n self.lat2 = v * D2R;\n },\n lat_ts: function(v) {\n self.lat_ts = v * D2R;\n },\n lon_0: function(v) {\n self.long0 = v * D2R;\n },\n lon_1: function(v) {\n self.long1 = v * D2R;\n },\n lon_2: function(v) {\n self.long2 = v * D2R;\n },\n alpha: function(v) {\n self.alpha = parseFloat(v) * D2R;\n },\n lonc: function(v) {\n self.longc = v * D2R;\n },\n x_0: function(v) {\n self.x0 = parseFloat(v);\n },\n y_0: function(v) {\n self.y0 = parseFloat(v);\n },\n k_0: function(v) {\n self.k0 = parseFloat(v);\n },\n k: function(v) {\n self.k0 = parseFloat(v);\n },\n a: function(v) {\n self.a = parseFloat(v);\n },\n b: function(v) {\n self.b = parseFloat(v);\n },\n r_a: function() {\n self.R_A = true;\n },\n zone: function(v) {\n self.zone = parseInt(v, 10);\n },\n south: function() {\n self.utmSouth = true;\n },\n towgs84: function(v) {\n self.datum_params = v.split(\",\").map(function(a) {\n return parseFloat(a);\n });\n },\n to_meter: function(v) {\n self.to_meter = parseFloat(v);\n },\n units: function(v) {\n self.units = v;\n var unit = match(units, v);\n if (unit) {\n self.to_meter = unit.to_meter;\n }\n },\n from_greenwich: function(v) {\n self.from_greenwich = v * D2R;\n },\n pm: function(v) {\n var pm = match(PrimeMeridian, v);\n self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;\n },\n nadgrids: function(v) {\n if (v === '@null') {\n self.datumCode = 'none';\n }\n else {\n self.nadgrids = v;\n }\n },\n axis: function(v) {\n var legalAxis = \"ewnsud\";\n if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {\n self.axis = v;\n }\n }\n };\n for (paramName in paramObj) {\n paramVal = paramObj[paramName];\n if (paramName in params) {\n paramOutname = params[paramName];\n if (typeof paramOutname === 'function') {\n paramOutname(paramVal);\n }\n else {\n self[paramOutname] = paramVal;\n }\n }\n else {\n self[paramName] = paramVal;\n }\n }\n if(typeof self.datumCode === 'string' && self.datumCode !== \"WGS84\"){\n self.datumCode = self.datumCode.toLowerCase();\n }\n return self;\n}\n","export default parseString;\n\nvar NEUTRAL = 1;\nvar KEYWORD = 2;\nvar NUMBER = 3;\nvar QUOTED = 4;\nvar AFTERQUOTE = 5;\nvar ENDED = -1;\nvar whitespace = /\\s/;\nvar latin = /[A-Za-z]/;\nvar keyword = /[A-Za-z84]/;\nvar endThings = /[,\\]]/;\nvar digets = /[\\d\\.E\\-\\+]/;\n// const ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\nfunction Parser(text) {\n if (typeof text !== 'string') {\n throw new Error('not a string');\n }\n this.text = text.trim();\n this.level = 0;\n this.place = 0;\n this.root = null;\n this.stack = [];\n this.currentObject = null;\n this.state = NEUTRAL;\n}\nParser.prototype.readCharicter = function() {\n var char = this.text[this.place++];\n if (this.state !== QUOTED) {\n while (whitespace.test(char)) {\n if (this.place >= this.text.length) {\n return;\n }\n char = this.text[this.place++];\n }\n }\n switch (this.state) {\n case NEUTRAL:\n return this.neutral(char);\n case KEYWORD:\n return this.keyword(char)\n case QUOTED:\n return this.quoted(char);\n case AFTERQUOTE:\n return this.afterquote(char);\n case NUMBER:\n return this.number(char);\n case ENDED:\n return;\n }\n};\nParser.prototype.afterquote = function(char) {\n if (char === '\"') {\n this.word += '\"';\n this.state = QUOTED;\n return;\n }\n if (endThings.test(char)) {\n this.word = this.word.trim();\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in afterquote yet, index ' + this.place);\n};\nParser.prototype.afterItem = function(char) {\n if (char === ',') {\n if (this.word !== null) {\n this.currentObject.push(this.word);\n }\n this.word = null;\n this.state = NEUTRAL;\n return;\n }\n if (char === ']') {\n this.level--;\n if (this.word !== null) {\n this.currentObject.push(this.word);\n this.word = null;\n }\n this.state = NEUTRAL;\n this.currentObject = this.stack.pop();\n if (!this.currentObject) {\n this.state = ENDED;\n }\n\n return;\n }\n};\nParser.prototype.number = function(char) {\n if (digets.test(char)) {\n this.word += char;\n return;\n }\n if (endThings.test(char)) {\n this.word = parseFloat(this.word);\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in number yet, index ' + this.place);\n};\nParser.prototype.quoted = function(char) {\n if (char === '\"') {\n this.state = AFTERQUOTE;\n return;\n }\n this.word += char;\n return;\n};\nParser.prototype.keyword = function(char) {\n if (keyword.test(char)) {\n this.word += char;\n return;\n }\n if (char === '[') {\n var newObjects = [];\n newObjects.push(this.word);\n this.level++;\n if (this.root === null) {\n this.root = newObjects;\n } else {\n this.currentObject.push(newObjects);\n }\n this.stack.push(this.currentObject);\n this.currentObject = newObjects;\n this.state = NEUTRAL;\n return;\n }\n if (endThings.test(char)) {\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in keyword yet, index ' + this.place);\n};\nParser.prototype.neutral = function(char) {\n if (latin.test(char)) {\n this.word = char;\n this.state = KEYWORD;\n return;\n }\n if (char === '\"') {\n this.word = '';\n this.state = QUOTED;\n return;\n }\n if (digets.test(char)) {\n this.word = char;\n this.state = NUMBER;\n return;\n }\n if (endThings.test(char)) {\n this.afterItem(char);\n return;\n }\n throw new Error('havn\\'t handled \"' +char + '\" in neutral yet, index ' + this.place);\n};\nParser.prototype.output = function() {\n while (this.place < this.text.length) {\n this.readCharicter();\n }\n if (this.state === ENDED) {\n return this.root;\n }\n throw new Error('unable to parse string \"' +this.text + '\". State is ' + this.state);\n};\n\nfunction parseString(txt) {\n var parser = new Parser(txt);\n return parser.output();\n}\n","\n\nfunction mapit(obj, key, value) {\n if (Array.isArray(key)) {\n value.unshift(key);\n key = null;\n }\n var thing = key ? {} : obj;\n\n var out = value.reduce(function(newObj, item) {\n sExpr(item, newObj);\n return newObj\n }, thing);\n if (key) {\n obj[key] = out;\n }\n}\n\nexport function sExpr(v, obj) {\n if (!Array.isArray(v)) {\n obj[v] = true;\n return;\n }\n var key = v.shift();\n if (key === 'PARAMETER') {\n key = v.shift();\n }\n if (v.length === 1) {\n if (Array.isArray(v[0])) {\n obj[key] = {};\n sExpr(v[0], obj[key]);\n return;\n }\n obj[key] = v[0];\n return;\n }\n if (!v.length) {\n obj[key] = true;\n return;\n }\n if (key === 'TOWGS84') {\n obj[key] = v;\n return;\n }\n if (key === 'AXIS') {\n if (!(key in obj)) {\n obj[key] = [];\n }\n obj[key].push(v);\n return;\n }\n if (!Array.isArray(key)) {\n obj[key] = {};\n }\n\n var i;\n switch (key) {\n case 'UNIT':\n case 'PRIMEM':\n case 'VERT_DATUM':\n obj[key] = {\n name: v[0].toLowerCase(),\n convert: v[1]\n };\n if (v.length === 3) {\n sExpr(v[2], obj[key]);\n }\n return;\n case 'SPHEROID':\n case 'ELLIPSOID':\n obj[key] = {\n name: v[0],\n a: v[1],\n rf: v[2]\n };\n if (v.length === 4) {\n sExpr(v[3], obj[key]);\n }\n return;\n case 'PROJECTEDCRS':\n case 'PROJCRS':\n case 'GEOGCS':\n case 'GEOCCS':\n case 'PROJCS':\n case 'LOCAL_CS':\n case 'GEODCRS':\n case 'GEODETICCRS':\n case 'GEODETICDATUM':\n case 'EDATUM':\n case 'ENGINEERINGDATUM':\n case 'VERT_CS':\n case 'VERTCRS':\n case 'VERTICALCRS':\n case 'COMPD_CS':\n case 'COMPOUNDCRS':\n case 'ENGINEERINGCRS':\n case 'ENGCRS':\n case 'FITTED_CS':\n case 'LOCAL_DATUM':\n case 'DATUM':\n v[0] = ['name', v[0]];\n mapit(obj, key, v);\n return;\n default:\n i = -1;\n while (++i < v.length) {\n if (!Array.isArray(v[i])) {\n return sExpr(v, obj[key]);\n }\n }\n return mapit(obj, key, v);\n }\n}\n","var D2R = 0.01745329251994329577;\nimport parser from './parser';\nimport {sExpr} from './process';\n\n\n\nfunction rename(obj, params) {\n var outName = params[0];\n var inName = params[1];\n if (!(outName in obj) && (inName in obj)) {\n obj[outName] = obj[inName];\n if (params.length === 3) {\n obj[outName] = params[2](obj[outName]);\n }\n }\n}\n\nfunction d2r(input) {\n return input * D2R;\n}\n\nfunction cleanWKT(wkt) {\n if (wkt.type === 'GEOGCS') {\n wkt.projName = 'longlat';\n } else if (wkt.type === 'LOCAL_CS') {\n wkt.projName = 'identity';\n wkt.local = true;\n } else {\n if (typeof wkt.PROJECTION === 'object') {\n wkt.projName = Object.keys(wkt.PROJECTION)[0];\n } else {\n wkt.projName = wkt.PROJECTION;\n }\n }\n if (wkt.AXIS) {\n var axisOrder = '';\n for (var i = 0, ii = wkt.AXIS.length; i < ii; ++i) {\n var axis = wkt.AXIS[i];\n var descriptor = axis[0].toLowerCase();\n if (descriptor.indexOf('north') !== -1) {\n axisOrder += 'n';\n } else if (descriptor.indexOf('south') !== -1) {\n axisOrder += 's';\n } else if (descriptor.indexOf('east') !== -1) {\n axisOrder += 'e';\n } else if (descriptor.indexOf('west') !== -1) {\n axisOrder += 'w';\n }\n }\n if (axisOrder.length === 2) {\n axisOrder += 'u';\n }\n if (axisOrder.length === 3) {\n wkt.axis = axisOrder;\n }\n }\n if (wkt.UNIT) {\n wkt.units = wkt.UNIT.name.toLowerCase();\n if (wkt.units === 'metre') {\n wkt.units = 'meter';\n }\n if (wkt.UNIT.convert) {\n if (wkt.type === 'GEOGCS') {\n if (wkt.DATUM && wkt.DATUM.SPHEROID) {\n wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a;\n }\n } else {\n wkt.to_meter = wkt.UNIT.convert;\n }\n }\n }\n var geogcs = wkt.GEOGCS;\n if (wkt.type === 'GEOGCS') {\n geogcs = wkt;\n }\n if (geogcs) {\n //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){\n // wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R;\n //}\n if (geogcs.DATUM) {\n wkt.datumCode = geogcs.DATUM.name.toLowerCase();\n } else {\n wkt.datumCode = geogcs.name.toLowerCase();\n }\n if (wkt.datumCode.slice(0, 2) === 'd_') {\n wkt.datumCode = wkt.datumCode.slice(2);\n }\n if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') {\n wkt.datumCode = 'nzgd49';\n }\n if (wkt.datumCode === 'wgs_1984' || wkt.datumCode === 'world_geodetic_system_1984') {\n if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {\n wkt.sphere = true;\n }\n wkt.datumCode = 'wgs84';\n }\n if (wkt.datumCode.slice(-6) === '_ferro') {\n wkt.datumCode = wkt.datumCode.slice(0, - 6);\n }\n if (wkt.datumCode.slice(-8) === '_jakarta') {\n wkt.datumCode = wkt.datumCode.slice(0, - 8);\n }\n if (~wkt.datumCode.indexOf('belge')) {\n wkt.datumCode = 'rnb72';\n }\n if (geogcs.DATUM && geogcs.DATUM.SPHEROID) {\n wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\\_18/, 'clrk');\n if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') {\n wkt.ellps = 'intl';\n }\n\n wkt.a = geogcs.DATUM.SPHEROID.a;\n wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10);\n }\n\n if (geogcs.DATUM && geogcs.DATUM.TOWGS84) {\n wkt.datum_params = geogcs.DATUM.TOWGS84;\n }\n if (~wkt.datumCode.indexOf('osgb_1936')) {\n wkt.datumCode = 'osgb36';\n }\n if (~wkt.datumCode.indexOf('osni_1952')) {\n wkt.datumCode = 'osni52';\n }\n if (~wkt.datumCode.indexOf('tm65')\n || ~wkt.datumCode.indexOf('geodetic_datum_of_1965')) {\n wkt.datumCode = 'ire65';\n }\n if (wkt.datumCode === 'ch1903+') {\n wkt.datumCode = 'ch1903';\n }\n if (~wkt.datumCode.indexOf('israel')) {\n wkt.datumCode = 'isr93';\n }\n }\n if (wkt.b && !isFinite(wkt.b)) {\n wkt.b = wkt.a;\n }\n\n function toMeter(input) {\n var ratio = wkt.to_meter || 1;\n return input * ratio;\n }\n var renamer = function(a) {\n return rename(wkt, a);\n };\n var list = [\n ['standard_parallel_1', 'Standard_Parallel_1'],\n ['standard_parallel_2', 'Standard_Parallel_2'],\n ['false_easting', 'False_Easting'],\n ['false_northing', 'False_Northing'],\n ['central_meridian', 'Central_Meridian'],\n ['latitude_of_origin', 'Latitude_Of_Origin'],\n ['latitude_of_origin', 'Central_Parallel'],\n ['scale_factor', 'Scale_Factor'],\n ['k0', 'scale_factor'],\n ['latitude_of_center', 'Latitude_Of_Center'],\n ['latitude_of_center', 'Latitude_of_center'],\n ['lat0', 'latitude_of_center', d2r],\n ['longitude_of_center', 'Longitude_Of_Center'],\n ['longitude_of_center', 'Longitude_of_center'],\n ['longc', 'longitude_of_center', d2r],\n ['x0', 'false_easting', toMeter],\n ['y0', 'false_northing', toMeter],\n ['long0', 'central_meridian', d2r],\n ['lat0', 'latitude_of_origin', d2r],\n ['lat0', 'standard_parallel_1', d2r],\n ['lat1', 'standard_parallel_1', d2r],\n ['lat2', 'standard_parallel_2', d2r],\n ['azimuth', 'Azimuth'],\n ['alpha', 'azimuth', d2r],\n ['srsCode', 'name']\n ];\n list.forEach(renamer);\n if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) {\n wkt.long0 = wkt.longc;\n }\n if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) {\n wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);\n wkt.lat_ts = wkt.lat1;\n }\n}\nexport default function(wkt) {\n var lisp = parser(wkt);\n var type = lisp.shift();\n var name = lisp.shift();\n lisp.unshift(['name', name]);\n lisp.unshift(['type', type]);\n var obj = {};\n sExpr(lisp, obj);\n cleanWKT(obj);\n return obj;\n}\n","import globals from './global';\nimport parseProj from './projString';\nimport wkt from 'wkt-parser';\n\nfunction defs(name) {\n /*global console*/\n var that = this;\n if (arguments.length === 2) {\n var def = arguments[1];\n if (typeof def === 'string') {\n if (def.charAt(0) === '+') {\n defs[name] = parseProj(arguments[1]);\n }\n else {\n defs[name] = wkt(arguments[1]);\n }\n } else {\n defs[name] = def;\n }\n }\n else if (arguments.length === 1) {\n if (Array.isArray(name)) {\n return name.map(function(v) {\n if (Array.isArray(v)) {\n defs.apply(that, v);\n }\n else {\n defs(v);\n }\n });\n }\n else if (typeof name === 'string') {\n if (name in defs) {\n return defs[name];\n }\n }\n else if ('EPSG' in name) {\n defs['EPSG:' + name.EPSG] = name;\n }\n else if ('ESRI' in name) {\n defs['ESRI:' + name.ESRI] = name;\n }\n else if ('IAU2000' in name) {\n defs['IAU2000:' + name.IAU2000] = name;\n }\n else {\n console.log(name);\n }\n return;\n }\n\n\n}\nglobals(defs);\nexport default defs;\n","import defs from './defs';\nimport wkt from 'wkt-parser';\nimport projStr from './projString';\nimport match from './match';\nfunction testObj(code){\n return typeof code === 'string';\n}\nfunction testDef(code){\n return code in defs;\n}\n var codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\nfunction testWKT(code){\n return codeWords.some(function (word) {\n return code.indexOf(word) > -1;\n });\n}\nvar codes = ['3857', '900913', '3785', '102113'];\nfunction checkMercator(item) {\n var auth = match(item, 'authority');\n if (!auth) {\n return;\n }\n var code = match(auth, 'epsg');\n return code && codes.indexOf(code) > -1;\n}\nfunction checkProjStr(item) {\n var ext = match(item, 'extension');\n if (!ext) {\n return;\n }\n return match(ext, 'proj4');\n}\nfunction testProj(code){\n return code[0] === '+';\n}\nfunction parse(code){\n if (testObj(code)) {\n //check to see if this is a WKT string\n if (testDef(code)) {\n return defs[code];\n }\n if (testWKT(code)) {\n var out = wkt(code);\n // test of spetial case, due to this being a very common and often malformed\n if (checkMercator(out)) {\n return defs['EPSG:3857'];\n }\n var maybeProjStr = checkProjStr(out);\n if (maybeProjStr) {\n return projStr(maybeProjStr);\n }\n return out;\n }\n if (testProj(code)) {\n return projStr(code);\n }\n }else{\n return code;\n }\n}\n\nexport default parse;\n","export default function(destination, source) {\n destination = destination || {};\n var value, property;\n if (!source) {\n return destination;\n }\n for (property in source) {\n value = source[property];\n if (value !== undefined) {\n destination[property] = value;\n }\n }\n return destination;\n}\n","export default function(eccent, sinphi, cosphi) {\n var con = eccent * sinphi;\n return cosphi / (Math.sqrt(1 - con * con));\n}","export default function(x) {\n return x<0 ? -1 : 1;\n}","\nimport {TWO_PI, SPI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, phi, sinphi) {\n var con = eccent * sinphi;\n var com = 0.5 * eccent;\n con = Math.pow(((1 - con) / (1 + con)), com);\n return (Math.tan(0.5 * (HALF_PI - phi)) / con);\n}\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, ts) {\n var eccnth = 0.5 * eccent;\n var con, dphi;\n var phi = HALF_PI - 2 * Math.atan(ts);\n for (var i = 0; i <= 15; i++) {\n con = eccent * Math.sin(phi);\n dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n //console.log(\"phi2z has NoConvergence\");\n return -9999;\n}\n","export function init() {\n //no-op for longlat\n}\n\nfunction identity(pt) {\n return pt;\n}\nexport {identity as forward};\nexport {identity as inverse};\nexport var names = [\"longlat\", \"identity\"];\nexport default {\n init: init,\n forward: identity,\n inverse: identity,\n names: names\n};\n","import merc from \"./projections/merc\";\nimport longlat from \"./projections/longlat\";\nvar projs = [merc, longlat];\nvar names = {};\nvar projStore = [];\n\nfunction add(proj, i) {\n var len = projStore.length;\n if (!proj.names) {\n console.log(i);\n return true;\n }\n projStore[len] = proj;\n proj.names.forEach(function(n) {\n names[n.toLowerCase()] = len;\n });\n return this;\n}\n\nexport {add};\n\nexport function get(name) {\n if (!name) {\n return false;\n }\n var n = name.toLowerCase();\n if (typeof names[n] !== 'undefined' && projStore[names[n]]) {\n return projStore[names[n]];\n }\n}\n\nexport function start() {\n projs.forEach(add);\n}\nexport default {\n start: start,\n add: add,\n get: get\n};\n","import msfnz from '../common/msfnz';\n\nimport adjust_lon from '../common/adjust_lon';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport {FORTPI, R2D, EPSLN, HALF_PI} from '../constants/values';\nexport function init() {\n var con = this.b / this.a;\n this.es = 1 - con * con;\n if(!('x0' in this)){\n this.x0 = 0;\n }\n if(!('y0' in this)){\n this.y0 = 0;\n }\n this.e = Math.sqrt(this.es);\n if (this.lat_ts) {\n if (this.sphere) {\n this.k0 = Math.cos(this.lat_ts);\n }\n else {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n }\n else {\n if (!this.k0) {\n if (this.k) {\n this.k0 = this.k;\n }\n else {\n this.k0 = 1;\n }\n }\n }\n}\n\n/* Mercator forward equations--mapping lat,long to x,y\n --------------------------------------------------*/\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n // convert to radians\n if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {\n return null;\n }\n\n var x, y;\n if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n return null;\n }\n else {\n if (this.sphere) {\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\n }\n else {\n var sinphi = Math.sin(lat);\n var ts = tsfnz(this.e, lat, sinphi);\n x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n y = this.y0 - this.a * this.k0 * Math.log(ts);\n }\n p.x = x;\n p.y = y;\n return p;\n }\n}\n\n/* Mercator inverse equations--mapping x,y to lat/long\n --------------------------------------------------*/\nexport function inverse(p) {\n\n var x = p.x - this.x0;\n var y = p.y - this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));\n }\n else {\n var ts = Math.exp(-y / (this.a * this.k0));\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n lon = adjust_lon(this.long0 + x / (this.a * this.k0));\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Mercator\", \"Popular Visualisation Pseudo Mercator\", \"Mercator_1SP\", \"Mercator_Auxiliary_Sphere\", \"merc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","var exports = {};\nexport {exports as default};\nexports.MERIT = {\n a: 6378137.0,\n rf: 298.257,\n ellipseName: \"MERIT 1983\"\n};\n\nexports.SGS85 = {\n a: 6378136.0,\n rf: 298.257,\n ellipseName: \"Soviet Geodetic System 85\"\n};\n\nexports.GRS80 = {\n a: 6378137.0,\n rf: 298.257222101,\n ellipseName: \"GRS 1980(IUGG, 1980)\"\n};\n\nexports.IAU76 = {\n a: 6378140.0,\n rf: 298.257,\n ellipseName: \"IAU 1976\"\n};\n\nexports.airy = {\n a: 6377563.396,\n b: 6356256.910,\n ellipseName: \"Airy 1830\"\n};\n\nexports.APL4 = {\n a: 6378137,\n rf: 298.25,\n ellipseName: \"Appl. Physics. 1965\"\n};\n\nexports.NWL9D = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"Naval Weapons Lab., 1965\"\n};\n\nexports.mod_airy = {\n a: 6377340.189,\n b: 6356034.446,\n ellipseName: \"Modified Airy\"\n};\n\nexports.andrae = {\n a: 6377104.43,\n rf: 300.0,\n ellipseName: \"Andrae 1876 (Den., Iclnd.)\"\n};\n\nexports.aust_SA = {\n a: 6378160.0,\n rf: 298.25,\n ellipseName: \"Australian Natl & S. Amer. 1969\"\n};\n\nexports.GRS67 = {\n a: 6378160.0,\n rf: 298.2471674270,\n ellipseName: \"GRS 67(IUGG 1967)\"\n};\n\nexports.bessel = {\n a: 6377397.155,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841\"\n};\n\nexports.bess_nam = {\n a: 6377483.865,\n rf: 299.1528128,\n ellipseName: \"Bessel 1841 (Namibia)\"\n};\n\nexports.clrk66 = {\n a: 6378206.4,\n b: 6356583.8,\n ellipseName: \"Clarke 1866\"\n};\n\nexports.clrk80 = {\n a: 6378249.145,\n rf: 293.4663,\n ellipseName: \"Clarke 1880 mod.\"\n};\n\nexports.clrk58 = {\n a: 6378293.645208759,\n rf: 294.2606763692654,\n ellipseName: \"Clarke 1858\"\n};\n\nexports.CPM = {\n a: 6375738.7,\n rf: 334.29,\n ellipseName: \"Comm. des Poids et Mesures 1799\"\n};\n\nexports.delmbr = {\n a: 6376428.0,\n rf: 311.5,\n ellipseName: \"Delambre 1810 (Belgium)\"\n};\n\nexports.engelis = {\n a: 6378136.05,\n rf: 298.2566,\n ellipseName: \"Engelis 1985\"\n};\n\nexports.evrst30 = {\n a: 6377276.345,\n rf: 300.8017,\n ellipseName: \"Everest 1830\"\n};\n\nexports.evrst48 = {\n a: 6377304.063,\n rf: 300.8017,\n ellipseName: \"Everest 1948\"\n};\n\nexports.evrst56 = {\n a: 6377301.243,\n rf: 300.8017,\n ellipseName: \"Everest 1956\"\n};\n\nexports.evrst69 = {\n a: 6377295.664,\n rf: 300.8017,\n ellipseName: \"Everest 1969\"\n};\n\nexports.evrstSS = {\n a: 6377298.556,\n rf: 300.8017,\n ellipseName: \"Everest (Sabah & Sarawak)\"\n};\n\nexports.fschr60 = {\n a: 6378166.0,\n rf: 298.3,\n ellipseName: \"Fischer (Mercury Datum) 1960\"\n};\n\nexports.fschr60m = {\n a: 6378155.0,\n rf: 298.3,\n ellipseName: \"Fischer 1960\"\n};\n\nexports.fschr68 = {\n a: 6378150.0,\n rf: 298.3,\n ellipseName: \"Fischer 1968\"\n};\n\nexports.helmert = {\n a: 6378200.0,\n rf: 298.3,\n ellipseName: \"Helmert 1906\"\n};\n\nexports.hough = {\n a: 6378270.0,\n rf: 297.0,\n ellipseName: \"Hough\"\n};\n\nexports.intl = {\n a: 6378388.0,\n rf: 297.0,\n ellipseName: \"International 1909 (Hayford)\"\n};\n\nexports.kaula = {\n a: 6378163.0,\n rf: 298.24,\n ellipseName: \"Kaula 1961\"\n};\n\nexports.lerch = {\n a: 6378139.0,\n rf: 298.257,\n ellipseName: \"Lerch 1979\"\n};\n\nexports.mprts = {\n a: 6397300.0,\n rf: 191.0,\n ellipseName: \"Maupertius 1738\"\n};\n\nexports.new_intl = {\n a: 6378157.5,\n b: 6356772.2,\n ellipseName: \"New International 1967\"\n};\n\nexports.plessis = {\n a: 6376523.0,\n rf: 6355863.0,\n ellipseName: \"Plessis 1817 (France)\"\n};\n\nexports.krass = {\n a: 6378245.0,\n rf: 298.3,\n ellipseName: \"Krassovsky, 1942\"\n};\n\nexports.SEasia = {\n a: 6378155.0,\n b: 6356773.3205,\n ellipseName: \"Southeast Asia\"\n};\n\nexports.walbeck = {\n a: 6376896.0,\n b: 6355834.8467,\n ellipseName: \"Walbeck\"\n};\n\nexports.WGS60 = {\n a: 6378165.0,\n rf: 298.3,\n ellipseName: \"WGS 60\"\n};\n\nexports.WGS66 = {\n a: 6378145.0,\n rf: 298.25,\n ellipseName: \"WGS 66\"\n};\n\nexports.WGS7 = {\n a: 6378135.0,\n rf: 298.26,\n ellipseName: \"WGS 72\"\n};\n\nexport var WGS84 = exports.WGS84 = {\n a: 6378137.0,\n rf: 298.257223563,\n ellipseName: \"WGS 84\"\n};\n\nexports.sphere = {\n a: 6370997.0,\n b: 6370997.0,\n ellipseName: \"Normal Sphere (r=6370997)\"\n};\n","var exports = {};\nexport {exports as default};\nexports.wgs84 = {\n towgs84: \"0,0,0\",\n ellipse: \"WGS84\",\n datumName: \"WGS84\"\n};\n\nexports.ch1903 = {\n towgs84: \"674.374,15.056,405.346\",\n ellipse: \"bessel\",\n datumName: \"swiss\"\n};\n\nexports.ggrs87 = {\n towgs84: \"-199.87,74.79,246.62\",\n ellipse: \"GRS80\",\n datumName: \"Greek_Geodetic_Reference_System_1987\"\n};\n\nexports.nad83 = {\n towgs84: \"0,0,0\",\n ellipse: \"GRS80\",\n datumName: \"North_American_Datum_1983\"\n};\n\nexports.nad27 = {\n nadgrids: \"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",\n ellipse: \"clrk66\",\n datumName: \"North_American_Datum_1927\"\n};\n\nexports.potsdam = {\n towgs84: \"606.0,23.0,413.0\",\n ellipse: \"bessel\",\n datumName: \"Potsdam Rauenberg 1950 DHDN\"\n};\n\nexports.carthage = {\n towgs84: \"-263.0,6.0,431.0\",\n ellipse: \"clark80\",\n datumName: \"Carthage 1934 Tunisia\"\n};\n\nexports.hermannskogel = {\n towgs84: \"653.0,-212.0,449.0\",\n ellipse: \"bessel\",\n datumName: \"Hermannskogel\"\n};\n\nexports.osni52 = {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"airy\",\n datumName: \"Irish National\"\n};\n\nexports.ire65 = {\n towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n ellipse: \"mod_airy\",\n datumName: \"Ireland 1965\"\n};\n\nexports.rassadiran = {\n towgs84: \"-133.63,-157.5,-158.62\",\n ellipse: \"intl\",\n datumName: \"Rassadiran\"\n};\n\nexports.nzgd49 = {\n towgs84: \"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",\n ellipse: \"intl\",\n datumName: \"New Zealand Geodetic Datum 1949\"\n};\n\nexports.osgb36 = {\n towgs84: \"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",\n ellipse: \"airy\",\n datumName: \"Airy 1830\"\n};\n\nexports.s_jtsk = {\n towgs84: \"589,76,480\",\n ellipse: 'bessel',\n datumName: 'S-JTSK (Ferro)'\n};\n\nexports.beduaram = {\n towgs84: '-106,-87,188',\n ellipse: 'clrk80',\n datumName: 'Beduaram'\n};\n\nexports.gunung_segara = {\n towgs84: '-403,684,41',\n ellipse: 'bessel',\n datumName: 'Gunung Segara Jakarta'\n};\n\nexports.rnb72 = {\n towgs84: \"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1\",\n ellipse: \"intl\",\n datumName: \"Reseau National Belge 1972\"\n};\n","import {PJD_3PARAM, PJD_7PARAM, PJD_WGS84, PJD_NODATUM, SEC_TO_RAD} from './constants/values';\n\nfunction datum(datumCode, datum_params, a, b, es, ep2) {\n var out = {};\n\n if (datumCode === undefined || datumCode === 'none') {\n out.datum_type = PJD_NODATUM;\n } else {\n out.datum_type = PJD_WGS84;\n }\n\n if (datum_params) {\n out.datum_params = datum_params.map(parseFloat);\n if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {\n out.datum_type = PJD_3PARAM;\n }\n if (out.datum_params.length > 3) {\n if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {\n out.datum_type = PJD_7PARAM;\n out.datum_params[3] *= SEC_TO_RAD;\n out.datum_params[4] *= SEC_TO_RAD;\n out.datum_params[5] *= SEC_TO_RAD;\n out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;\n }\n }\n }\n\n out.a = a; //datum object also uses these values\n out.b = b;\n out.es = es;\n out.ep2 = ep2;\n return out;\n}\n\nexport default datum;\n","import parseCode from './parseCode';\nimport extend from './extend';\nimport projections from './projections';\nimport {sphere as dc_sphere, eccentricity as dc_eccentricity} from './deriveConstants';\nimport Datum from './constants/Datum';\nimport datum from './datum';\nimport match from './match';\n\nfunction Projection(srsCode,callback) {\n if (!(this instanceof Projection)) {\n return new Projection(srsCode);\n }\n callback = callback || function(error){\n if(error){\n throw error;\n }\n };\n var json = parseCode(srsCode);\n if(typeof json !== 'object'){\n callback(srsCode);\n return;\n }\n var ourProj = Projection.projections.get(json.projName);\n if(!ourProj){\n callback(srsCode);\n return;\n }\n if (json.datumCode && json.datumCode !== 'none') {\n var datumDef = match(Datum, json.datumCode);\n if (datumDef) {\n json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null;\n json.ellps = datumDef.ellipse;\n json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;\n }\n }\n json.k0 = json.k0 || 1.0;\n json.axis = json.axis || 'enu';\n json.ellps = json.ellps || 'wgs84';\n var sphere_ = dc_sphere(json.a, json.b, json.rf, json.ellps, json.sphere);\n var ecc = dc_eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);\n var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2);\n\n extend(this, json); // transfer everything over from the projection because we don't know what we'll need\n extend(this, ourProj); // transfer all the methods from the projection\n\n // copy the 4 things over we calulated in deriveConstants.sphere\n this.a = sphere_.a;\n this.b = sphere_.b;\n this.rf = sphere_.rf;\n this.sphere = sphere_.sphere;\n\n // copy the 3 things we calculated in deriveConstants.eccentricity\n this.es = ecc.es;\n this.e = ecc.e;\n this.ep2 = ecc.ep2;\n\n // add in the datum object\n this.datum = datumObj;\n\n // init the projection\n this.init();\n\n // legecy callback from back in the day when it went to spatialreference.org\n callback(null, this);\n\n}\nProjection.projections = projections;\nProjection.projections.start();\nexport default Projection;\n","import {SIXTH, RA4, RA6, EPSLN} from './constants/values';\nimport {default as Ellipsoid, WGS84} from './constants/Ellipsoid';\nimport match from './match';\n\nexport function eccentricity(a, b, rf, R_A) {\n var a2 = a * a; // used in geocentric\n var b2 = b * b; // used in geocentric\n var es = (a2 - b2) / a2; // e ^ 2\n var e = 0;\n if (R_A) {\n a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));\n a2 = a * a;\n es = 0;\n } else {\n e = Math.sqrt(es); // eccentricity\n }\n var ep2 = (a2 - b2) / b2; // used in geocentric\n return {\n es: es,\n e: e,\n ep2: ep2\n };\n}\nexport function sphere(a, b, rf, ellps, sphere) {\n if (!a) { // do we have an ellipsoid?\n var ellipse = match(Ellipsoid, ellps);\n if (!ellipse) {\n ellipse = WGS84;\n }\n a = ellipse.a;\n b = ellipse.b;\n rf = ellipse.rf;\n }\n\n if (rf && !b) {\n b = (1.0 - 1.0 / rf) * a;\n }\n if (rf === 0 || Math.abs(a - b) < EPSLN) {\n sphere = true;\n b = a;\n }\n return {\n a: a,\n b: b,\n rf: rf,\n sphere: sphere\n };\n}\n","'use strict';\nimport {PJD_3PARAM, PJD_7PARAM, HALF_PI} from './constants/values';\nexport function compareDatums(source, dest) {\n if (source.datum_type !== dest.datum_type) {\n return false; // false, datums are not equal\n } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {\n // the tolerance for es is to ensure that GRS80 and WGS84\n // are considered identical\n return false;\n } else if (source.datum_type === PJD_3PARAM) {\n return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);\n } else if (source.datum_type === PJD_7PARAM) {\n return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);\n } else {\n return true; // datums are equal\n }\n} // cs_compare_datums()\n\n/*\n * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates\n * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),\n * according to the current ellipsoid parameters.\n *\n * Latitude : Geodetic latitude in radians (input)\n * Longitude : Geodetic longitude in radians (input)\n * Height : Geodetic height, in meters (input)\n * X : Calculated Geocentric X coordinate, in meters (output)\n * Y : Calculated Geocentric Y coordinate, in meters (output)\n * Z : Calculated Geocentric Z coordinate, in meters (output)\n *\n */\nexport function geodeticToGeocentric(p, es, a) {\n var Longitude = p.x;\n var Latitude = p.y;\n var Height = p.z ? p.z : 0; //Z value not always supplied\n\n var Rn; /* Earth radius at location */\n var Sin_Lat; /* Math.sin(Latitude) */\n var Sin2_Lat; /* Square of Math.sin(Latitude) */\n var Cos_Lat; /* Math.cos(Latitude) */\n\n /*\n ** Don't blow up if Latitude is just a little out of the value\n ** range as it may just be a rounding issue. Also removed longitude\n ** test, it should be wrapped by Math.cos() and Math.sin(). NFW for PROJ.4, Sep/2001.\n */\n if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {\n Latitude = -HALF_PI;\n } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n Latitude = HALF_PI;\n } else if (Latitude < -HALF_PI) {\n /* Latitude out of range */\n //..reportError('geocent:lat out of range:' + Latitude);\n return { x: -Infinity, y: -Infinity, z: p.z };\n } else if (Latitude > HALF_PI) {\n /* Latitude out of range */\n return { x: Infinity, y: Infinity, z: p.z };\n }\n\n if (Longitude > Math.PI) {\n Longitude -= (2 * Math.PI);\n }\n Sin_Lat = Math.sin(Latitude);\n Cos_Lat = Math.cos(Latitude);\n Sin2_Lat = Sin_Lat * Sin_Lat;\n Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));\n return {\n x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),\n y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),\n z: ((Rn * (1 - es)) + Height) * Sin_Lat\n };\n} // cs_geodetic_to_geocentric()\n\nexport function geocentricToGeodetic(p, es, a, b) {\n /* local defintions and variables */\n /* end-criterium of loop, accuracy of sin(Latitude) */\n var genau = 1e-12;\n var genau2 = (genau * genau);\n var maxiter = 30;\n\n var P; /* distance between semi-minor axis and location */\n var RR; /* distance between center and location */\n var CT; /* sin of geocentric latitude */\n var ST; /* cos of geocentric latitude */\n var RX;\n var RK;\n var RN; /* Earth radius at location */\n var CPHI0; /* cos of start or old geodetic latitude in iterations */\n var SPHI0; /* sin of start or old geodetic latitude in iterations */\n var CPHI; /* cos of searched geodetic latitude */\n var SPHI; /* sin of searched geodetic latitude */\n var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */\n var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */\n\n var X = p.x;\n var Y = p.y;\n var Z = p.z ? p.z : 0.0; //Z value not always supplied\n var Longitude;\n var Latitude;\n var Height;\n\n P = Math.sqrt(X * X + Y * Y);\n RR = Math.sqrt(X * X + Y * Y + Z * Z);\n\n /* special cases for latitude and longitude */\n if (P / a < genau) {\n\n /* special case, if P=0. (X=0., Y=0.) */\n Longitude = 0.0;\n\n /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis\n * of ellipsoid (=center of mass), Latitude becomes PI/2 */\n if (RR / a < genau) {\n Latitude = HALF_PI;\n Height = -b;\n return {\n x: p.x,\n y: p.y,\n z: p.z\n };\n }\n } else {\n /* ellipsoidal (geodetic) longitude\n * interval: -PI < Longitude <= +PI */\n Longitude = Math.atan2(Y, X);\n }\n\n /* --------------------------------------------------------------\n * Following iterative algorithm was developped by\n * \"Institut for Erdmessung\", University of Hannover, July 1988.\n * Internet: www.ife.uni-hannover.de\n * Iterative computation of CPHI,SPHI and Height.\n * Iteration of CPHI and SPHI to 10**-12 radian resp.\n * 2*10**-7 arcsec.\n * --------------------------------------------------------------\n */\n CT = Z / RR;\n ST = P / RR;\n RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);\n CPHI0 = ST * (1.0 - es) * RX;\n SPHI0 = CT * RX;\n iter = 0;\n\n /* loop to find sin(Latitude) resp. Latitude\n * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */\n do {\n iter++;\n RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);\n\n /* ellipsoidal (geodetic) height */\n Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);\n\n RK = es * RN / (RN + Height);\n RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);\n CPHI = ST * (1.0 - RK) * RX;\n SPHI = CT * RX;\n SDPHI = SPHI * CPHI0 - CPHI * SPHI0;\n CPHI0 = CPHI;\n SPHI0 = SPHI;\n }\n while (SDPHI * SDPHI > genau2 && iter < maxiter);\n\n /* ellipsoidal (geodetic) latitude */\n Latitude = Math.atan(SPHI / Math.abs(CPHI));\n return {\n x: Longitude,\n y: Latitude,\n z: Height\n };\n} // cs_geocentric_to_geodetic()\n\n/****************************************************************/\n// pj_geocentic_to_wgs84( p )\n// p = point to transform in geocentric coordinates (x,y,z)\n\n\n/** point object, nothing fancy, just allows values to be\n passed back and forth by reference rather than by value.\n Other point classes may be used as long as they have\n x and y properties, which will get modified in the transform method.\n*/\nexport function geocentricToWgs84(p, datum_type, datum_params) {\n\n if (datum_type === PJD_3PARAM) {\n // if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: p.x + datum_params[0],\n y: p.y + datum_params[1],\n z: p.z + datum_params[2],\n };\n } else if (datum_type === PJD_7PARAM) {\n var Dx_BF = datum_params[0];\n var Dy_BF = datum_params[1];\n var Dz_BF = datum_params[2];\n var Rx_BF = datum_params[3];\n var Ry_BF = datum_params[4];\n var Rz_BF = datum_params[5];\n var M_BF = datum_params[6];\n // if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,\n y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,\n z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF\n };\n }\n} // cs_geocentric_to_wgs84\n\n/****************************************************************/\n// pj_geocentic_from_wgs84()\n// coordinate system definition,\n// point to transform in geocentric coordinates (x,y,z)\nexport function geocentricFromWgs84(p, datum_type, datum_params) {\n\n if (datum_type === PJD_3PARAM) {\n //if( x[io] === HUGE_VAL )\n // continue;\n return {\n x: p.x - datum_params[0],\n y: p.y - datum_params[1],\n z: p.z - datum_params[2],\n };\n\n } else if (datum_type === PJD_7PARAM) {\n var Dx_BF = datum_params[0];\n var Dy_BF = datum_params[1];\n var Dz_BF = datum_params[2];\n var Rx_BF = datum_params[3];\n var Ry_BF = datum_params[4];\n var Rz_BF = datum_params[5];\n var M_BF = datum_params[6];\n var x_tmp = (p.x - Dx_BF) / M_BF;\n var y_tmp = (p.y - Dy_BF) / M_BF;\n var z_tmp = (p.z - Dz_BF) / M_BF;\n //if( x[io] === HUGE_VAL )\n // continue;\n\n return {\n x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,\n y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,\n z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp\n };\n } //cs_geocentric_from_wgs84()\n}\n","import {PJD_3PARAM, PJD_7PARAM, PJD_NODATUM} from './constants/values';\n\nimport {geodeticToGeocentric, geocentricToGeodetic, geocentricToWgs84, geocentricFromWgs84, compareDatums} from './datumUtils';\nfunction checkParams(type) {\n return (type === PJD_3PARAM || type === PJD_7PARAM);\n}\n\nexport default function(source, dest, point) {\n // Short cut if the datums are identical.\n if (compareDatums(source, dest)) {\n return point; // in this case, zero is sucess,\n // whereas cs_compare_datums returns 1 to indicate TRUE\n // confusing, should fix this\n }\n\n // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest\n if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {\n return point;\n }\n\n // If this datum requires grid shifts, then apply it to geodetic coordinates.\n\n // Do we need to go through geocentric coordinates?\n if (source.es === dest.es && source.a === dest.a && !checkParams(source.datum_type) && !checkParams(dest.datum_type)) {\n return point;\n }\n\n // Convert to geocentric coordinates.\n point = geodeticToGeocentric(point, source.es, source.a);\n // Convert between datums\n if (checkParams(source.datum_type)) {\n point = geocentricToWgs84(point, source.datum_type, source.datum_params);\n }\n if (checkParams(dest.datum_type)) {\n point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);\n }\n return geocentricToGeodetic(point, dest.es, dest.a, dest.b);\n\n}\n","export default function(crs, denorm, point) {\n var xin = point.x,\n yin = point.y,\n zin = point.z || 0.0;\n var v, t, i;\n var out = {};\n for (i = 0; i < 3; i++) {\n if (denorm && i === 2 && point.z === undefined) {\n continue;\n }\n if (i === 0) {\n v = xin;\n if (\"ew\".indexOf(crs.axis[i]) !== -1) {\n t = 'x';\n } else {\n t = 'y';\n }\n\n }\n else if (i === 1) {\n v = yin;\n if (\"ns\".indexOf(crs.axis[i]) !== -1) {\n t = 'y';\n } else {\n t = 'x';\n }\n }\n else {\n v = zin;\n t = 'z';\n }\n switch (crs.axis[i]) {\n case 'e':\n case 'w':\n case 'n':\n case 's':\n out[t] = v;\n break;\n case 'u':\n if (point[t] !== undefined) {\n out.z = v;\n }\n break;\n case 'd':\n if (point[t] !== undefined) {\n out.z = -v;\n }\n break;\n default:\n //console.log(\"ERROR: unknow axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n return null;\n }\n }\n return out;\n}\n","export default function (array){\n var out = {\n x: array[0],\n y: array[1]\n };\n if (array.length>2) {\n out.z = array[2];\n }\n if (array.length>3) {\n out.m = array[3];\n }\n return out;\n}","export default function (point) {\n checkCoord(point.x);\n checkCoord(point.y);\n}\nfunction checkCoord(num) {\n if (typeof Number.isFinite === 'function') {\n if (Number.isFinite(num)) {\n return;\n }\n throw new TypeError('coordinates must be finite numbers');\n }\n if (typeof num !== 'number' || num !== num || !isFinite(num)) {\n throw new TypeError('coordinates must be finite numbers');\n }\n}\n","import {D2R, R2D, PJD_3PARAM, PJD_7PARAM} from './constants/values';\nimport datum_transform from './datum_transform';\nimport adjust_axis from './adjust_axis';\nimport proj from './Proj';\nimport toPoint from './common/toPoint';\nimport checkSanity from './checkSanity';\n\nfunction checkNotWGS(source, dest) {\n return ((source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM) && dest.datumCode !== 'WGS84') || ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM) && source.datumCode !== 'WGS84');\n}\n\nexport default function transform(source, dest, point) {\n var wgs84;\n if (Array.isArray(point)) {\n point = toPoint(point);\n }\n checkSanity(point);\n // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n if (source.datum && dest.datum && checkNotWGS(source, dest)) {\n wgs84 = new proj('WGS84');\n point = transform(source, wgs84, point);\n source = wgs84;\n }\n // DGR, 2010/11/12\n if (source.axis !== 'enu') {\n point = adjust_axis(source, false, point);\n }\n // Transform source points to long/lat, if they aren't already.\n if (source.projName === 'longlat') {\n point = {\n x: point.x * D2R,\n y: point.y * D2R,\n z: point.z || 0\n };\n } else {\n if (source.to_meter) {\n point = {\n x: point.x * source.to_meter,\n y: point.y * source.to_meter,\n z: point.z || 0\n };\n }\n point = source.inverse(point); // Convert Cartesian to longlat\n if (!point) {\n return;\n }\n }\n // Adjust for the prime meridian if necessary\n if (source.from_greenwich) {\n point.x += source.from_greenwich;\n }\n\n // Convert datums if needed, and if possible.\n point = datum_transform(source.datum, dest.datum, point);\n\n // Adjust for the prime meridian if necessary\n if (dest.from_greenwich) {\n point = {\n x: point.x - dest.from_greenwich,\n y: point.y,\n z: point.z || 0\n };\n }\n\n if (dest.projName === 'longlat') {\n // convert radians to decimal degrees\n point = {\n x: point.x * R2D,\n y: point.y * R2D,\n z: point.z || 0\n };\n } else { // else project\n point = dest.forward(point);\n if (dest.to_meter) {\n point = {\n x: point.x / dest.to_meter,\n y: point.y / dest.to_meter,\n z: point.z || 0\n };\n }\n }\n\n // DGR, 2010/11/12\n if (dest.axis !== 'enu') {\n return adjust_axis(dest, true, point);\n }\n\n return point;\n}\n","import proj from './Proj';\nimport transform from './transform';\nvar wgs84 = proj('WGS84');\n\nfunction transformer(from, to, coords) {\n var transformedArray, out, keys;\n if (Array.isArray(coords)) {\n transformedArray = transform(from, to, coords) || {x: NaN, y: NaN};\n if (coords.length > 2) {\n if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n if (typeof transformedArray.z === 'number') {\n return [transformedArray.x, transformedArray.y, transformedArray.z].concat(coords.splice(3));\n } else {\n return [transformedArray.x, transformedArray.y, coords[2]].concat(coords.splice(3));\n }\n } else {\n return [transformedArray.x, transformedArray.y].concat(coords.splice(2));\n }\n } else {\n return [transformedArray.x, transformedArray.y];\n }\n } else {\n out = transform(from, to, coords);\n keys = Object.keys(coords);\n if (keys.length === 2) {\n return out;\n }\n keys.forEach(function (key) {\n if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {\n if (key === 'x' || key === 'y' || key === 'z') {\n return;\n }\n } else {\n if (key === 'x' || key === 'y') {\n return;\n }\n }\n out[key] = coords[key];\n });\n return out;\n }\n}\n\nfunction checkProj(item) {\n if (item instanceof proj) {\n return item;\n }\n if (item.oProj) {\n return item.oProj;\n }\n return proj(item);\n}\n\nfunction proj4(fromProj, toProj, coord) {\n fromProj = checkProj(fromProj);\n var single = false;\n var obj;\n if (typeof toProj === 'undefined') {\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n } else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {\n coord = toProj;\n toProj = fromProj;\n fromProj = wgs84;\n single = true;\n }\n toProj = checkProj(toProj);\n if (coord) {\n return transformer(fromProj, toProj, coord);\n } else {\n obj = {\n forward: function (coords) {\n return transformer(fromProj, toProj, coords);\n },\n inverse: function (coords) {\n return transformer(toProj, fromProj, coords);\n }\n };\n if (single) {\n obj.oProj = toProj;\n }\n return obj;\n }\n}\nexport default proj4;","\n\n\n/**\n * UTM zones are grouped, and assigned to one of a group of 6\n * sets.\n *\n * {int} @private\n */\nvar NUM_100K_SETS = 6;\n\n/**\n * The column letters (for easting) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n/**\n * The row letters (for northing) of the lower left value, per\n * set.\n *\n * {string} @private\n */\nvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\nvar A = 65; // A\nvar I = 73; // I\nvar O = 79; // O\nvar V = 86; // V\nvar Z = 90; // Z\nexport default {\n forward: forward,\n inverse: inverse,\n toPoint: toPoint\n};\n/**\n * Conversion of lat/lon to MGRS.\n *\n * @param {object} ll Object literal with lat and lon properties on a\n * WGS84 ellipsoid.\n * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n * 100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.\n * @return {string} the MGRS string for the given location and accuracy.\n */\nexport function forward(ll, accuracy) {\n accuracy = accuracy || 5; // default accuracy 1m\n return encode(LLtoUTM({\n lat: ll[1],\n lon: ll[0]\n }), accuracy);\n};\n\n/**\n * Conversion of MGRS to lat/lon.\n *\n * @param {string} mgrs MGRS string.\n * @return {array} An array with left (longitude), bottom (latitude), right\n * (longitude) and top (latitude) values in WGS84, representing the\n * bounding box for the provided MGRS reference.\n */\nexport function inverse(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n if (bbox.lat && bbox.lon) {\n return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];\n }\n return [bbox.left, bbox.bottom, bbox.right, bbox.top];\n};\n\nexport function toPoint(mgrs) {\n var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n if (bbox.lat && bbox.lon) {\n return [bbox.lon, bbox.lat];\n }\n return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];\n};\n/**\n * Conversion from degrees to radians.\n *\n * @private\n * @param {number} deg the angle in degrees.\n * @return {number} the angle in radians.\n */\nfunction degToRad(deg) {\n return (deg * (Math.PI / 180.0));\n}\n\n/**\n * Conversion from radians to degrees.\n *\n * @private\n * @param {number} rad the angle in radians.\n * @return {number} the angle in degrees.\n */\nfunction radToDeg(rad) {\n return (180.0 * (rad / Math.PI));\n}\n\n/**\n * Converts a set of Longitude and Latitude co-ordinates to UTM\n * using the WGS84 ellipsoid.\n *\n * @private\n * @param {object} ll Object literal with lat and lon properties\n * representing the WGS84 coordinate to be converted.\n * @return {object} Object literal containing the UTM value with easting,\n * northing, zoneNumber and zoneLetter properties, and an optional\n * accuracy property in digits. Returns null if the conversion failed.\n */\nfunction LLtoUTM(ll) {\n var Lat = ll.lat;\n var Long = ll.lon;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var k0 = 0.9996;\n var LongOrigin;\n var eccPrimeSquared;\n var N, T, C, A, M;\n var LatRad = degToRad(Lat);\n var LongRad = degToRad(Long);\n var LongOriginRad;\n var ZoneNumber;\n // (int)\n ZoneNumber = Math.floor((Long + 180) / 6) + 1;\n\n //Make sure the longitude 180.00 is in Zone 60\n if (Long === 180) {\n ZoneNumber = 60;\n }\n\n // Special zone for Norway\n if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {\n ZoneNumber = 32;\n }\n\n // Special zones for Svalbard\n if (Lat >= 72.0 && Lat < 84.0) {\n if (Long >= 0.0 && Long < 9.0) {\n ZoneNumber = 31;\n }\n else if (Long >= 9.0 && Long < 21.0) {\n ZoneNumber = 33;\n }\n else if (Long >= 21.0 && Long < 33.0) {\n ZoneNumber = 35;\n }\n else if (Long >= 33.0 && Long < 42.0) {\n ZoneNumber = 37;\n }\n }\n\n LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin\n // in middle of\n // zone\n LongOriginRad = degToRad(LongOrigin);\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));\n T = Math.tan(LatRad) * Math.tan(LatRad);\n C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);\n A = Math.cos(LatRad) * (LongRad - LongOriginRad);\n\n M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));\n\n var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);\n\n var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));\n if (Lat < 0.0) {\n UTMNorthing += 10000000.0; //10000000 meter offset for\n // southern hemisphere\n }\n\n return {\n northing: Math.round(UTMNorthing),\n easting: Math.round(UTMEasting),\n zoneNumber: ZoneNumber,\n zoneLetter: getLetterDesignator(Lat)\n };\n}\n\n/**\n * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience\n * class where the Zone can be specified as a single string eg.\"60N\" which\n * is then broken down into the ZoneNumber and ZoneLetter.\n *\n * @private\n * @param {object} utm An object literal with northing, easting, zoneNumber\n * and zoneLetter properties. If an optional accuracy property is\n * provided (in meters), a bounding box will be returned instead of\n * latitude and longitude.\n * @return {object} An object literal containing either lat and lon values\n * (if no accuracy was provided), or top, right, bottom and left values\n * for the bounding box calculated according to the provided accuracy.\n * Returns null if the conversion failed.\n */\nfunction UTMtoLL(utm) {\n\n var UTMNorthing = utm.northing;\n var UTMEasting = utm.easting;\n var zoneLetter = utm.zoneLetter;\n var zoneNumber = utm.zoneNumber;\n // check the ZoneNummber is valid\n if (zoneNumber < 0 || zoneNumber > 60) {\n return null;\n }\n\n var k0 = 0.9996;\n var a = 6378137.0; //ellip.radius;\n var eccSquared = 0.00669438; //ellip.eccsq;\n var eccPrimeSquared;\n var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));\n var N1, T1, C1, R1, D, M;\n var LongOrigin;\n var mu, phi1Rad;\n\n // remove 500,000 meter offset for longitude\n var x = UTMEasting - 500000.0;\n var y = UTMNorthing;\n\n // We must know somehow if we are in the Northern or Southern\n // hemisphere, this is the only time we use the letter So even\n // if the Zone letter isn't exactly correct it should indicate\n // the hemisphere correctly\n if (zoneLetter < 'N') {\n y -= 10000000.0; // remove 10,000,000 meter offset used\n // for southern hemisphere\n }\n\n // There are 60 zones with zone 1 being at West -180 to -174\n LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin\n // in middle of\n // zone\n\n eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n M = y / k0;\n mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));\n\n phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);\n // double phi1 = ProjMath.radToDeg(phi1Rad);\n\n N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));\n T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);\n C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);\n R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);\n D = x / (N1 * k0);\n\n var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);\n lat = radToDeg(lat);\n\n var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);\n lon = LongOrigin + radToDeg(lon);\n\n var result;\n if (utm.accuracy) {\n var topRight = UTMtoLL({\n northing: utm.northing + utm.accuracy,\n easting: utm.easting + utm.accuracy,\n zoneLetter: utm.zoneLetter,\n zoneNumber: utm.zoneNumber\n });\n result = {\n top: topRight.lat,\n right: topRight.lon,\n bottom: lat,\n left: lon\n };\n }\n else {\n result = {\n lat: lat,\n lon: lon\n };\n }\n return result;\n}\n\n/**\n * Calculates the MGRS letter designator for the given latitude.\n *\n * @private\n * @param {number} lat The latitude in WGS84 to get the letter designator\n * for.\n * @return {char} The letter designator.\n */\nfunction getLetterDesignator(lat) {\n //This is here as an error flag to show that the Latitude is\n //outside MGRS limits\n var LetterDesignator = 'Z';\n\n if ((84 >= lat) && (lat >= 72)) {\n LetterDesignator = 'X';\n }\n else if ((72 > lat) && (lat >= 64)) {\n LetterDesignator = 'W';\n }\n else if ((64 > lat) && (lat >= 56)) {\n LetterDesignator = 'V';\n }\n else if ((56 > lat) && (lat >= 48)) {\n LetterDesignator = 'U';\n }\n else if ((48 > lat) && (lat >= 40)) {\n LetterDesignator = 'T';\n }\n else if ((40 > lat) && (lat >= 32)) {\n LetterDesignator = 'S';\n }\n else if ((32 > lat) && (lat >= 24)) {\n LetterDesignator = 'R';\n }\n else if ((24 > lat) && (lat >= 16)) {\n LetterDesignator = 'Q';\n }\n else if ((16 > lat) && (lat >= 8)) {\n LetterDesignator = 'P';\n }\n else if ((8 > lat) && (lat >= 0)) {\n LetterDesignator = 'N';\n }\n else if ((0 > lat) && (lat >= -8)) {\n LetterDesignator = 'M';\n }\n else if ((-8 > lat) && (lat >= -16)) {\n LetterDesignator = 'L';\n }\n else if ((-16 > lat) && (lat >= -24)) {\n LetterDesignator = 'K';\n }\n else if ((-24 > lat) && (lat >= -32)) {\n LetterDesignator = 'J';\n }\n else if ((-32 > lat) && (lat >= -40)) {\n LetterDesignator = 'H';\n }\n else if ((-40 > lat) && (lat >= -48)) {\n LetterDesignator = 'G';\n }\n else if ((-48 > lat) && (lat >= -56)) {\n LetterDesignator = 'F';\n }\n else if ((-56 > lat) && (lat >= -64)) {\n LetterDesignator = 'E';\n }\n else if ((-64 > lat) && (lat >= -72)) {\n LetterDesignator = 'D';\n }\n else if ((-72 > lat) && (lat >= -80)) {\n LetterDesignator = 'C';\n }\n return LetterDesignator;\n}\n\n/**\n * Encodes a UTM location as MGRS string.\n *\n * @private\n * @param {object} utm An object literal with easting, northing,\n * zoneLetter, zoneNumber\n * @param {number} accuracy Accuracy in digits (1-5).\n * @return {string} MGRS string for the given UTM location.\n */\nfunction encode(utm, accuracy) {\n // prepend with leading zeroes\n var seasting = \"00000\" + utm.easting,\n snorthing = \"00000\" + utm.northing;\n\n return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);\n}\n\n/**\n * Get the two letter 100k designator for a given UTM easting,\n * northing and zone number value.\n *\n * @private\n * @param {number} easting\n * @param {number} northing\n * @param {number} zoneNumber\n * @return the two letter 100k designator for the given UTM location.\n */\nfunction get100kID(easting, northing, zoneNumber) {\n var setParm = get100kSetForZone(zoneNumber);\n var setColumn = Math.floor(easting / 100000);\n var setRow = Math.floor(northing / 100000) % 20;\n return getLetter100kID(setColumn, setRow, setParm);\n}\n\n/**\n * Given a UTM zone number, figure out the MGRS 100K set it is in.\n *\n * @private\n * @param {number} i An UTM zone number.\n * @return {number} the 100k set the UTM zone is in.\n */\nfunction get100kSetForZone(i) {\n var setParm = i % NUM_100K_SETS;\n if (setParm === 0) {\n setParm = NUM_100K_SETS;\n }\n\n return setParm;\n}\n\n/**\n * Get the two-letter MGRS 100k designator given information\n * translated from the UTM northing, easting and zone number.\n *\n * @private\n * @param {number} column the column index as it relates to the MGRS\n * 100k set spreadsheet, created from the UTM easting.\n * Values are 1-8.\n * @param {number} row the row index as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM northing value. Values\n * are from 0-19.\n * @param {number} parm the set block, as it relates to the MGRS 100k set\n * spreadsheet, created from the UTM zone. Values are from\n * 1-60.\n * @return two letter MGRS 100k code.\n */\nfunction getLetter100kID(column, row, parm) {\n // colOrigin and rowOrigin are the letters at the origin of the set\n var index = parm - 1;\n var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);\n var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);\n\n // colInt and rowInt are the letters to build to return\n var colInt = colOrigin + column - 1;\n var rowInt = rowOrigin + row;\n var rollover = false;\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n rollover = true;\n }\n\n if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {\n colInt++;\n }\n\n if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {\n colInt++;\n\n if (colInt === I) {\n colInt++;\n }\n }\n\n if (colInt > Z) {\n colInt = colInt - Z + A - 1;\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n rollover = true;\n }\n else {\n rollover = false;\n }\n\n if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {\n rowInt++;\n }\n\n if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {\n rowInt++;\n\n if (rowInt === I) {\n rowInt++;\n }\n }\n\n if (rowInt > V) {\n rowInt = rowInt - V + A - 1;\n }\n\n var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);\n return twoLetter;\n}\n\n/**\n * Decode the UTM parameters from a MGRS string.\n *\n * @private\n * @param {string} mgrsString an UPPERCASE coordinate string is expected.\n * @return {object} An object literal with easting, northing, zoneLetter,\n * zoneNumber and accuracy (in meters) properties.\n */\nfunction decode(mgrsString) {\n\n if (mgrsString && mgrsString.length === 0) {\n throw (\"MGRSPoint coverting from nothing\");\n }\n\n var length = mgrsString.length;\n\n var hunK = null;\n var sb = \"\";\n var testChar;\n var i = 0;\n\n // get Zone number\n while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {\n if (i >= 2) {\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n sb += testChar;\n i++;\n }\n\n var zoneNumber = parseInt(sb, 10);\n\n if (i === 0 || i + 3 > length) {\n // A good MGRS string has to be 4-5 digits long,\n // ##AAA/#AAA at least.\n throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n }\n\n var zoneLetter = mgrsString.charAt(i++);\n\n // Should we check the zone letter here? Why not.\n if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {\n throw (\"MGRSPoint zone letter \" + zoneLetter + \" not handled: \" + mgrsString);\n }\n\n hunK = mgrsString.substring(i, i += 2);\n\n var set = get100kSetForZone(zoneNumber);\n\n var east100k = getEastingFromChar(hunK.charAt(0), set);\n var north100k = getNorthingFromChar(hunK.charAt(1), set);\n\n // We have a bug where the northing may be 2000000 too low.\n // How\n // do we know when to roll over?\n\n while (north100k < getMinNorthing(zoneLetter)) {\n north100k += 2000000;\n }\n\n // calculate the char index for easting/northing separator\n var remainder = length - i;\n\n if (remainder % 2 !== 0) {\n throw (\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\" + mgrsString);\n }\n\n var sep = remainder / 2;\n\n var sepEasting = 0.0;\n var sepNorthing = 0.0;\n var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;\n if (sep > 0) {\n accuracyBonus = 100000.0 / Math.pow(10, sep);\n sepEastingString = mgrsString.substring(i, i + sep);\n sepEasting = parseFloat(sepEastingString) * accuracyBonus;\n sepNorthingString = mgrsString.substring(i + sep);\n sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;\n }\n\n easting = sepEasting + east100k;\n northing = sepNorthing + north100k;\n\n return {\n easting: easting,\n northing: northing,\n zoneLetter: zoneLetter,\n zoneNumber: zoneNumber,\n accuracy: accuracyBonus\n };\n}\n\n/**\n * Given the first letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the easting value that\n * should be added to the other, secondary easting value.\n *\n * @private\n * @param {char} e The first letter from a two-letter MGRS 100´k zone.\n * @param {number} set The MGRS table set for the zone number.\n * @return {number} The easting value for the given letter and set.\n */\nfunction getEastingFromChar(e, set) {\n // colOrigin is the letter at the origin of the set for the\n // column\n var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);\n var eastingValue = 100000.0;\n var rewindMarker = false;\n\n while (curCol !== e.charCodeAt(0)) {\n curCol++;\n if (curCol === I) {\n curCol++;\n }\n if (curCol === O) {\n curCol++;\n }\n if (curCol > Z) {\n if (rewindMarker) {\n throw (\"Bad character: \" + e);\n }\n curCol = A;\n rewindMarker = true;\n }\n eastingValue += 100000.0;\n }\n\n return eastingValue;\n}\n\n/**\n * Given the second letter from a two-letter MGRS 100k zone, and given the\n * MGRS table set for the zone number, figure out the northing value that\n * should be added to the other, secondary northing value. You have to\n * remember that Northings are determined from the equator, and the vertical\n * cycle of letters mean a 2000000 additional northing meters. This happens\n * approx. every 18 degrees of latitude. This method does *NOT* count any\n * additional northings. You have to figure out how many 2000000 meters need\n * to be added for the zone letter of the MGRS coordinate.\n *\n * @private\n * @param {char} n Second letter of the MGRS 100k zone\n * @param {number} set The MGRS table set number, which is dependent on the\n * UTM zone number.\n * @return {number} The northing value for the given letter and set.\n */\nfunction getNorthingFromChar(n, set) {\n\n if (n > 'V') {\n throw (\"MGRSPoint given invalid Northing \" + n);\n }\n\n // rowOrigin is the letter at the origin of the set for the\n // column\n var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);\n var northingValue = 0.0;\n var rewindMarker = false;\n\n while (curRow !== n.charCodeAt(0)) {\n curRow++;\n if (curRow === I) {\n curRow++;\n }\n if (curRow === O) {\n curRow++;\n }\n // fixing a bug making whole application hang in this loop\n // when 'n' is a wrong character\n if (curRow > V) {\n if (rewindMarker) { // making sure that this loop ends\n throw (\"Bad character: \" + n);\n }\n curRow = A;\n rewindMarker = true;\n }\n northingValue += 100000.0;\n }\n\n return northingValue;\n}\n\n/**\n * The function getMinNorthing returns the minimum northing value of a MGRS\n * zone.\n *\n * Ported from Geotrans' c Lattitude_Band_Value structure table.\n *\n * @private\n * @param {char} zoneLetter The MGRS zone to get the min northing for.\n * @return {number}\n */\nfunction getMinNorthing(zoneLetter) {\n var northing;\n switch (zoneLetter) {\n case 'C':\n northing = 1100000.0;\n break;\n case 'D':\n northing = 2000000.0;\n break;\n case 'E':\n northing = 2800000.0;\n break;\n case 'F':\n northing = 3700000.0;\n break;\n case 'G':\n northing = 4600000.0;\n break;\n case 'H':\n northing = 5500000.0;\n break;\n case 'J':\n northing = 6400000.0;\n break;\n case 'K':\n northing = 7300000.0;\n break;\n case 'L':\n northing = 8200000.0;\n break;\n case 'M':\n northing = 9100000.0;\n break;\n case 'N':\n northing = 0.0;\n break;\n case 'P':\n northing = 800000.0;\n break;\n case 'Q':\n northing = 1700000.0;\n break;\n case 'R':\n northing = 2600000.0;\n break;\n case 'S':\n northing = 3500000.0;\n break;\n case 'T':\n northing = 4400000.0;\n break;\n case 'U':\n northing = 5300000.0;\n break;\n case 'V':\n northing = 6200000.0;\n break;\n case 'W':\n northing = 7000000.0;\n break;\n case 'X':\n northing = 7900000.0;\n break;\n default:\n northing = -1.0;\n }\n if (northing >= 0.0) {\n return northing;\n }\n else {\n throw (\"Invalid zone letter: \" + zoneLetter);\n }\n\n}\n","import {toPoint, forward} from 'mgrs';\n\nfunction Point(x, y, z) {\n if (!(this instanceof Point)) {\n return new Point(x, y, z);\n }\n if (Array.isArray(x)) {\n this.x = x[0];\n this.y = x[1];\n this.z = x[2] || 0.0;\n } else if(typeof x === 'object') {\n this.x = x.x;\n this.y = x.y;\n this.z = x.z || 0.0;\n } else if (typeof x === 'string' && typeof y === 'undefined') {\n var coords = x.split(',');\n this.x = parseFloat(coords[0], 10);\n this.y = parseFloat(coords[1], 10);\n this.z = parseFloat(coords[2], 10) || 0.0;\n } else {\n this.x = x;\n this.y = y;\n this.z = z || 0.0;\n }\n console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');\n}\n\nPoint.fromMGRS = function(mgrsStr) {\n return new Point(toPoint(mgrsStr));\n};\nPoint.prototype.toMGRS = function(accuracy) {\n return forward([this.x, this.y], accuracy);\n};\nexport default Point;\n","var C00 = 1;\nvar C02 = 0.25;\nvar C04 = 0.046875;\nvar C06 = 0.01953125;\nvar C08 = 0.01068115234375;\nvar C22 = 0.75;\nvar C44 = 0.46875;\nvar C46 = 0.01302083333333333333;\nvar C48 = 0.00712076822916666666;\nvar C66 = 0.36458333333333333333;\nvar C68 = 0.00569661458333333333;\nvar C88 = 0.3076171875;\n\nexport default function(es) {\n var en = [];\n en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));\n en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));\n var t = es * es;\n en[2] = t * (C44 - es * (C46 + es * C48));\n t *= es;\n en[3] = t * (C66 - es * C68);\n en[4] = t * es * C88;\n return en;\n}","export default function(phi, sphi, cphi, en) {\n cphi *= sphi;\n sphi *= sphi;\n return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));\n}","import pj_mlfn from \"./pj_mlfn\";\nimport {EPSLN} from '../constants/values';\n\nvar MAX_ITER = 20;\n\nexport default function(arg, es, en) {\n var k = 1 / (1 - es);\n var phi = arg;\n for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */\n var s = Math.sin(phi);\n var t = 1 - es * s * s;\n //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;\n //phi -= t * (t * Math.sqrt(t)) * k;\n t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;\n phi -= t;\n if (Math.abs(t) < EPSLN) {\n return phi;\n }\n }\n //..reportError(\"cass:pj_inv_mlfn: Convergence error\");\n return phi;\n}\n","// Heavily based on this tmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js\n\nimport pj_enfn from '../common/pj_enfn';\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport adjust_lon from '../common/adjust_lon';\n\nimport {EPSLN, HALF_PI} from '../constants/values';\nimport sign from '../common/sign';\n\nexport function init() {\n this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n if (this.es) {\n this.en = pj_enfn(this.es);\n this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);\n }\n}\n\n/**\n Transverse Mercator Forward - long/lat to x/y\n long/lat in radians\n */\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var con;\n var x, y;\n var sin_phi = Math.sin(lat);\n var cos_phi = Math.cos(lat);\n\n if (!this.es) {\n var b = cos_phi * Math.sin(delta_lon);\n\n if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {\n return (93);\n }\n else {\n x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;\n y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));\n b = Math.abs(y);\n\n if (b >= 1) {\n if ((b - 1) > EPSLN) {\n return (93);\n }\n else {\n y = 0;\n }\n }\n else {\n y = Math.acos(y);\n }\n\n if (lat < 0) {\n y = -y;\n }\n\n y = this.a * this.k0 * (y - this.lat0) + this.y0;\n }\n }\n else {\n var al = cos_phi * delta_lon;\n var als = Math.pow(al, 2);\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var cs = Math.pow(c, 2);\n var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;\n var t = Math.pow(tq, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n al = al / Math.sqrt(con);\n var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);\n\n x = this.a * (this.k0 * al * (1 +\n als / 6 * (1 - t + c +\n als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +\n als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +\n this.x0;\n\n y = this.a * (this.k0 * (ml - this.ml0 +\n sin_phi * delta_lon * al / 2 * (1 +\n als / 12 * (5 - t + 9 * c + 4 * cs +\n als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +\n als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +\n this.y0;\n }\n\n p.x = x;\n p.y = y;\n\n return p;\n}\n\n/**\n Transverse Mercator Inverse - x/y to long/lat\n */\nexport function inverse(p) {\n var con, phi;\n var lat, lon;\n var x = (p.x - this.x0) * (1 / this.a);\n var y = (p.y - this.y0) * (1 / this.a);\n\n if (!this.es) {\n var f = Math.exp(x / this.k0);\n var g = 0.5 * (f - 1 / f);\n var temp = this.lat0 + y / this.k0;\n var h = Math.cos(temp);\n con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));\n lat = Math.asin(con);\n\n if (y < 0) {\n lat = -lat;\n }\n\n if ((g === 0) && (h === 0)) {\n lon = 0;\n }\n else {\n lon = adjust_lon(Math.atan2(g, h) + this.long0);\n }\n }\n else { // ellipsoidal form\n con = this.ml0 + y / this.k0;\n phi = pj_inv_mlfn(con, this.es, this.en);\n\n if (Math.abs(phi) < HALF_PI) {\n var sin_phi = Math.sin(phi);\n var cos_phi = Math.cos(phi);\n var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;\n var c = this.ep2 * Math.pow(cos_phi, 2);\n var cs = Math.pow(c, 2);\n var t = Math.pow(tan_phi, 2);\n var ts = Math.pow(t, 2);\n con = 1 - this.es * Math.pow(sin_phi, 2);\n var d = x * Math.sqrt(con) / this.k0;\n var ds = Math.pow(d, 2);\n con = con * tan_phi;\n\n lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -\n ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -\n ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -\n ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));\n\n lon = adjust_lon(this.long0 + (d * (1 -\n ds / 6 * (1 + 2 * t + c -\n ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -\n ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));\n }\n else {\n lat = HALF_PI * sign(y);\n lon = 0;\n }\n }\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"Transverse_Mercator\", \"Transverse Mercator\", \"tmerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(x) {\n var r = Math.exp(x);\n r = (r - 1 / r) / 2;\n return r;\n}","export default function(x, y) {\n x = Math.abs(x);\n y = Math.abs(y);\n var a = Math.max(x, y);\n var b = Math.min(x, y) / (a ? a : 1);\n\n return a * Math.sqrt(1 + Math.pow(b, 2));\n}\n","import hypot from './hypot';\nimport log1py from './log1py';\n\nexport default function(x) {\n var y = Math.abs(x);\n y = log1py(y * (1 + y / (hypot(1, y) + 1)));\n\n return x < 0 ? -y : y;\n}\n","export default function(x) {\n var y = 1 + x;\n var z = y - 1;\n\n return z === 0 ? x : x * Math.log(y) / z;\n}\n","export default function(pp, B) {\n var cos_2B = 2 * Math.cos(2 * B);\n var i = pp.length - 1;\n var h1 = pp[i];\n var h2 = 0;\n var h;\n\n while (--i >= 0) {\n h = -h2 + cos_2B * h1 + pp[i];\n h2 = h1;\n h1 = h;\n }\n\n return (B + h * Math.sin(2 * B));\n}\n","import sinh from './sinh';\nimport cosh from './cosh';\n\nexport default function(pp, arg_r, arg_i) {\n var sin_arg_r = Math.sin(arg_r);\n var cos_arg_r = Math.cos(arg_r);\n var sinh_arg_i = sinh(arg_i);\n var cosh_arg_i = cosh(arg_i);\n var r = 2 * cos_arg_r * cosh_arg_i;\n var i = -2 * sin_arg_r * sinh_arg_i;\n var j = pp.length - 1;\n var hr = pp[j];\n var hi1 = 0;\n var hr1 = 0;\n var hi = 0;\n var hr2;\n var hi2;\n\n while (--j >= 0) {\n hr2 = hr1;\n hi2 = hi1;\n hr1 = hr;\n hi1 = hi;\n hr = -hr2 + r * hr1 - i * hi1 + pp[j];\n hi = -hi2 + i * hr1 + r * hi1;\n }\n\n r = sin_arg_r * cosh_arg_i;\n i = cos_arg_r * sinh_arg_i;\n\n return [r * hr - i * hi, r * hi + i * hr];\n}\n","export default function(x) {\n var r = Math.exp(x);\n r = (r + 1 / r) / 2;\n return r;\n}","// Heavily based on this etmerc projection implementation\n// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js\n\nimport sinh from '../common/sinh';\nimport hypot from '../common/hypot';\nimport asinhy from '../common/asinhy';\nimport gatg from '../common/gatg';\nimport clens from '../common/clens';\nimport clens_cmplx from '../common/clens_cmplx';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n if (this.es === undefined || this.es <= 0) {\n throw new Error('incorrect elliptical usage');\n }\n\n this.x0 = this.x0 !== undefined ? this.x0 : 0;\n this.y0 = this.y0 !== undefined ? this.y0 : 0;\n this.long0 = this.long0 !== undefined ? this.long0 : 0;\n this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n this.cgb = [];\n this.cbg = [];\n this.utg = [];\n this.gtu = [];\n\n var f = this.es / (1 + Math.sqrt(1 - this.es));\n var n = f / (2 - f);\n var np = n;\n\n this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));\n this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));\n\n np = np * n;\n this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));\n this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));\n\n np = np * n;\n this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));\n this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));\n\n np = np * n;\n this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));\n this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));\n\n np = np * n;\n this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));\n this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));\n\n np = np * n;\n this.cgb[5] = np * (601676 / 22275);\n this.cbg[5] = np * (444337 / 155925);\n\n np = Math.pow(n, 2);\n this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));\n\n this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));\n this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));\n\n this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));\n this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));\n\n np = np * n;\n this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));\n this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));\n\n np = np * n;\n this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));\n this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));\n\n np = np * n;\n this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));\n this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));\n\n np = np * n;\n this.utg[5] = np * (-20648693 / 638668800);\n this.gtu[5] = np * (212378941 / 319334400);\n\n var Z = gatg(this.cbg, this.lat0);\n this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));\n}\n\nexport function forward(p) {\n var Ce = adjust_lon(p.x - this.long0);\n var Cn = p.y;\n\n Cn = gatg(this.cbg, Cn);\n var sin_Cn = Math.sin(Cn);\n var cos_Cn = Math.cos(Cn);\n var sin_Ce = Math.sin(Ce);\n var cos_Ce = Math.cos(Ce);\n\n Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);\n Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));\n Ce = asinhy(Math.tan(Ce));\n\n var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);\n\n Cn = Cn + tmp[0];\n Ce = Ce + tmp[1];\n\n var x;\n var y;\n\n if (Math.abs(Ce) <= 2.623395162778) {\n x = this.a * (this.Qn * Ce) + this.x0;\n y = this.a * (this.Qn * Cn + this.Zb) + this.y0;\n }\n else {\n x = Infinity;\n y = Infinity;\n }\n\n p.x = x;\n p.y = y;\n\n return p;\n}\n\nexport function inverse(p) {\n var Ce = (p.x - this.x0) * (1 / this.a);\n var Cn = (p.y - this.y0) * (1 / this.a);\n\n Cn = (Cn - this.Zb) / this.Qn;\n Ce = Ce / this.Qn;\n\n var lon;\n var lat;\n\n if (Math.abs(Ce) <= 2.623395162778) {\n var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);\n\n Cn = Cn + tmp[0];\n Ce = Ce + tmp[1];\n Ce = Math.atan(sinh(Ce));\n\n var sin_Cn = Math.sin(Cn);\n var cos_Cn = Math.cos(Cn);\n var sin_Ce = Math.sin(Ce);\n var cos_Ce = Math.cos(Ce);\n\n Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));\n Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);\n\n lon = adjust_lon(Ce + this.long0);\n lat = gatg(this.cgb, Cn);\n }\n else {\n lon = Infinity;\n lat = Infinity;\n }\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"Extended_Transverse_Mercator\", \"Extended Transverse Mercator\", \"etmerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(pp, arg_r) {\n var r = 2 * Math.cos(arg_r);\n var i = pp.length - 1;\n var hr1 = pp[i];\n var hr2 = 0;\n var hr;\n\n while (--i >= 0) {\n hr = -hr2 + r * hr1 + pp[i];\n hr2 = hr1;\n hr1 = hr;\n }\n\n return Math.sin(arg_r) * hr;\n}\n","import adjust_zone from '../common/adjust_zone';\nimport etmerc from './etmerc';\nexport var dependsOn = 'etmerc';\nimport {D2R} from '../constants/values';\n\n\nexport function init() {\n var zone = adjust_zone(this.zone, this.long0);\n if (zone === undefined) {\n throw new Error('unknown utm zone');\n }\n this.lat0 = 0;\n this.long0 = ((6 * Math.abs(zone)) - 183) * D2R;\n this.x0 = 500000;\n this.y0 = this.utmSouth ? 10000000 : 0;\n this.k0 = 0.9996;\n\n etmerc.init.apply(this);\n this.forward = etmerc.forward;\n this.inverse = etmerc.inverse;\n}\n\nexport var names = [\"Universal Transverse Mercator System\", \"utm\"];\nexport default {\n init: init,\n names: names,\n dependsOn: dependsOn\n};\n","import adjust_lon from './adjust_lon';\n\nexport default function(zone, lon) {\n if (zone === undefined) {\n zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;\n\n if (zone < 0) {\n return 0;\n } else if (zone > 60) {\n return 60;\n }\n }\n return zone;\n}\n","export default function(esinp, exp) {\n return (Math.pow((1 - esinp) / (1 + esinp), exp));\n}","import srat from '../common/srat';\nvar MAX_ITER = 20;\nimport {HALF_PI, FORTPI} from '../constants/values';\n\nexport function init() {\n var sphi = Math.sin(this.lat0);\n var cphi = Math.cos(this.lat0);\n cphi *= cphi;\n this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);\n this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));\n this.phic0 = Math.asin(sphi / this.C);\n this.ratexp = 0.5 * this.C * this.e;\n this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));\n}\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n\n p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;\n p.x = this.C * lon;\n return p;\n}\n\nexport function inverse(p) {\n var DEL_TOL = 1e-14;\n var lon = p.x / this.C;\n var lat = p.y;\n var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);\n for (var i = MAX_ITER; i > 0; --i) {\n lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;\n if (Math.abs(lat - p.y) < DEL_TOL) {\n break;\n }\n p.y = lat;\n }\n /* convergence failed */\n if (!i) {\n return null;\n }\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"gauss\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import gauss from './gauss';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n gauss.init.apply(this);\n if (!this.rc) {\n return;\n }\n this.sinc0 = Math.sin(this.phic0);\n this.cosc0 = Math.cos(this.phic0);\n this.R2 = 2 * this.rc;\n if (!this.title) {\n this.title = \"Oblique Stereographic Alternative\";\n }\n}\n\nexport function forward(p) {\n var sinc, cosc, cosl, k;\n p.x = adjust_lon(p.x - this.long0);\n gauss.forward.apply(this, [p]);\n sinc = Math.sin(p.y);\n cosc = Math.cos(p.y);\n cosl = Math.cos(p.x);\n k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);\n p.x = k * cosc * Math.sin(p.x);\n p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);\n p.x = this.a * p.x + this.x0;\n p.y = this.a * p.y + this.y0;\n return p;\n}\n\nexport function inverse(p) {\n var sinc, cosc, lon, lat, rho;\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) {\n var c = 2 * Math.atan2(rho, this.R2);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);\n lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n gauss.inverse.apply(this, [p]);\n p.x = adjust_lon(p.x + this.long0);\n return p;\n}\n\nexport var names = [\"Stereographic_North_Pole\", \"Oblique_Stereographic\", \"Polar_Stereographic\", \"sterea\",\"Oblique Stereographic Alternative\",\"Double_Stereographic\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {EPSLN, HALF_PI} from '../constants/values';\n\nimport sign from '../common/sign';\nimport msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport phi2z from '../common/phi2z';\nimport adjust_lon from '../common/adjust_lon';\n\nexport function ssfn_(phit, sinphi, eccen) {\n sinphi *= eccen;\n return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));\n}\n\nexport function init() {\n this.coslat0 = Math.cos(this.lat0);\n this.sinlat0 = Math.sin(this.lat0);\n if (this.sphere) {\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));\n }\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (this.lat0 > 0) {\n //North pole\n //trace('stere:north pole');\n this.con = 1;\n }\n else {\n //South pole\n //trace('stere:south pole');\n this.con = -1;\n }\n }\n this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));\n if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));\n }\n this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);\n this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;\n this.cosX0 = Math.cos(this.X0);\n this.sinX0 = Math.sin(this.X0);\n }\n}\n\n// Stereographic forward equations--mapping lat,long to x,y\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var sinlat = Math.sin(lat);\n var coslat = Math.cos(lat);\n var A, X, sinX, cosX, ts, rh;\n var dlon = adjust_lon(lon - this.long0);\n\n if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {\n //case of the origine point\n //trace('stere:this is the origin point');\n p.x = NaN;\n p.y = NaN;\n return p;\n }\n if (this.sphere) {\n //trace('stere:sphere case');\n A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));\n p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;\n p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;\n return p;\n }\n else {\n X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;\n cosX = Math.cos(X);\n sinX = Math.sin(X);\n if (Math.abs(this.coslat0) <= EPSLN) {\n ts = tsfnz(this.e, lat * this.con, this.con * sinlat);\n rh = 2 * this.a * this.k0 * ts / this.cons;\n p.x = this.x0 + rh * Math.sin(lon - this.long0);\n p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);\n //trace(p.toString());\n return p;\n }\n else if (Math.abs(this.sinlat0) < EPSLN) {\n //Eq\n //trace('stere:equateur');\n A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));\n p.y = A * sinX;\n }\n else {\n //other case\n //trace('stere:normal case');\n A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));\n p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;\n }\n p.x = A * cosX * Math.sin(dlon) + this.x0;\n }\n //trace(p.toString());\n return p;\n}\n\n//* Stereographic inverse equations--mapping x,y to lat/long\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat, ts, ce, Chi;\n var rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (this.sphere) {\n var c = 2 * Math.atan(rh / (2 * this.a * this.k0));\n lon = this.long0;\n lat = this.lat0;\n if (rh <= EPSLN) {\n p.x = lon;\n p.y = lat;\n return p;\n }\n lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);\n if (Math.abs(this.coslat0) < EPSLN) {\n if (this.lat0 > 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n }\n }\n else {\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));\n }\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n if (Math.abs(this.coslat0) <= EPSLN) {\n if (rh <= EPSLN) {\n lat = this.lat0;\n lon = this.long0;\n p.x = lon;\n p.y = lat;\n //trace(p.toString());\n return p;\n }\n p.x *= this.con;\n p.y *= this.con;\n ts = rh * this.cons / (2 * this.a * this.k0);\n lat = this.con * phi2z(this.e, ts);\n lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));\n }\n else {\n ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));\n lon = this.long0;\n if (rh <= EPSLN) {\n Chi = this.X0;\n }\n else {\n Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);\n lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));\n }\n lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));\n }\n }\n p.x = lon;\n p.y = lat;\n\n //trace(p.toString());\n return p;\n\n}\n\nexport var names = [\"stere\", \"Stereographic_South_Pole\", \"Polar Stereographic (variant B)\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n ssfn_: ssfn_\n};\n","/*\n references:\n Formules et constantes pour le Calcul pour la\n projection cylindrique conforme à axe oblique et pour la transformation entre\n des systèmes de référence.\n http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf\n */\n\nexport function init() {\n var phy0 = this.lat0;\n this.lambda0 = this.long0;\n var sinPhy0 = Math.sin(phy0);\n var semiMajorAxis = this.a;\n var invF = this.rf;\n var flattening = 1 / invF;\n var e2 = 2 * flattening - Math.pow(flattening, 2);\n var e = this.e = Math.sqrt(e2);\n this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));\n this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));\n this.b0 = Math.asin(sinPhy0 / this.alpha);\n var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));\n var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));\n var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));\n this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;\n}\n\nexport function forward(p) {\n var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));\n var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));\n var S = -this.alpha * (Sa1 + Sa2) + this.K;\n\n // spheric latitude\n var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);\n\n // spheric longitude\n var I = this.alpha * (p.x - this.lambda0);\n\n // psoeudo equatorial rotation\n var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));\n\n var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));\n\n p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;\n p.x = this.R * rotI + this.x0;\n return p;\n}\n\nexport function inverse(p) {\n var Y = p.x - this.x0;\n var X = p.y - this.y0;\n\n var rotI = Y / this.R;\n var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);\n\n var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));\n var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));\n\n var lambda = this.lambda0 + I / this.alpha;\n\n var S = 0;\n var phy = b;\n var prevPhy = -1000;\n var iteration = 0;\n while (Math.abs(phy - prevPhy) > 0.0000001) {\n if (++iteration > 20) {\n //...reportError(\"omercFwdInfinity\");\n return;\n }\n //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));\n S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));\n prevPhy = phy;\n phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;\n }\n\n p.x = lambda;\n p.y = phy;\n return p;\n}\n\nexport var names = [\"somerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import tsfnz from '../common/tsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport {EPSLN, HALF_PI, FORTPI} from '../constants/values';\n\n/* Initialize the Oblique Mercator projection\n ------------------------------------------*/\nexport function init() {\n this.no_off = this.no_off || false;\n this.no_rot = this.no_rot || false;\n\n if (isNaN(this.k0)) {\n this.k0 = 1;\n }\n var sinlat = Math.sin(this.lat0);\n var coslat = Math.cos(this.lat0);\n var con = this.e * sinlat;\n\n this.bl = Math.sqrt(1 + this.es / (1 - this.es) * Math.pow(coslat, 4));\n this.al = this.a * this.bl * this.k0 * Math.sqrt(1 - this.es) / (1 - con * con);\n var t0 = tsfnz(this.e, this.lat0, sinlat);\n var dl = this.bl / coslat * Math.sqrt((1 - this.es) / (1 - con * con));\n if (dl * dl < 1) {\n dl = 1;\n }\n var fl;\n var gl;\n if (!isNaN(this.longc)) {\n //Central point and azimuth method\n\n if (this.lat0 >= 0) {\n fl = dl + Math.sqrt(dl * dl - 1);\n }\n else {\n fl = dl - Math.sqrt(dl * dl - 1);\n }\n this.el = fl * Math.pow(t0, this.bl);\n gl = 0.5 * (fl - 1 / fl);\n this.gamma0 = Math.asin(Math.sin(this.alpha) / dl);\n this.long0 = this.longc - Math.asin(gl * Math.tan(this.gamma0)) / this.bl;\n\n }\n else {\n //2 points method\n var t1 = tsfnz(this.e, this.lat1, Math.sin(this.lat1));\n var t2 = tsfnz(this.e, this.lat2, Math.sin(this.lat2));\n if (this.lat0 >= 0) {\n this.el = (dl + Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);\n }\n else {\n this.el = (dl - Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);\n }\n var hl = Math.pow(t1, this.bl);\n var ll = Math.pow(t2, this.bl);\n fl = this.el / hl;\n gl = 0.5 * (fl - 1 / fl);\n var jl = (this.el * this.el - ll * hl) / (this.el * this.el + ll * hl);\n var pl = (ll - hl) / (ll + hl);\n var dlon12 = adjust_lon(this.long1 - this.long2);\n this.long0 = 0.5 * (this.long1 + this.long2) - Math.atan(jl * Math.tan(0.5 * this.bl * (dlon12)) / pl) / this.bl;\n this.long0 = adjust_lon(this.long0);\n var dlon10 = adjust_lon(this.long1 - this.long0);\n this.gamma0 = Math.atan(Math.sin(this.bl * (dlon10)) / gl);\n this.alpha = Math.asin(dl * Math.sin(this.gamma0));\n }\n\n if (this.no_off) {\n this.uc = 0;\n }\n else {\n if (this.lat0 >= 0) {\n this.uc = this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));\n }\n else {\n this.uc = -1 * this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));\n }\n }\n\n}\n\n/* Oblique Mercator forward equations--mapping lat,long to x,y\n ----------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var dlon = adjust_lon(lon - this.long0);\n var us, vs;\n var con;\n if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n if (lat > 0) {\n con = -1;\n }\n else {\n con = 1;\n }\n vs = this.al / this.bl * Math.log(Math.tan(FORTPI + con * this.gamma0 * 0.5));\n us = -1 * con * HALF_PI * this.al / this.bl;\n }\n else {\n var t = tsfnz(this.e, lat, Math.sin(lat));\n var ql = this.el / Math.pow(t, this.bl);\n var sl = 0.5 * (ql - 1 / ql);\n var tl = 0.5 * (ql + 1 / ql);\n var vl = Math.sin(this.bl * (dlon));\n var ul = (sl * Math.sin(this.gamma0) - vl * Math.cos(this.gamma0)) / tl;\n if (Math.abs(Math.abs(ul) - 1) <= EPSLN) {\n vs = Number.POSITIVE_INFINITY;\n }\n else {\n vs = 0.5 * this.al * Math.log((1 - ul) / (1 + ul)) / this.bl;\n }\n if (Math.abs(Math.cos(this.bl * (dlon))) <= EPSLN) {\n us = this.al * this.bl * (dlon);\n }\n else {\n us = this.al * Math.atan2(sl * Math.cos(this.gamma0) + vl * Math.sin(this.gamma0), Math.cos(this.bl * dlon)) / this.bl;\n }\n }\n\n if (this.no_rot) {\n p.x = this.x0 + us;\n p.y = this.y0 + vs;\n }\n else {\n\n us -= this.uc;\n p.x = this.x0 + vs * Math.cos(this.alpha) + us * Math.sin(this.alpha);\n p.y = this.y0 + us * Math.cos(this.alpha) - vs * Math.sin(this.alpha);\n }\n return p;\n}\n\nexport function inverse(p) {\n var us, vs;\n if (this.no_rot) {\n vs = p.y - this.y0;\n us = p.x - this.x0;\n }\n else {\n vs = (p.x - this.x0) * Math.cos(this.alpha) - (p.y - this.y0) * Math.sin(this.alpha);\n us = (p.y - this.y0) * Math.cos(this.alpha) + (p.x - this.x0) * Math.sin(this.alpha);\n us += this.uc;\n }\n var qp = Math.exp(-1 * this.bl * vs / this.al);\n var sp = 0.5 * (qp - 1 / qp);\n var tp = 0.5 * (qp + 1 / qp);\n var vp = Math.sin(this.bl * us / this.al);\n var up = (vp * Math.cos(this.gamma0) + sp * Math.sin(this.gamma0)) / tp;\n var ts = Math.pow(this.el / Math.sqrt((1 + up) / (1 - up)), 1 / this.bl);\n if (Math.abs(up - 1) < EPSLN) {\n p.x = this.long0;\n p.y = HALF_PI;\n }\n else if (Math.abs(up + 1) < EPSLN) {\n p.x = this.long0;\n p.y = -1 * HALF_PI;\n }\n else {\n p.y = phi2z(this.e, ts);\n p.x = adjust_lon(this.long0 - Math.atan2(sp * Math.cos(this.gamma0) - vp * Math.sin(this.gamma0), Math.cos(this.bl * us / this.al)) / this.bl);\n }\n return p;\n}\n\nexport var names = [\"Hotine_Oblique_Mercator\", \"Hotine Oblique Mercator\", \"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\", \"Hotine_Oblique_Mercator_Azimuth_Center\", \"omerc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import msfnz from '../common/msfnz';\nimport tsfnz from '../common/tsfnz';\nimport sign from '../common/sign';\nimport adjust_lon from '../common/adjust_lon';\nimport phi2z from '../common/phi2z';\nimport {HALF_PI, EPSLN} from '../constants/values';\nexport function init() {\n\n // array of: r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north\n //double c_lat; /* center latitude */\n //double c_lon; /* center longitude */\n //double lat1; /* first standard parallel */\n //double lat2; /* second standard parallel */\n //double r_maj; /* major axis */\n //double r_min; /* minor axis */\n //double false_east; /* x offset in meters */\n //double false_north; /* y offset in meters */\n\n if (!this.lat2) {\n this.lat2 = this.lat1;\n } //if lat2 is not defined\n if (!this.k0) {\n this.k0 = 1;\n }\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n\n var temp = this.b / this.a;\n this.e = Math.sqrt(1 - temp * temp);\n\n var sin1 = Math.sin(this.lat1);\n var cos1 = Math.cos(this.lat1);\n var ms1 = msfnz(this.e, sin1, cos1);\n var ts1 = tsfnz(this.e, this.lat1, sin1);\n\n var sin2 = Math.sin(this.lat2);\n var cos2 = Math.cos(this.lat2);\n var ms2 = msfnz(this.e, sin2, cos2);\n var ts2 = tsfnz(this.e, this.lat2, sin2);\n\n var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);\n }\n else {\n this.ns = sin1;\n }\n if (isNaN(this.ns)) {\n this.ns = sin1;\n }\n this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));\n this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);\n if (!this.title) {\n this.title = \"Lambert Conformal Conic\";\n }\n}\n\n// Lambert Conformal conic forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n // singular cases :\n if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {\n lat = sign(lat) * (HALF_PI - 2 * EPSLN);\n }\n\n var con = Math.abs(Math.abs(lat) - HALF_PI);\n var ts, rh1;\n if (con > EPSLN) {\n ts = tsfnz(this.e, lat, Math.sin(lat));\n rh1 = this.a * this.f0 * Math.pow(ts, this.ns);\n }\n else {\n con = lat * this.ns;\n if (con <= 0) {\n return null;\n }\n rh1 = 0;\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;\n p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;\n\n return p;\n}\n\n// Lambert Conformal Conic inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n var rh1, con, ts;\n var lat, lon;\n var x = (p.x - this.x0) / this.k0;\n var y = (this.rh - (p.y - this.y0) / this.k0);\n if (this.ns > 0) {\n rh1 = Math.sqrt(x * x + y * y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(x * x + y * y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2((con * x), (con * y));\n }\n if ((rh1 !== 0) || (this.ns > 0)) {\n con = 1 / this.ns;\n ts = Math.pow((rh1 / (this.a * this.f0)), con);\n lat = phi2z(this.e, ts);\n if (lat === -9999) {\n return null;\n }\n }\n else {\n lat = -HALF_PI;\n }\n lon = adjust_lon(theta / this.ns + this.long0);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Lambert Tangential Conformal Conic Projection\", \"Lambert_Conformal_Conic\", \"Lambert_Conformal_Conic_2SP\", \"lcc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nexport function init() {\n this.a = 6377397.155;\n this.es = 0.006674372230614;\n this.e = Math.sqrt(this.es);\n if (!this.lat0) {\n this.lat0 = 0.863937979737193;\n }\n if (!this.long0) {\n this.long0 = 0.7417649320975901 - 0.308341501185665;\n }\n /* if scale not set default to 0.9999 */\n if (!this.k0) {\n this.k0 = 0.9999;\n }\n this.s45 = 0.785398163397448; /* 45 */\n this.s90 = 2 * this.s45;\n this.fi0 = this.lat0;\n this.e2 = this.es;\n this.e = Math.sqrt(this.e2);\n this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));\n this.uq = 1.04216856380474;\n this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);\n this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);\n this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;\n this.k1 = this.k0;\n this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));\n this.s0 = 1.37008346281555;\n this.n = Math.sin(this.s0);\n this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);\n this.ad = this.s90 - this.uq;\n}\n\n/* ellipsoid */\n/* calculate xy from lat/lon */\n/* Constants, identical to inverse transform function */\nexport function forward(p) {\n var gfi, u, deltav, s, d, eps, ro;\n var lon = p.x;\n var lat = p.y;\n var delta_lon = adjust_lon(lon - this.long0);\n /* Transformation */\n gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));\n u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);\n deltav = -delta_lon * this.alfa;\n s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));\n d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));\n eps = this.n * d;\n ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);\n p.y = ro * Math.cos(eps) / 1;\n p.x = ro * Math.sin(eps) / 1;\n\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n return (p);\n}\n\n/* calculate lat/lon from xy */\nexport function inverse(p) {\n var u, deltav, s, d, eps, ro, fi1;\n var ok;\n\n /* Transformation */\n /* revert y, x*/\n var tmp = p.x;\n p.x = p.y;\n p.y = tmp;\n if (!this.czech) {\n p.y *= -1;\n p.x *= -1;\n }\n ro = Math.sqrt(p.x * p.x + p.y * p.y);\n eps = Math.atan2(p.y, p.x);\n d = eps / Math.sin(this.s0);\n s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);\n u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));\n deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));\n p.x = this.long0 - deltav / this.alfa;\n fi1 = u;\n ok = 0;\n var iter = 0;\n do {\n p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);\n if (Math.abs(fi1 - p.y) < 0.0000000001) {\n ok = 1;\n }\n fi1 = p.y;\n iter += 1;\n } while (ok === 0 && iter < 15);\n if (iter >= 15) {\n return null;\n }\n\n return (p);\n}\n\nexport var names = [\"Krovak\", \"krovak\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(e0, e1, e2, e3, phi) {\n return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));\n}","export default function(x) {\n return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n}","export default function(x) {\n return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n}","export default function(x) {\n return (0.05859375 * x * x * (1 + 0.75 * x));\n}","export default function(x) {\n return (x * x * x * (35 / 3072));\n}","export default function(a, e, sinphi) {\n var temp = e * sinphi;\n return a / Math.sqrt(1 - temp * temp);\n}","import {HALF_PI} from '../constants/values';\nimport sign from './sign';\n\nexport default function(x) {\n return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n}\n","export default function(ml, e0, e1, e2, e3) {\n var phi;\n var dphi;\n\n phi = ml / e0;\n for (var i = 0; i < 15; i++) {\n dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //..reportError(\"IMLFN-CONV:Latitude failed to converge after 15 iterations\");\n return NaN;\n}","import mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nexport function init() {\n if (!this.sphere) {\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n }\n}\n\n/* Cassini forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var x, y;\n var lam = p.x;\n var phi = p.y;\n lam = adjust_lon(lam - this.long0);\n\n if (this.sphere) {\n x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));\n y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);\n }\n else {\n //ellipsoid\n var sinphi = Math.sin(phi);\n var cosphi = Math.cos(phi);\n var nl = gN(this.a, this.e, sinphi);\n var tl = Math.tan(phi) * Math.tan(phi);\n var al = lam * Math.cos(phi);\n var asq = al * al;\n var cl = this.es * cosphi * cosphi / (1 - this.es);\n var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\n x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));\n y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);\n\n\n }\n\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var phi, lam;\n\n if (this.sphere) {\n var dd = y + this.lat0;\n phi = Math.asin(Math.sin(dd) * Math.cos(x));\n lam = Math.atan2(Math.tan(x), Math.cos(dd));\n }\n else {\n /* ellipsoid */\n var ml1 = this.ml0 / this.a + y;\n var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);\n if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {\n p.x = this.long0;\n p.y = HALF_PI;\n if (y < 0) {\n p.y *= -1;\n }\n return p;\n }\n var nl1 = gN(this.a, this.e, Math.sin(phi1));\n\n var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);\n var tl1 = Math.pow(Math.tan(phi1), 2);\n var dl = x * this.a / nl1;\n var dsq = dl * dl;\n phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);\n lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);\n\n }\n\n p.x = adjust_lon(lam + this.long0);\n p.y = adjust_lat(phi);\n return p;\n\n}\n\nexport var names = [\"Cassini\", \"Cassini_Soldner\", \"cass\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","export default function(eccent, sinphi) {\n var con;\n if (eccent > 1.0e-7) {\n con = eccent * sinphi;\n return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));\n }\n else {\n return (2 * sinphi);\n }\n}","\nimport {HALF_PI, EPSLN, FORTPI} from '../constants/values';\n\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\n\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\nexport var S_POLE = 1;\n\nexport var N_POLE = 2;\nexport var EQUIT = 3;\nexport var OBLIQ = 4;\n\n/* Initialize the Lambert Azimuthal Equal Area projection\n ------------------------------------------------------*/\nexport function init() {\n var t = Math.abs(this.lat0);\n if (Math.abs(t - HALF_PI) < EPSLN) {\n this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;\n }\n else if (Math.abs(t) < EPSLN) {\n this.mode = this.EQUIT;\n }\n else {\n this.mode = this.OBLIQ;\n }\n if (this.es > 0) {\n var sinphi;\n\n this.qp = qsfnz(this.e, 1);\n this.mmf = 0.5 / (1 - this.es);\n this.apa = authset(this.es);\n switch (this.mode) {\n case this.N_POLE:\n this.dd = 1;\n break;\n case this.S_POLE:\n this.dd = 1;\n break;\n case this.EQUIT:\n this.rq = Math.sqrt(0.5 * this.qp);\n this.dd = 1 / this.rq;\n this.xmf = 1;\n this.ymf = 0.5 * this.qp;\n break;\n case this.OBLIQ:\n this.rq = Math.sqrt(0.5 * this.qp);\n sinphi = Math.sin(this.lat0);\n this.sinb1 = qsfnz(this.e, sinphi) / this.qp;\n this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);\n this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);\n this.ymf = (this.xmf = this.rq) / this.dd;\n this.xmf *= this.dd;\n break;\n }\n }\n else {\n if (this.mode === this.OBLIQ) {\n this.sinph0 = Math.sin(this.lat0);\n this.cosph0 = Math.cos(this.lat0);\n }\n }\n}\n\n/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y\n -----------------------------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;\n var lam = p.x;\n var phi = p.y;\n\n lam = adjust_lon(lam - this.long0);\n if (this.sphere) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n coslam = Math.cos(lam);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n if (y <= EPSLN) {\n return null;\n }\n y = Math.sqrt(2 / y);\n x = y * cosphi * Math.sin(lam);\n y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n coslam = -coslam;\n }\n if (Math.abs(phi + this.lat0) < EPSLN) {\n return null;\n }\n y = FORTPI - phi * 0.5;\n y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));\n x = y * Math.sin(lam);\n y *= coslam;\n }\n }\n else {\n sinb = 0;\n cosb = 0;\n b = 0;\n coslam = Math.cos(lam);\n sinlam = Math.sin(lam);\n sinphi = Math.sin(phi);\n q = qsfnz(this.e, sinphi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinb = q / this.qp;\n cosb = Math.sqrt(1 - sinb * sinb);\n }\n switch (this.mode) {\n case this.OBLIQ:\n b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;\n break;\n case this.EQUIT:\n b = 1 + cosb * coslam;\n break;\n case this.N_POLE:\n b = HALF_PI + phi;\n q = this.qp - q;\n break;\n case this.S_POLE:\n b = phi - HALF_PI;\n q = this.qp + q;\n break;\n }\n if (Math.abs(b) < EPSLN) {\n return null;\n }\n switch (this.mode) {\n case this.OBLIQ:\n case this.EQUIT:\n b = Math.sqrt(2 / b);\n if (this.mode === this.OBLIQ) {\n y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);\n }\n else {\n y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;\n }\n x = this.xmf * b * cosb * sinlam;\n break;\n case this.N_POLE:\n case this.S_POLE:\n if (q >= 0) {\n x = (b = Math.sqrt(q)) * sinlam;\n y = coslam * ((this.mode === this.S_POLE) ? b : -b);\n }\n else {\n x = y = 0;\n }\n break;\n }\n }\n\n p.x = this.a * x + this.x0;\n p.y = this.a * y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var x = p.x / this.a;\n var y = p.y / this.a;\n var lam, phi, cCe, sCe, q, rho, ab;\n if (this.sphere) {\n var cosz = 0,\n rh, sinz = 0;\n\n rh = Math.sqrt(x * x + y * y);\n phi = rh * 0.5;\n if (phi > 1) {\n return null;\n }\n phi = 2 * Math.asin(phi);\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n sinz = Math.sin(phi);\n cosz = Math.cos(phi);\n }\n switch (this.mode) {\n case this.EQUIT:\n phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);\n x *= sinz;\n y = cosz * rh;\n break;\n case this.OBLIQ:\n phi = (Math.abs(rh) <= EPSLN) ? this.lat0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);\n x *= sinz * this.cosph0;\n y = (cosz - Math.sin(phi) * this.sinph0) * rh;\n break;\n case this.N_POLE:\n y = -y;\n phi = HALF_PI - phi;\n break;\n case this.S_POLE:\n phi -= HALF_PI;\n break;\n }\n lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);\n }\n else {\n ab = 0;\n if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n x /= this.dd;\n y *= this.dd;\n rho = Math.sqrt(x * x + y * y);\n if (rho < EPSLN) {\n p.x = this.long0;\n p.y = this.lat0;\n return p;\n }\n sCe = 2 * Math.asin(0.5 * rho / this.rq);\n cCe = Math.cos(sCe);\n x *= (sCe = Math.sin(sCe));\n if (this.mode === this.OBLIQ) {\n ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;\n q = this.qp * ab;\n y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;\n }\n else {\n ab = y * sCe / rho;\n q = this.qp * ab;\n y = rho * cCe;\n }\n }\n else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n if (this.mode === this.N_POLE) {\n y = -y;\n }\n q = (x * x + y * y);\n if (!q) {\n p.x = this.long0;\n p.y = this.lat0;\n return p;\n }\n ab = 1 - q / this.qp;\n if (this.mode === this.S_POLE) {\n ab = -ab;\n }\n }\n lam = Math.atan2(x, y);\n phi = authlat(Math.asin(ab), this.apa);\n }\n\n p.x = adjust_lon(this.long0 + lam);\n p.y = phi;\n return p;\n}\n\n/* determine latitude from authalic latitude */\nvar P00 = 0.33333333333333333333;\n\nvar P01 = 0.17222222222222222222;\nvar P02 = 0.10257936507936507936;\nvar P10 = 0.06388888888888888888;\nvar P11 = 0.06640211640211640211;\nvar P20 = 0.01641501294219154443;\n\nfunction authset(es) {\n var t;\n var APA = [];\n APA[0] = es * P00;\n t = es * es;\n APA[0] += t * P01;\n APA[1] = t * P10;\n t *= es;\n APA[0] += t * P02;\n APA[1] += t * P11;\n APA[2] = t * P20;\n return APA;\n}\n\nfunction authlat(beta, APA) {\n var t = beta + beta;\n return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));\n}\n\nexport var names = [\"Lambert Azimuthal Equal Area\", \"Lambert_Azimuthal_Equal_Area\", \"laea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n S_POLE: S_POLE,\n N_POLE: N_POLE,\n EQUIT: EQUIT,\n OBLIQ: OBLIQ\n};\n","export default function(x) {\n if (Math.abs(x) > 1) {\n x = (x > 1) ? 1 : -1;\n }\n return Math.asin(x);\n}","import msfnz from '../common/msfnz';\nimport qsfnz from '../common/qsfnz';\nimport adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e3 = Math.sqrt(this.es);\n\n this.sin_po = Math.sin(this.lat1);\n this.cos_po = Math.cos(this.lat1);\n this.t1 = this.sin_po;\n this.con = this.sin_po;\n this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs1 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n this.sin_po = Math.sin(this.lat2);\n this.cos_po = Math.cos(this.lat2);\n this.t2 = this.sin_po;\n this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);\n this.qs2 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n this.sin_po = Math.sin(this.lat0);\n this.cos_po = Math.cos(this.lat0);\n this.t3 = this.sin_po;\n this.qs0 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);\n }\n else {\n this.ns0 = this.con;\n }\n this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;\n this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;\n}\n\n/* Albers Conical Equal Area forward equations--mapping lat,long to x,y\n -------------------------------------------------------------------*/\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n this.sin_phi = Math.sin(lat);\n this.cos_phi = Math.cos(lat);\n\n var qs = qsfnz(this.e3, this.sin_phi, this.cos_phi);\n var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;\n var theta = this.ns0 * adjust_lon(lon - this.long0);\n var x = rh1 * Math.sin(theta) + this.x0;\n var y = this.rh - rh1 * Math.cos(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh1, qs, con, theta, lon, lat;\n\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n if (this.ns0 >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n con = rh1 * this.ns0 / this.a;\n if (this.sphere) {\n lat = Math.asin((this.c - con * con) / (2 * this.ns0));\n }\n else {\n qs = (this.c - con * con) / this.ns0;\n lat = this.phi1z(this.e3, qs);\n }\n\n lon = adjust_lon(theta / this.ns0 + this.long0);\n p.x = lon;\n p.y = lat;\n return p;\n}\n\n/* Function to compute phi1, the latitude for the inverse of the\n Albers Conical Equal-Area projection.\n-------------------------------------------*/\nexport function phi1z(eccent, qs) {\n var sinphi, cosphi, con, com, dphi;\n var phi = asinz(0.5 * qs);\n if (eccent < EPSLN) {\n return phi;\n }\n\n var eccnts = eccent * eccent;\n for (var i = 1; i <= 25; i++) {\n sinphi = Math.sin(phi);\n cosphi = Math.cos(phi);\n con = eccent * sinphi;\n com = 1 - con * con;\n dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi = phi + dphi;\n if (Math.abs(dphi) <= 1e-7) {\n return phi;\n }\n }\n return null;\n}\n\nexport var names = [\"Albers_Conic_Equal_Area\", \"Albers\", \"aea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names,\n phi1z: phi1z\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN} from '../constants/values';\n\n/*\n reference:\n Wolfram Mathworld \"Gnomonic Projection\"\n http://mathworld.wolfram.com/GnomonicProjection.html\n Accessed: 12th November 2009\n */\nexport function init() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.sin_p14 = Math.sin(this.lat0);\n this.cos_p14 = Math.cos(this.lat0);\n // Approximation for projecting points to the horizon (infinity)\n this.infinity_dist = 1000 * this.a;\n this.rc = 1;\n}\n\n/* Gnomonic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var sinphi, cosphi; /* sin and cos value */\n var dlon; /* delta longitude value */\n var coslon; /* cos of longitude */\n var ksp; /* scale factor */\n var g;\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n dlon = adjust_lon(lon - this.long0);\n\n sinphi = Math.sin(lat);\n cosphi = Math.cos(lat);\n\n coslon = Math.cos(dlon);\n g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n ksp = 1;\n if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;\n }\n else {\n\n // Point is in the opposing hemisphere and is unprojectable\n // We still need to return a reasonable point, so we project\n // to infinity, on a bearing\n // equivalent to the northern hemisphere equivalent\n // This is a reasonable approximation for short shapes and lines that\n // straddle the horizon.\n\n x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);\n y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh; /* Rho */\n var sinc, cosc;\n var c;\n var lon, lat;\n\n /* Inverse equations\n -----------------*/\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n p.x /= this.k0;\n p.y /= this.k0;\n\n if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {\n c = Math.atan2(rh, this.rc);\n sinc = Math.sin(c);\n cosc = Math.cos(c);\n\n lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);\n lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);\n lon = adjust_lon(this.long0 + lon);\n }\n else {\n lat = this.phic0;\n lon = 0;\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"gnom\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport qsfnz from '../common/qsfnz';\nimport msfnz from '../common/msfnz';\nimport iqsfnz from '../common/iqsfnz';\n\n/*\n reference:\n \"Cartographic Projection Procedures for the UNIX Environment-\n A User's Manual\" by Gerald I. Evenden,\n USGS Open File Report 90-284and Release 4 Interim Reports (2003)\n*/\nexport function init() {\n //no-op\n if (!this.sphere) {\n this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n }\n}\n\n/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n if (this.sphere) {\n x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);\n y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);\n }\n else {\n var qs = qsfnz(this.e, Math.sin(lat));\n x = this.x0 + this.a * this.k0 * dlon;\n y = this.y0 + this.a * qs * 0.5 / this.k0;\n }\n\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var lon, lat;\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));\n lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\n }\n else {\n lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);\n lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"cea\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {HALF_PI} from '../constants/values';\n\nexport default function(eccent, q) {\n var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));\n if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {\n if (q < 0) {\n return (-1 * HALF_PI);\n }\n else {\n return HALF_PI;\n }\n }\n //var phi = 0.5* q/(1-eccent*eccent);\n var phi = Math.asin(0.5 * q);\n var dphi;\n var sin_phi;\n var cos_phi;\n var con;\n for (var i = 0; i < 30; i++) {\n sin_phi = Math.sin(phi);\n cos_phi = Math.cos(phi);\n con = eccent * sin_phi;\n dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n phi += dphi;\n if (Math.abs(dphi) <= 0.0000000001) {\n return phi;\n }\n }\n\n //console.log(\"IQSFN-CONV:Latitude failed to converge after 30 iterations\");\n return NaN;\n}\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\n\nexport function init() {\n\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n this.lat_ts = this.lat_ts || 0;\n this.title = this.title || \"Equidistant Cylindrical (Plate Carre)\";\n\n this.rc = Math.cos(this.lat_ts);\n}\n\n// forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n var dlon = adjust_lon(lon - this.long0);\n var dlat = adjust_lat(lat - this.lat0);\n p.x = this.x0 + (this.a * dlon * this.rc);\n p.y = this.y0 + (this.a * dlat);\n return p;\n}\n\n// inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n\n var x = p.x;\n var y = p.y;\n\n p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));\n p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n return p;\n}\n\nexport var names = [\"Equirectangular\", \"Equidistant_Cylindrical\", \"eqc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport mlfn from '../common/mlfn';\nimport {EPSLN} from '../constants/values';\n\nimport gN from '../common/gN';\nvar MAX_ITER = 20;\n\nexport function init() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas\n}\n\n/* Polyconic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var x, y, el;\n var dlon = adjust_lon(lon - this.long0);\n el = dlon * Math.sin(lat);\n if (this.sphere) {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.a * this.lat0;\n }\n else {\n x = this.a * Math.sin(el) / Math.tan(lat);\n y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));\n }\n }\n else {\n if (Math.abs(lat) <= EPSLN) {\n x = this.a * dlon;\n y = -1 * this.ml0;\n }\n else {\n var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);\n x = nl * Math.sin(el);\n y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));\n }\n\n }\n p.x = x + this.x0;\n p.y = y + this.y0;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n var lon, lat, x, y, i;\n var al, bl;\n var phi, dphi;\n x = p.x - this.x0;\n y = p.y - this.y0;\n\n if (this.sphere) {\n if (Math.abs(y + this.a * this.lat0) <= EPSLN) {\n lon = adjust_lon(x / this.a + this.long0);\n lat = 0;\n }\n else {\n al = this.lat0 + y / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var tanphi;\n for (i = MAX_ITER; i; --i) {\n tanphi = Math.tan(phi);\n dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);\n phi += dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));\n }\n }\n else {\n if (Math.abs(y + this.ml0) <= EPSLN) {\n lat = 0;\n lon = adjust_lon(this.long0 + x / this.a);\n }\n else {\n\n al = (this.ml0 + y) / this.a;\n bl = x * x / this.a / this.a + al * al;\n phi = al;\n var cl, mln, mlnp, ma;\n var con;\n for (i = MAX_ITER; i; --i) {\n con = this.e * Math.sin(phi);\n cl = Math.sqrt(1 - con * con) * Math.tan(phi);\n mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);\n ma = mln / this.a;\n dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);\n phi -= dphi;\n if (Math.abs(dphi) <= EPSLN) {\n lat = phi;\n break;\n }\n }\n\n //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);\n cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);\n lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Polyconic\", \"poly\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {SEC_TO_RAD} from '../constants/values';\n\n/*\n reference\n Department of Land and Survey Technical Circular 1973/32\n http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf\n OSG Technical Report 4.1\n http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf\n */\n\n/**\n * iterations: Number of iterations to refine inverse transform.\n * 0 -> km accuracy\n * 1 -> m accuracy -- suitable for most mapping applications\n * 2 -> mm accuracy\n */\nexport var iterations = 1;\n\nexport function init() {\n this.A = [];\n this.A[1] = 0.6399175073;\n this.A[2] = -0.1358797613;\n this.A[3] = 0.063294409;\n this.A[4] = -0.02526853;\n this.A[5] = 0.0117879;\n this.A[6] = -0.0055161;\n this.A[7] = 0.0026906;\n this.A[8] = -0.001333;\n this.A[9] = 0.00067;\n this.A[10] = -0.00034;\n\n this.B_re = [];\n this.B_im = [];\n this.B_re[1] = 0.7557853228;\n this.B_im[1] = 0;\n this.B_re[2] = 0.249204646;\n this.B_im[2] = 0.003371507;\n this.B_re[3] = -0.001541739;\n this.B_im[3] = 0.041058560;\n this.B_re[4] = -0.10162907;\n this.B_im[4] = 0.01727609;\n this.B_re[5] = -0.26623489;\n this.B_im[5] = -0.36249218;\n this.B_re[6] = -0.6870983;\n this.B_im[6] = -1.1651967;\n\n this.C_re = [];\n this.C_im = [];\n this.C_re[1] = 1.3231270439;\n this.C_im[1] = 0;\n this.C_re[2] = -0.577245789;\n this.C_im[2] = -0.007809598;\n this.C_re[3] = 0.508307513;\n this.C_im[3] = -0.112208952;\n this.C_re[4] = -0.15094762;\n this.C_im[4] = 0.18200602;\n this.C_re[5] = 1.01418179;\n this.C_im[5] = 1.64497696;\n this.C_re[6] = 1.9660549;\n this.C_im[6] = 2.5127645;\n\n this.D = [];\n this.D[1] = 1.5627014243;\n this.D[2] = 0.5185406398;\n this.D[3] = -0.03333098;\n this.D[4] = -0.1052906;\n this.D[5] = -0.0368594;\n this.D[6] = 0.007317;\n this.D[7] = 0.01220;\n this.D[8] = 0.00394;\n this.D[9] = -0.0013;\n}\n\n/**\n New Zealand Map Grid Forward - long/lat to x/y\n long/lat in radians\n */\nexport function forward(p) {\n var n;\n var lon = p.x;\n var lat = p.y;\n\n var delta_lat = lat - this.lat0;\n var delta_lon = lon - this.long0;\n\n // 1. Calculate d_phi and d_psi ... // and d_lambda\n // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.\n var d_phi = delta_lat / SEC_TO_RAD * 1E-5;\n var d_lambda = delta_lon;\n var d_phi_n = 1; // d_phi^0\n\n var d_psi = 0;\n for (n = 1; n <= 10; n++) {\n d_phi_n = d_phi_n * d_phi;\n d_psi = d_psi + this.A[n] * d_phi_n;\n }\n\n // 2. Calculate theta\n var th_re = d_psi;\n var th_im = d_lambda;\n\n // 3. Calculate z\n var th_n_re = 1;\n var th_n_im = 0; // theta^0\n var th_n_re1;\n var th_n_im1;\n\n var z_re = 0;\n var z_im = 0;\n for (n = 1; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;\n z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;\n }\n\n // 4. Calculate easting and northing\n p.x = (z_im * this.a) + this.x0;\n p.y = (z_re * this.a) + this.y0;\n\n return p;\n}\n\n/**\n New Zealand Map Grid Inverse - x/y to long/lat\n */\nexport function inverse(p) {\n var n;\n var x = p.x;\n var y = p.y;\n\n var delta_x = x - this.x0;\n var delta_y = y - this.y0;\n\n // 1. Calculate z\n var z_re = delta_y / this.a;\n var z_im = delta_x / this.a;\n\n // 2a. Calculate theta - first approximation gives km accuracy\n var z_n_re = 1;\n var z_n_im = 0; // z^0\n var z_n_re1;\n var z_n_im1;\n\n var th_re = 0;\n var th_im = 0;\n for (n = 1; n <= 6; n++) {\n z_n_re1 = z_n_re * z_re - z_n_im * z_im;\n z_n_im1 = z_n_im * z_re + z_n_re * z_im;\n z_n_re = z_n_re1;\n z_n_im = z_n_im1;\n th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;\n th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;\n }\n\n // 2b. Iterate to refine the accuracy of the calculation\n // 0 iterations gives km accuracy\n // 1 iteration gives m accuracy -- good enough for most mapping applications\n // 2 iterations bives mm accuracy\n for (var i = 0; i < this.iterations; i++) {\n var th_n_re = th_re;\n var th_n_im = th_im;\n var th_n_re1;\n var th_n_im1;\n\n var num_re = z_re;\n var num_im = z_im;\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n th_n_re = 1;\n th_n_im = 0;\n var den_re = this.B_re[1];\n var den_im = this.B_im[1];\n for (n = 2; n <= 6; n++) {\n th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n th_n_re = th_n_re1;\n th_n_im = th_n_im1;\n den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n }\n\n // Complex division\n var den2 = den_re * den_re + den_im * den_im;\n th_re = (num_re * den_re + num_im * den_im) / den2;\n th_im = (num_im * den_re - num_re * den_im) / den2;\n }\n\n // 3. Calculate d_phi ... // and d_lambda\n var d_psi = th_re;\n var d_lambda = th_im;\n var d_psi_n = 1; // d_psi^0\n\n var d_phi = 0;\n for (n = 1; n <= 9; n++) {\n d_psi_n = d_psi_n * d_psi;\n d_phi = d_phi + this.D[n] * d_psi_n;\n }\n\n // 4. Calculate latitude and longitude\n // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.\n var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);\n var lon = this.long0 + d_lambda;\n\n p.x = lon;\n p.y = lat;\n\n return p;\n}\n\nexport var names = [\"New_Zealand_Map_Grid\", \"nzmg\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\n/*\n reference\n \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n */\n\n\n/* Initialize the Miller Cylindrical projection\n -------------------------------------------*/\nexport function init() {\n //no-op\n}\n\n/* Miller Cylindrical forward equations--mapping lat,long to x,y\n ------------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x = this.x0 + this.a * dlon;\n var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Miller Cylindrical inverse equations--mapping x,y to lat/long\n ------------------------------------------------------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n\n var lon = adjust_lon(this.long0 + p.x / this.a);\n var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Miller_Cylindrical\", \"mill\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport pj_enfn from '../common/pj_enfn';\nvar MAX_ITER = 20;\nimport pj_mlfn from '../common/pj_mlfn';\nimport pj_inv_mlfn from '../common/pj_inv_mlfn';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n\nexport function init() {\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n\n\n if (!this.sphere) {\n this.en = pj_enfn(this.es);\n }\n else {\n this.n = 1;\n this.m = 0;\n this.es = 0;\n this.C_y = Math.sqrt((this.m + 1) / this.n);\n this.C_x = this.C_y / (this.m + 1);\n }\n\n}\n\n/* Sinusoidal forward equations--mapping lat,long to x,y\n -----------------------------------------------------*/\nexport function forward(p) {\n var x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n lon = adjust_lon(lon - this.long0);\n\n if (this.sphere) {\n if (!this.m) {\n lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\n }\n else {\n var k = this.n * Math.sin(lat);\n for (var i = MAX_ITER; i; --i) {\n var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));\n lat -= V;\n if (Math.abs(V) < EPSLN) {\n break;\n }\n }\n }\n x = this.a * this.C_x * lon * (this.m + Math.cos(lat));\n y = this.a * this.C_y * lat;\n\n }\n else {\n\n var s = Math.sin(lat);\n var c = Math.cos(lat);\n y = this.a * pj_mlfn(lat, s, c, this.en);\n x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);\n }\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var lat, temp, lon, s;\n\n p.x -= this.x0;\n lon = p.x / this.a;\n p.y -= this.y0;\n lat = p.y / this.a;\n\n if (this.sphere) {\n lat /= this.C_y;\n lon = lon / (this.C_x * (this.m + Math.cos(lat)));\n if (this.m) {\n lat = asinz((this.m * lat + Math.sin(lat)) / this.n);\n }\n else if (this.n !== 1) {\n lat = asinz(Math.sin(lat) / this.n);\n }\n lon = adjust_lon(lon + this.long0);\n lat = adjust_lat(lat);\n }\n else {\n lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);\n s = Math.abs(lat);\n if (s < HALF_PI) {\n s = Math.sin(lat);\n temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));\n //temp = this.long0 + p.x / (this.a * Math.cos(lat));\n lon = adjust_lon(temp);\n }\n else if ((s - EPSLN) < HALF_PI) {\n lon = this.long0;\n }\n }\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Sinusoidal\", \"sinu\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nexport function init() {}\nimport {EPSLN} from '../constants/values';\n/* Mollweide forward equations--mapping lat,long to x,y\n ----------------------------------------------------*/\nexport function forward(p) {\n\n /* Forward equations\n -----------------*/\n var lon = p.x;\n var lat = p.y;\n\n var delta_lon = adjust_lon(lon - this.long0);\n var theta = lat;\n var con = Math.PI * Math.sin(lat);\n\n /* Iterate using the Newton-Raphson method to find theta\n -----------------------------------------------------*/\n while (true) {\n var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));\n theta += delta_theta;\n if (Math.abs(delta_theta) < EPSLN) {\n break;\n }\n }\n theta /= 2;\n\n /* If the latitude is 90 deg, force the x coordinate to be \"0 + false easting\"\n this is done here because of precision problems with \"cos(theta)\"\n --------------------------------------------------------------------------*/\n if (Math.PI / 2 - Math.abs(lat) < EPSLN) {\n delta_lon = 0;\n }\n var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;\n var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;\n\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var theta;\n var arg;\n\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n arg = p.y / (1.4142135623731 * this.a);\n\n /* Because of division by zero problems, 'arg' can not be 1. Therefore\n a number very close to one is used instead.\n -------------------------------------------------------------------*/\n if (Math.abs(arg) > 0.999999999999) {\n arg = 0.999999999999;\n }\n theta = Math.asin(arg);\n var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));\n if (lon < (-Math.PI)) {\n lon = -Math.PI;\n }\n if (lon > Math.PI) {\n lon = Math.PI;\n }\n arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;\n if (Math.abs(arg) > 1) {\n arg = 1;\n }\n var lat = Math.asin(arg);\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Mollweide\", \"moll\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport msfnz from '../common/msfnz';\nimport mlfn from '../common/mlfn';\nimport adjust_lon from '../common/adjust_lon';\nimport adjust_lat from '../common/adjust_lat';\nimport imlfn from '../common/imlfn';\nimport {EPSLN} from '../constants/values';\n\nexport function init() {\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n // Standard Parallels cannot be equal and on opposite sides of the equator\n if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n return;\n }\n this.lat2 = this.lat2 || this.lat1;\n this.temp = this.b / this.a;\n this.es = 1 - Math.pow(this.temp, 2);\n this.e = Math.sqrt(this.es);\n this.e0 = e0fn(this.es);\n this.e1 = e1fn(this.es);\n this.e2 = e2fn(this.es);\n this.e3 = e3fn(this.es);\n\n this.sinphi = Math.sin(this.lat1);\n this.cosphi = Math.cos(this.lat1);\n\n this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);\n\n if (Math.abs(this.lat1 - this.lat2) < EPSLN) {\n this.ns = this.sinphi;\n }\n else {\n this.sinphi = Math.sin(this.lat2);\n this.cosphi = Math.cos(this.lat2);\n this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);\n this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);\n this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);\n }\n this.g = this.ml1 + this.ms1 / this.ns;\n this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n this.rh = this.a * (this.g - this.ml0);\n}\n\n/* Equidistant Conic forward equations--mapping lat,long to x,y\n -----------------------------------------------------------*/\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var rh1;\n\n /* Forward equations\n -----------------*/\n if (this.sphere) {\n rh1 = this.a * (this.g - lat);\n }\n else {\n var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n rh1 = this.a * (this.g - ml);\n }\n var theta = this.ns * adjust_lon(lon - this.long0);\n var x = this.x0 + rh1 * Math.sin(theta);\n var y = this.y0 + this.rh - rh1 * Math.cos(theta);\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Inverse equations\n -----------------*/\nexport function inverse(p) {\n p.x -= this.x0;\n p.y = this.rh - p.y + this.y0;\n var con, rh1, lat, lon;\n if (this.ns >= 0) {\n rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n con = 1;\n }\n else {\n rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n con = -1;\n }\n var theta = 0;\n if (rh1 !== 0) {\n theta = Math.atan2(con * p.x, con * p.y);\n }\n\n if (this.sphere) {\n lon = adjust_lon(this.long0 + theta / this.ns);\n lat = adjust_lat(this.g - rh1 / this.a);\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n var ml = this.g - rh1 / this.a;\n lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);\n lon = adjust_lon(this.long0 + theta / this.ns);\n p.x = lon;\n p.y = lat;\n return p;\n }\n\n}\n\nexport var names = [\"Equidistant_Conic\", \"eqdc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\n\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport asinz from '../common/asinz';\n\n/* Initialize the Van Der Grinten projection\n ----------------------------------------*/\nexport function init() {\n //this.R = 6370997; //Radius of earth\n this.R = this.a;\n}\n\nexport function forward(p) {\n\n var lon = p.x;\n var lat = p.y;\n\n /* Forward equations\n -----------------*/\n var dlon = adjust_lon(lon - this.long0);\n var x, y;\n\n if (Math.abs(lat) <= EPSLN) {\n x = this.x0 + this.R * dlon;\n y = this.y0;\n }\n var theta = asinz(2 * Math.abs(lat / Math.PI));\n if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {\n x = this.x0;\n if (lat >= 0) {\n y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);\n }\n else {\n y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);\n }\n // return(OK);\n }\n var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));\n var asq = al * al;\n var sinth = Math.sin(theta);\n var costh = Math.cos(theta);\n\n var g = costh / (sinth + costh - 1);\n var gsq = g * g;\n var m = g * (2 / sinth - 1);\n var msq = m * m;\n var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);\n if (dlon < 0) {\n con = -con;\n }\n x = this.x0 + con;\n //con = Math.abs(con / (Math.PI * this.R));\n var q = asq + g;\n con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);\n if (lat >= 0) {\n //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 + con;\n }\n else {\n //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n y = this.y0 - con;\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\n/* Van Der Grinten inverse equations--mapping x,y to lat/long\n ---------------------------------------------------------*/\nexport function inverse(p) {\n var lon, lat;\n var xx, yy, xys, c1, c2, c3;\n var a1;\n var m1;\n var con;\n var th1;\n var d;\n\n /* inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n con = Math.PI * this.R;\n xx = p.x / con;\n yy = p.y / con;\n xys = xx * xx + yy * yy;\n c1 = -Math.abs(yy) * (1 + xys);\n c2 = c1 - 2 * yy * yy + xx * xx;\n c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;\n d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;\n a1 = (c1 - c2 * c2 / 3 / c3) / c3;\n m1 = 2 * Math.sqrt(-a1 / 3);\n con = ((3 * d) / a1) / m1;\n if (Math.abs(con) > 1) {\n if (con >= 0) {\n con = 1;\n }\n else {\n con = -1;\n }\n }\n th1 = Math.acos(con) / 3;\n if (p.y >= 0) {\n lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n else {\n lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n }\n\n if (Math.abs(xx) < EPSLN) {\n lon = this.long0;\n }\n else {\n lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"Van_der_Grinten_I\", \"VanDerGrinten\", \"vandg\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport {HALF_PI, EPSLN} from '../constants/values';\n\nimport mlfn from '../common/mlfn';\nimport e0fn from '../common/e0fn';\nimport e1fn from '../common/e1fn';\nimport e2fn from '../common/e2fn';\nimport e3fn from '../common/e3fn';\nimport gN from '../common/gN';\nimport asinz from '../common/asinz';\nimport imlfn from '../common/imlfn';\n\n\n\nexport function init() {\n this.sin_p12 = Math.sin(this.lat0);\n this.cos_p12 = Math.cos(this.lat0);\n}\n\nexport function forward(p) {\n var lon = p.x;\n var lat = p.y;\n var sinphi = Math.sin(p.y);\n var cosphi = Math.cos(p.y);\n var dlon = adjust_lon(lon - this.long0);\n var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;\n if (this.sphere) {\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);\n p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);\n p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);\n return p;\n }\n else {\n //default case\n cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);\n c = Math.acos(cos_c);\n kp = c ? c / Math.sin(c) : 1;\n p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);\n p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));\n return p;\n }\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);\n p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South Pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);\n p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);\n return p;\n }\n else {\n //Default case\n tanphi = sinphi / cosphi;\n Nl1 = gN(this.a, this.e, this.sin_p12);\n Nl = gN(this.a, this.e, sinphi);\n psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));\n Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));\n if (Az === 0) {\n s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {\n s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n }\n else {\n s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));\n }\n G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);\n H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);\n GH = G * H;\n Hs = H * H;\n s2 = s * s;\n s3 = s2 * s;\n s4 = s3 * s;\n s5 = s4 * s;\n c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);\n p.x = this.x0 + c * Math.sin(Az);\n p.y = this.y0 + c * Math.cos(Az);\n return p;\n }\n }\n\n\n}\n\nexport function inverse(p) {\n p.x -= this.x0;\n p.y -= this.y0;\n var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F, sinpsi;\n if (this.sphere) {\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n if (rh > (2 * HALF_PI * this.a)) {\n return;\n }\n z = rh / this.a;\n\n sinz = Math.sin(z);\n cosz = Math.cos(z);\n\n lon = this.long0;\n if (Math.abs(rh) <= EPSLN) {\n lat = this.lat0;\n }\n else {\n lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);\n con = Math.abs(this.lat0) - HALF_PI;\n if (Math.abs(con) <= EPSLN) {\n if (this.lat0 >= 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n }\n else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n }\n }\n else {\n /*con = cosz - this.sin_p12 * Math.sin(lat);\n if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {\n //no-op, just keep the lon value as is\n } else {\n var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));\n }*/\n lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));\n }\n }\n\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n e0 = e0fn(this.es);\n e1 = e1fn(this.es);\n e2 = e2fn(this.es);\n e3 = e3fn(this.es);\n if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n //North pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = Mlp - rh;\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n //South pole case\n Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n M = rh - Mlp;\n\n lat = imlfn(M / this.a, e0, e1, e2, e3);\n lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n p.x = lon;\n p.y = lat;\n return p;\n }\n else {\n //default case\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n Az = Math.atan2(p.x, p.y);\n N1 = gN(this.a, this.e, this.sin_p12);\n cosAz = Math.cos(Az);\n tmp = this.e * this.cos_p12 * cosAz;\n A = -tmp * tmp / (1 - this.es);\n B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);\n D = rh / N1;\n Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;\n F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;\n psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);\n lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));\n sinpsi = Math.sin(psi);\n lat = Math.atan2((sinpsi - this.es * F * this.sin_p12) * Math.tan(psi), sinpsi * (1 - this.es));\n p.x = lon;\n p.y = lat;\n return p;\n }\n }\n\n}\n\nexport var names = [\"Azimuthal_Equidistant\", \"aeqd\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import adjust_lon from '../common/adjust_lon';\nimport asinz from '../common/asinz';\nimport {EPSLN, HALF_PI} from '../constants/values';\n\nexport function init() {\n //double temp; /* temporary variable */\n\n /* Place parameters in static storage for common use\n -------------------------------------------------*/\n this.sin_p14 = Math.sin(this.lat0);\n this.cos_p14 = Math.cos(this.lat0);\n}\n\n/* Orthographic forward equations--mapping lat,long to x,y\n ---------------------------------------------------*/\nexport function forward(p) {\n var sinphi, cosphi; /* sin and cos value */\n var dlon; /* delta longitude value */\n var coslon; /* cos of longitude */\n var ksp; /* scale factor */\n var g, x, y;\n var lon = p.x;\n var lat = p.y;\n /* Forward equations\n -----------------*/\n dlon = adjust_lon(lon - this.long0);\n\n sinphi = Math.sin(lat);\n cosphi = Math.cos(lat);\n\n coslon = Math.cos(dlon);\n g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n ksp = 1;\n if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n x = this.a * ksp * cosphi * Math.sin(dlon);\n y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n }\n p.x = x;\n p.y = y;\n return p;\n}\n\nexport function inverse(p) {\n var rh; /* height above ellipsoid */\n var z; /* angle */\n var sinz, cosz; /* sin of z and cos of z */\n var con;\n var lon, lat;\n /* Inverse equations\n -----------------*/\n p.x -= this.x0;\n p.y -= this.y0;\n rh = Math.sqrt(p.x * p.x + p.y * p.y);\n z = asinz(rh / this.a);\n\n sinz = Math.sin(z);\n cosz = Math.cos(z);\n\n lon = this.long0;\n if (Math.abs(rh) <= EPSLN) {\n lat = this.lat0;\n p.x = lon;\n p.y = lat;\n return p;\n }\n lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);\n con = Math.abs(this.lat0) - HALF_PI;\n if (Math.abs(con) <= EPSLN) {\n if (this.lat0 >= 0) {\n lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n }\n else {\n lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n }\n p.x = lon;\n p.y = lat;\n return p;\n }\n lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));\n p.x = lon;\n p.y = lat;\n return p;\n}\n\nexport var names = [\"ortho\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","// QSC projection rewritten from the original PROJ4\n// https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c\n\nimport {EPSLN, TWO_PI, SPI, HALF_PI, FORTPI} from '../constants/values';\n\n/* constants */\nvar FACE_ENUM = {\n FRONT: 1,\n RIGHT: 2,\n BACK: 3,\n LEFT: 4,\n TOP: 5,\n BOTTOM: 6\n};\n\nvar AREA_ENUM = {\n AREA_0: 1,\n AREA_1: 2,\n AREA_2: 3,\n AREA_3: 4\n};\n\nexport function init() {\n\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.lat0 = this.lat0 || 0;\n this.long0 = this.long0 || 0;\n this.lat_ts = this.lat_ts || 0;\n this.title = this.title || \"Quadrilateralized Spherical Cube\";\n\n /* Determine the cube face from the center of projection. */\n if (this.lat0 >= HALF_PI - FORTPI / 2.0) {\n this.face = FACE_ENUM.TOP;\n } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {\n this.face = FACE_ENUM.BOTTOM;\n } else if (Math.abs(this.long0) <= FORTPI) {\n this.face = FACE_ENUM.FRONT;\n } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {\n this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;\n } else {\n this.face = FACE_ENUM.BACK;\n }\n\n /* Fill in useful values for the ellipsoid <-> sphere shift\n * described in [LK12]. */\n if (this.es !== 0) {\n this.one_minus_f = 1 - (this.a - this.b) / this.a;\n this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;\n }\n}\n\n// QSC forward equations--mapping lat,long to x,y\n// -----------------------------------------------------------------\nexport function forward(p) {\n var xy = {x: 0, y: 0};\n var lat, lon;\n var theta, phi;\n var t, mu;\n /* nu; */\n var area = {value: 0};\n\n // move lon according to projection's lon\n p.x -= this.long0;\n\n /* Convert the geodetic latitude to a geocentric latitude.\n * This corresponds to the shift from the ellipsoid to the sphere\n * described in [LK12]. */\n if (this.es !== 0) {//if (P->es != 0) {\n lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));\n } else {\n lat = p.y;\n }\n\n /* Convert the input lat, lon into theta, phi as used by QSC.\n * This depends on the cube face and the area on it.\n * For the top and bottom face, we can compute theta and phi\n * directly from phi, lam. For the other faces, we must use\n * unit sphere cartesian coordinates as an intermediate step. */\n lon = p.x; //lon = lp.lam;\n if (this.face === FACE_ENUM.TOP) {\n phi = HALF_PI - lat;\n if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n theta = lon - HALF_PI;\n } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_1;\n theta = (lon > 0.0 ? lon - SPI : lon + SPI);\n } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {\n area.value = AREA_ENUM.AREA_2;\n theta = lon + HALF_PI;\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta = lon;\n }\n } else if (this.face === FACE_ENUM.BOTTOM) {\n phi = HALF_PI + lat;\n if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n theta = -lon + HALF_PI;\n } else if (lon < FORTPI && lon >= -FORTPI) {\n area.value = AREA_ENUM.AREA_1;\n theta = -lon;\n } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_2;\n theta = -lon - HALF_PI;\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);\n }\n } else {\n var q, r, s;\n var sinlat, coslat;\n var sinlon, coslon;\n\n if (this.face === FACE_ENUM.RIGHT) {\n lon = qsc_shift_lon_origin(lon, +HALF_PI);\n } else if (this.face === FACE_ENUM.BACK) {\n lon = qsc_shift_lon_origin(lon, +SPI);\n } else if (this.face === FACE_ENUM.LEFT) {\n lon = qsc_shift_lon_origin(lon, -HALF_PI);\n }\n sinlat = Math.sin(lat);\n coslat = Math.cos(lat);\n sinlon = Math.sin(lon);\n coslon = Math.cos(lon);\n q = coslat * coslon;\n r = coslat * sinlon;\n s = sinlat;\n\n if (this.face === FACE_ENUM.FRONT) {\n phi = Math.acos(q);\n theta = qsc_fwd_equat_face_theta(phi, s, r, area);\n } else if (this.face === FACE_ENUM.RIGHT) {\n phi = Math.acos(r);\n theta = qsc_fwd_equat_face_theta(phi, s, -q, area);\n } else if (this.face === FACE_ENUM.BACK) {\n phi = Math.acos(-q);\n theta = qsc_fwd_equat_face_theta(phi, s, -r, area);\n } else if (this.face === FACE_ENUM.LEFT) {\n phi = Math.acos(-r);\n theta = qsc_fwd_equat_face_theta(phi, s, q, area);\n } else {\n /* Impossible */\n phi = theta = 0;\n area.value = AREA_ENUM.AREA_0;\n }\n }\n\n /* Compute mu and nu for the area of definition.\n * For mu, see Eq. (3-21) in [OL76], but note the typos:\n * compare with Eq. (3-14). For nu, see Eq. (3-38). */\n mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));\n t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));\n\n /* Apply the result to the real area. */\n if (area.value === AREA_ENUM.AREA_1) {\n mu += HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_2) {\n mu += SPI;\n } else if (area.value === AREA_ENUM.AREA_3) {\n mu += 1.5 * SPI;\n }\n\n /* Now compute x, y from mu and nu */\n xy.x = t * Math.cos(mu);\n xy.y = t * Math.sin(mu);\n xy.x = xy.x * this.a + this.x0;\n xy.y = xy.y * this.a + this.y0;\n\n p.x = xy.x;\n p.y = xy.y;\n return p;\n}\n\n// QSC inverse equations--mapping x,y to lat/long\n// -----------------------------------------------------------------\nexport function inverse(p) {\n var lp = {lam: 0, phi: 0};\n var mu, nu, cosmu, tannu;\n var tantheta, theta, cosphi, phi;\n var t;\n var area = {value: 0};\n\n /* de-offset */\n p.x = (p.x - this.x0) / this.a;\n p.y = (p.y - this.y0) / this.a;\n\n /* Convert the input x, y to the mu and nu angles as used by QSC.\n * This depends on the area of the cube face. */\n nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));\n mu = Math.atan2(p.y, p.x);\n if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {\n area.value = AREA_ENUM.AREA_0;\n } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {\n area.value = AREA_ENUM.AREA_1;\n mu -= HALF_PI;\n } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {\n area.value = AREA_ENUM.AREA_2;\n mu = (mu < 0.0 ? mu + SPI : mu - SPI);\n } else {\n area.value = AREA_ENUM.AREA_3;\n mu += HALF_PI;\n }\n\n /* Compute phi and theta for the area of definition.\n * The inverse projection is not described in the original paper, but some\n * good hints can be found here (as of 2011-12-14):\n * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302\n * (search for \"Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>\") */\n t = (SPI / 12) * Math.tan(mu);\n tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));\n theta = Math.atan(tantheta);\n cosmu = Math.cos(mu);\n tannu = Math.tan(nu);\n cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));\n if (cosphi < -1) {\n cosphi = -1;\n } else if (cosphi > +1) {\n cosphi = +1;\n }\n\n /* Apply the result to the real area on the cube face.\n * For the top and bottom face, we can compute phi and lam directly.\n * For the other faces, we must use unit sphere cartesian coordinates\n * as an intermediate step. */\n if (this.face === FACE_ENUM.TOP) {\n phi = Math.acos(cosphi);\n lp.phi = HALF_PI - phi;\n if (area.value === AREA_ENUM.AREA_0) {\n lp.lam = theta + HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_1) {\n lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);\n } else if (area.value === AREA_ENUM.AREA_2) {\n lp.lam = theta - HALF_PI;\n } else /* area.value == AREA_ENUM.AREA_3 */ {\n lp.lam = theta;\n }\n } else if (this.face === FACE_ENUM.BOTTOM) {\n phi = Math.acos(cosphi);\n lp.phi = phi - HALF_PI;\n if (area.value === AREA_ENUM.AREA_0) {\n lp.lam = -theta + HALF_PI;\n } else if (area.value === AREA_ENUM.AREA_1) {\n lp.lam = -theta;\n } else if (area.value === AREA_ENUM.AREA_2) {\n lp.lam = -theta - HALF_PI;\n } else /* area.value == AREA_ENUM.AREA_3 */ {\n lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);\n }\n } else {\n /* Compute phi and lam via cartesian unit sphere coordinates. */\n var q, r, s;\n q = cosphi;\n t = q * q;\n if (t >= 1) {\n s = 0;\n } else {\n s = Math.sqrt(1 - t) * Math.sin(theta);\n }\n t += s * s;\n if (t >= 1) {\n r = 0;\n } else {\n r = Math.sqrt(1 - t);\n }\n /* Rotate q,r,s into the correct area. */\n if (area.value === AREA_ENUM.AREA_1) {\n t = r;\n r = -s;\n s = t;\n } else if (area.value === AREA_ENUM.AREA_2) {\n r = -r;\n s = -s;\n } else if (area.value === AREA_ENUM.AREA_3) {\n t = r;\n r = s;\n s = -t;\n }\n /* Rotate q,r,s into the correct cube face. */\n if (this.face === FACE_ENUM.RIGHT) {\n t = q;\n q = -r;\n r = t;\n } else if (this.face === FACE_ENUM.BACK) {\n q = -q;\n r = -r;\n } else if (this.face === FACE_ENUM.LEFT) {\n t = q;\n q = r;\n r = -t;\n }\n /* Now compute phi and lam from the unit sphere coordinates. */\n lp.phi = Math.acos(-s) - HALF_PI;\n lp.lam = Math.atan2(r, q);\n if (this.face === FACE_ENUM.RIGHT) {\n lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);\n } else if (this.face === FACE_ENUM.BACK) {\n lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);\n } else if (this.face === FACE_ENUM.LEFT) {\n lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);\n }\n }\n\n /* Apply the shift from the sphere to the ellipsoid as described\n * in [LK12]. */\n if (this.es !== 0) {\n var invert_sign;\n var tanphi, xa;\n invert_sign = (lp.phi < 0 ? 1 : 0);\n tanphi = Math.tan(lp.phi);\n xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);\n lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));\n if (invert_sign) {\n lp.phi = -lp.phi;\n }\n }\n\n lp.lam += this.long0;\n p.x = lp.lam;\n p.y = lp.phi;\n return p;\n}\n\n/* Helper function for forward projection: compute the theta angle\n * and determine the area number. */\nfunction qsc_fwd_equat_face_theta(phi, y, x, area) {\n var theta;\n if (phi < EPSLN) {\n area.value = AREA_ENUM.AREA_0;\n theta = 0.0;\n } else {\n theta = Math.atan2(y, x);\n if (Math.abs(theta) <= FORTPI) {\n area.value = AREA_ENUM.AREA_0;\n } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {\n area.value = AREA_ENUM.AREA_1;\n theta -= HALF_PI;\n } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {\n area.value = AREA_ENUM.AREA_2;\n theta = (theta >= 0.0 ? theta - SPI : theta + SPI);\n } else {\n area.value = AREA_ENUM.AREA_3;\n theta += HALF_PI;\n }\n }\n return theta;\n}\n\n/* Helper function: shift the longitude. */\nfunction qsc_shift_lon_origin(lon, offset) {\n var slon = lon + offset;\n if (slon < -SPI) {\n slon += TWO_PI;\n } else if (slon > +SPI) {\n slon -= TWO_PI;\n }\n return slon;\n}\n\nexport var names = [\"Quadrilateralized Spherical Cube\", \"Quadrilateralized_Spherical_Cube\", \"qsc\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n\n","// Robinson projection\n// Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c\n// Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039\n\nimport {HALF_PI, D2R, R2D, EPSLN} from '../constants/values';\nimport adjust_lon from '../common/adjust_lon';\n\nvar COEFS_X = [\n [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],\n [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],\n [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],\n [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],\n [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],\n [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],\n [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],\n [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],\n [0.9216, -0.00467746, -0.00010457, 4.81243e-06],\n [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],\n [0.8679, -0.00609363, -0.000113898, 3.32484e-06],\n [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],\n [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],\n [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],\n [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],\n [0.6732, -0.00986209, -0.000199569, 1.91974e-05],\n [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],\n [0.5722, -0.00906601, 0.000182, 6.24051e-06],\n [0.5322, -0.00677797, 0.000275608, 6.24051e-06]\n];\n\nvar COEFS_Y = [\n [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],\n [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],\n [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],\n [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],\n [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],\n [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],\n [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],\n [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],\n [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],\n [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],\n [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],\n [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],\n [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],\n [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],\n [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],\n [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],\n [0.9394, 0.00840947, -0.000192841, -4.2106e-06],\n [0.9761, 0.00616527, -0.000256, -4.2106e-06],\n [1.0000, 0.00328947, -0.000319159, -4.2106e-06]\n];\n\nvar FXC = 0.8487;\nvar FYC = 1.3523;\nvar C1 = R2D/5; // rad to 5-degree interval\nvar RC1 = 1/C1;\nvar NODES = 18;\n\nvar poly3_val = function(coefs, x) {\n return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));\n};\n\nvar poly3_der = function(coefs, x) {\n return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);\n};\n\nfunction newton_rapshon(f_df, start, max_err, iters) {\n var x = start;\n for (; iters; --iters) {\n var upd = f_df(x);\n x -= upd;\n if (Math.abs(upd) < max_err) {\n break;\n }\n }\n return x;\n}\n\nexport function init() {\n this.x0 = this.x0 || 0;\n this.y0 = this.y0 || 0;\n this.long0 = this.long0 || 0;\n this.es = 0;\n this.title = this.title || \"Robinson\";\n}\n\nexport function forward(ll) {\n var lon = adjust_lon(ll.x - this.long0);\n\n var dphi = Math.abs(ll.y);\n var i = Math.floor(dphi * C1);\n if (i < 0) {\n i = 0;\n } else if (i >= NODES) {\n i = NODES - 1;\n }\n dphi = R2D * (dphi - RC1 * i);\n var xy = {\n x: poly3_val(COEFS_X[i], dphi) * lon,\n y: poly3_val(COEFS_Y[i], dphi)\n };\n if (ll.y < 0) {\n xy.y = -xy.y;\n }\n\n xy.x = xy.x * this.a * FXC + this.x0;\n xy.y = xy.y * this.a * FYC + this.y0;\n return xy;\n}\n\nexport function inverse(xy) {\n var ll = {\n x: (xy.x - this.x0) / (this.a * FXC),\n y: Math.abs(xy.y - this.y0) / (this.a * FYC)\n };\n\n if (ll.y >= 1) { // pathologic case\n ll.x /= COEFS_X[NODES][0];\n ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;\n } else {\n // find table interval\n var i = Math.floor(ll.y * NODES);\n if (i < 0) {\n i = 0;\n } else if (i >= NODES) {\n i = NODES - 1;\n }\n for (;;) {\n if (COEFS_Y[i][0] > ll.y) {\n --i;\n } else if (COEFS_Y[i+1][0] <= ll.y) {\n ++i;\n } else {\n break;\n }\n }\n // linear interpolation in 5 degree interval\n var coefs = COEFS_Y[i];\n var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]);\n // find t so that poly3_val(coefs, t) = ll.y\n t = newton_rapshon(function(x) {\n return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);\n }, t, EPSLN, 100);\n\n ll.x /= poly3_val(COEFS_X[i], t);\n ll.y = (5 * i + t) * D2R;\n if (xy.y < 0) {\n ll.y = -ll.y;\n }\n }\n\n ll.x = adjust_lon(ll.x + this.long0);\n return ll;\n}\n\nexport var names = [\"Robinson\", \"robin\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};\n","import {\n geodeticToGeocentric,\n geocentricToGeodetic\n} from '../datumUtils';\n\nexport function init() {\n this.name = 'geocent';\n\n}\n\nexport function forward(p) {\n var point = geodeticToGeocentric(p, this.es, this.a);\n return point;\n}\n\nexport function inverse(p) {\n var point = geocentricToGeodetic(p, this.es, this.a, this.b);\n return point;\n}\n\nexport var names = [\"Geocentric\", 'geocentric', \"geocent\", \"Geocent\"];\nexport default {\n init: init,\n forward: forward,\n inverse: inverse,\n names: names\n};","import tmerc from './lib/projections/tmerc';\nimport etmerc from './lib/projections/etmerc';\nimport utm from './lib/projections/utm';\nimport sterea from './lib/projections/sterea';\nimport stere from './lib/projections/stere';\nimport somerc from './lib/projections/somerc';\nimport omerc from './lib/projections/omerc';\nimport lcc from './lib/projections/lcc';\nimport krovak from './lib/projections/krovak';\nimport cass from './lib/projections/cass';\nimport laea from './lib/projections/laea';\nimport aea from './lib/projections/aea';\nimport gnom from './lib/projections/gnom';\nimport cea from './lib/projections/cea';\nimport eqc from './lib/projections/eqc';\nimport poly from './lib/projections/poly';\nimport nzmg from './lib/projections/nzmg';\nimport mill from './lib/projections/mill';\nimport sinu from './lib/projections/sinu';\nimport moll from './lib/projections/moll';\nimport eqdc from './lib/projections/eqdc';\nimport vandg from './lib/projections/vandg';\nimport aeqd from './lib/projections/aeqd';\nimport ortho from './lib/projections/ortho';\nimport qsc from './lib/projections/qsc';\nimport robin from './lib/projections/robin';\nimport geocent from './lib/projections/geocent';\nexport default function(proj4){\n proj4.Proj.projections.add(tmerc);\n proj4.Proj.projections.add(etmerc);\n proj4.Proj.projections.add(utm);\n proj4.Proj.projections.add(sterea);\n proj4.Proj.projections.add(stere);\n proj4.Proj.projections.add(somerc);\n proj4.Proj.projections.add(omerc);\n proj4.Proj.projections.add(lcc);\n proj4.Proj.projections.add(krovak);\n proj4.Proj.projections.add(cass);\n proj4.Proj.projections.add(laea);\n proj4.Proj.projections.add(aea);\n proj4.Proj.projections.add(gnom);\n proj4.Proj.projections.add(cea);\n proj4.Proj.projections.add(eqc);\n proj4.Proj.projections.add(poly);\n proj4.Proj.projections.add(nzmg);\n proj4.Proj.projections.add(mill);\n proj4.Proj.projections.add(sinu);\n proj4.Proj.projections.add(moll);\n proj4.Proj.projections.add(eqdc);\n proj4.Proj.projections.add(vandg);\n proj4.Proj.projections.add(aeqd);\n proj4.Proj.projections.add(ortho);\n proj4.Proj.projections.add(qsc);\n proj4.Proj.projections.add(robin);\n proj4.Proj.projections.add(geocent);\n}","import proj4 from './core';\nimport Proj from \"./Proj\";\nimport Point from \"./Point\";\nimport common from \"./common/toPoint\";\nimport defs from \"./defs\";\nimport transform from \"./transform\";\nimport mgrs from \"mgrs\";\nimport includedProjections from \"../projs\";\n\nproj4.defaultDatum = 'WGS84'; //default datum\nproj4.Proj = Proj;\nproj4.WGS84 = new proj4.Proj('WGS84');\nproj4.Point = Point;\nproj4.toPoint = common;\nproj4.defs = defs;\nproj4.transform = transform;\nproj4.mgrs = mgrs;\nproj4.version = '__VERSION__';\nincludedProjections(proj4);\nexport default proj4;\n","import proj4 from 'proj4';\nexport class Proj4Projection {\n static defineProjectionAliases(aliases) {\n const aliasArray = [];\n\n for (const alias in aliases) {\n aliasArray.push([alias, aliases[alias]]);\n }\n\n proj4.defs(aliasArray);\n }\n\n constructor({\n from = 'WGS84',\n to = 'WGS84'\n }) {\n const projection = proj4(from, to);\n\n if (!projection) {\n throw new Error('Invalid projection');\n }\n\n this.project = projection.forward;\n this.unproject = projection.inverse;\n }\n\n}\n//# sourceMappingURL=proj4-projection.js.map","/**\n * Zip two iterators together\n *\n * @param iterator1\n * @param iterator2\n */\nexport async function* zipBatchIterators(\n iterator1: AsyncIterator<any[]>,\n iterator2: AsyncIterator<any[]>\n): AsyncGenerator<number[][], void, unknown> {\n let batch1 = [];\n let batch2 = [];\n let iterator1Done: boolean = false;\n let iterator2Done: boolean = false;\n\n // TODO - one could let all iterators flow at full speed using `Promise.race`\n // however we might end up with a big temporary buffer\n while (!iterator1Done && !iterator2Done) {\n if (batch1.length === 0 && !iterator1Done) {\n const {value, done} = await iterator1.next();\n if (done) {\n iterator1Done = true;\n } else {\n batch1 = value;\n }\n } else if (batch2.length === 0 && !iterator2Done) {\n const {value, done} = await iterator2.next();\n if (done) {\n iterator2Done = true;\n } else {\n batch2 = value;\n }\n }\n\n const batch = extractBatch(batch1, batch2);\n if (batch) {\n yield batch;\n }\n }\n}\n\n/**\n * Extract batch of same length from two batches\n *\n * @param batch1\n * @param batch2\n * @return array | null\n */\nfunction extractBatch(batch1: number[], batch2: number[]): number[][] | null {\n const batchLength: number = Math.min(batch1.length, batch2.length);\n if (batchLength === 0) {\n return null;\n }\n\n // Non interleaved arrays\n const batch: number[][] = [batch1.slice(0, batchLength), batch2.slice(0, batchLength)];\n\n // Modify the 2 batches\n batch1.splice(0, batchLength);\n batch2.splice(0, batchLength);\n return batch;\n}\n","import {assert} from '../../utils/assert';\nimport Field from './field';\n\nexport type SchemaMetadata = Map<string, any>;\n\n/**\n * ArrowJS `Schema` API-compatible class for row-based tables (returned from `DataTable`)\n * https://loaders.gl/arrowjs/docs/api-reference/schema\n */\nexport default class Schema {\n fields: Field[];\n // TODO - Arrow just allows Map<string, string>\n metadata: SchemaMetadata;\n\n constructor(fields: Field[], metadata?: SchemaMetadata) {\n assert(Array.isArray(fields));\n checkNames(fields);\n // For kepler fields, create arrow compatible `Fields` that have kepler fields as `metadata`\n this.fields = fields;\n this.metadata = metadata || new Map();\n }\n\n // TODO - arrow only seems to compare fields, not metadata\n compareTo(other: Schema): boolean {\n if (this.metadata !== other.metadata) {\n return false;\n }\n if (this.fields.length !== other.fields.length) {\n return false;\n }\n for (let i = 0; i < this.fields.length; ++i) {\n if (!this.fields[i].compareTo(other.fields[i])) {\n return false;\n }\n }\n return true;\n }\n\n select(...columnNames: string[]): Schema {\n // Ensure column names reference valid fields\n const nameMap = Object.create(null);\n for (const name of columnNames) {\n nameMap[name] = true;\n }\n const selectedFields = this.fields.filter((field) => nameMap[field.name]);\n return new Schema(selectedFields, this.metadata);\n }\n\n selectAt(...columnIndices: number[]): Schema {\n // Ensure column indices reference valid fields\n const selectedFields = columnIndices.map((index) => this.fields[index]).filter(Boolean);\n return new Schema(selectedFields, this.metadata);\n }\n\n assign(schemaOrFields: Schema | Field[]): Schema {\n let fields: Field[];\n let metadata: SchemaMetadata = this.metadata;\n\n if (schemaOrFields instanceof Schema) {\n const otherSchema = schemaOrFields;\n fields = otherSchema.fields;\n metadata = mergeMaps(mergeMaps(new Map(), this.metadata), otherSchema.metadata);\n } else {\n fields = schemaOrFields;\n }\n\n // Create a merged list of fields, overwrite fields in place, new fields at end\n const fieldMap: {[key: string]: Field} = Object.create(null);\n\n for (const field of this.fields) {\n fieldMap[field.name] = field;\n }\n\n for (const field of fields) {\n fieldMap[field.name] = field;\n }\n\n const mergedFields = Object.values(fieldMap);\n\n return new Schema(mergedFields, metadata);\n }\n}\n\n// Warn if any duplicated field names\nfunction checkNames(fields) {\n const usedNames = {};\n for (const field of fields) {\n if (usedNames[field.name]) {\n // eslint-disable-next-line\n console.warn('Schema: duplicated field name', field.name, field);\n }\n usedNames[field.name] = true;\n }\n}\n\nfunction mergeMaps<T>(m1: T, m2: T): T {\n // @ts-ignore\n return new Map([...(m1 || new Map()), ...(m2 || new Map())]);\n}\n","// Replacement for the external assert method to reduce bundle size\n// Note: We don't use the second \"message\" argument in calling code,\n// so no need to support it here\nexport function assert(condition: boolean, message?: string) {\n if (!condition) {\n throw new Error(message || 'loader assertion failed.');\n }\n}\n","import {DataType} from './type';\n\n/**\n * ArrowJS `Field` API-compatible class for row-based tables\n * https://loaders.gl/arrowjs/docs/api-reference/field\n * A field holds name, nullable, and metadata information about a table \"column\"\n * A Schema is essentially a list of fields\n */\nexport default class Field {\n name: string;\n type: DataType;\n nullable: boolean;\n metadata: Map<string, string>;\n\n constructor(\n name: string,\n type: DataType,\n nullable = false,\n metadata: Map<string, string> = new Map()\n ) {\n this.name = name;\n this.type = type;\n this.nullable = nullable;\n this.metadata = metadata;\n }\n\n get typeId(): number {\n return this.type && this.type.typeId;\n }\n\n clone(): Field {\n return new Field(this.name, this.type, this.nullable, this.metadata);\n }\n\n compareTo(other: this): boolean {\n return (\n this.name === other.name &&\n this.type === other.type &&\n this.nullable === other.nullable &&\n this.metadata === other.metadata\n );\n }\n\n toString(): string {\n return `${this.type}${this.nullable ? ', nullable' : ''}${\n this.metadata ? `, metadata: ${this.metadata}` : ''\n }`;\n }\n}\n","// This code is adapted from ArrowJS https://github.com/apache/arrow\n// under Apache license http://www.apache.org/licenses/LICENSE-2.0\n\n/**\n * Main data type enumeration.\n *\n * Data types in this library are all *logical*. They can be expressed as\n * either a primitive physical type (bytes or bits of some fixed size), a\n * nested type consisting of other data types, or another data type (e.g. a\n * timestamp encoded as an int64).\n *\n * **Note**: Only enum values 0-17 (NONE through Map) are written to an Arrow\n * IPC payload.\n *\n * The rest of the values are specified here so TypeScript can narrow the type\n * signatures further beyond the base Arrow Types. The Arrow DataTypes include\n * metadata like `bitWidth` that impact the type signatures of the values we\n * accept and return.\n *\n * For example, the `Int8Vector` reads 1-byte numbers from an `Int8Array`, an\n * `Int32Vector` reads a 4-byte number from an `Int32Array`, and an `Int64Vector`\n * reads a pair of 4-byte lo, hi 32-bit integers as a zero-copy slice from the\n * underlying `Int32Array`.\n *\n * Library consumers benefit by knowing the narrowest type, since we can ensure\n * the types across all public methods are propagated, and never bail to `any`.\n * These values are _never_ used at runtime, and they will _never_ be written\n * to the flatbuffers metadata of serialized Arrow IPC payloads.\n */\nexport enum Type {\n /** The default placeholder type */\n NONE = 0,\n /** A NULL type having no physical storage */\n Null = 1,\n /** Signed or unsigned 8, 16, 32, or 64-bit little-endian integer */\n Int = 2,\n /** 2, 4, or 8-byte floating point value */\n Float = 3,\n /** Variable-length bytes (no guarantee of UTF8-ness) */\n Binary = 4,\n /** UTF8 variable-length string as List<Char> */\n Utf8 = 5,\n /** Boolean as 1 bit, LSB bit-packed ordering */\n Bool = 6,\n /** Precision-and-scale-based decimal type. Storage type depends on the parameters. */\n Decimal = 7,\n /** int32_t days or int64_t milliseconds since the UNIX epoch */\n Date = 8,\n /** Time as signed 32 or 64-bit integer, representing either seconds, milliseconds, microseconds, or nanoseconds since midnight since midnight */\n Time = 9,\n /** Exact timestamp encoded with int64 since UNIX epoch (Default unit millisecond) */\n Timestamp = 10,\n /** YEAR_MONTH or DAY_TIME interval in SQL style */\n Interval = 11,\n /** A list of some logical data type */\n List = 12,\n /** Struct of logical types */\n Struct = 13,\n /** Union of logical types */\n Union = 14,\n /** Fixed-size binary. Each value occupies the same number of bytes */\n FixedSizeBinary = 15,\n /** Fixed-size list. Each value occupies the same number of bytes */\n FixedSizeList = 16,\n /** Map of named logical types */\n Map = 17,\n\n /** Dictionary aka Category type */\n Dictionary = -1,\n Int8 = -2,\n Int16 = -3,\n Int32 = -4,\n Int64 = -5,\n Uint8 = -6,\n Uint16 = -7,\n Uint32 = -8,\n Uint64 = -9,\n Float16 = -10,\n Float32 = -11,\n Float64 = -12,\n DateDay = -13,\n DateMillisecond = -14,\n TimestampSecond = -15,\n TimestampMillisecond = -16,\n TimestampMicrosecond = -17,\n TimestampNanosecond = -18,\n TimeSecond = -19,\n TimeMillisecond = -20,\n TimeMicrosecond = -21,\n TimeNanosecond = -22,\n DenseUnion = -23,\n SparseUnion = -24,\n IntervalDayTime = -25,\n IntervalYearMonth = -26\n}\n","// This code is adapted from ArrowJS https://github.com/apache/arrow\n// under Apache license http://www.apache.org/licenses/LICENSE-2.0\n\nimport {Type} from './enum';\n\nimport Field from './field';\n\nexport {Type} from './enum';\n\nexport type TypedIntArray =\n | Int8Array\n | Uint8Array\n | Int16Array\n | Uint16Array\n | Int32Array\n | Uint32Array\n | Int32Array\n | Uint32Array\n | Uint8ClampedArray;\n\nexport type TypedFloatArray = Float32Array | Float64Array;\n\nexport type TypedArray = TypedIntArray | TypedFloatArray;\n\nexport type AnyArrayType = Array<any> | TypedIntArray | TypedFloatArray;\n\nexport class DataType {\n static isNull(x: any): boolean {\n return x && x.typeId === Type.Null;\n }\n static isInt(x: any): boolean {\n return x && x.typeId === Type.Int;\n }\n static isFloat(x: any): boolean {\n return x && x.typeId === Type.Float;\n }\n static isBinary(x: any): boolean {\n return x && x.typeId === Type.Binary;\n }\n static isUtf8(x: any): boolean {\n return x && x.typeId === Type.Utf8;\n }\n static isBool(x: any): boolean {\n return x && x.typeId === Type.Bool;\n }\n static isDecimal(x: any): boolean {\n return x && x.typeId === Type.Decimal;\n }\n static isDate(x: any): boolean {\n return x && x.typeId === Type.Date;\n }\n static isTime(x: any): boolean {\n return x && x.typeId === Type.Time;\n }\n static isTimestamp(x: any): boolean {\n return x && x.typeId === Type.Timestamp;\n }\n static isInterval(x: any): boolean {\n return x && x.typeId === Type.Interval;\n }\n static isList(x: any): boolean {\n return x && x.typeId === Type.List;\n }\n static isStruct(x: any): boolean {\n return x && x.typeId === Type.Struct;\n }\n static isUnion(x: any): boolean {\n return x && x.typeId === Type.Union;\n }\n static isFixedSizeBinary(x: any): boolean {\n return x && x.typeId === Type.FixedSizeBinary;\n }\n static isFixedSizeList(x: any): boolean {\n return x && x.typeId === Type.FixedSizeList;\n }\n static isMap(x: any): boolean {\n return x && x.typeId === Type.Map;\n }\n static isDictionary(x: any): boolean {\n return x && x.typeId === Type.Dictionary;\n }\n\n get typeId(): Type {\n return Type.NONE;\n }\n\n // get ArrayType(): AnyArrayType {\n // return Int8Array;\n // }\n\n // get ArrayType() { return Array; }\n compareTo(other: DataType): boolean {\n // TODO\n return this === other; // comparer.visit(this, other);\n }\n}\n\n// NULL\n\nexport class Null extends DataType {\n get typeId(): Type {\n return Type.Null;\n }\n get [Symbol.toStringTag](): string {\n return 'Null';\n }\n toString(): string {\n return 'Null';\n }\n}\n\n// BOOLEANS\n\nexport class Bool extends DataType {\n get typeId(): Type {\n return Type.Bool;\n }\n // get ArrayType() {\n // return Uint8Array;\n // }\n get [Symbol.toStringTag](): string {\n return 'Bool';\n }\n toString(): string {\n return 'Bool';\n }\n}\n\n// INTS\n\nexport class Int extends DataType {\n readonly isSigned: boolean;\n readonly bitWidth: number;\n constructor(isSigned, bitWidth) {\n super();\n this.isSigned = isSigned;\n this.bitWidth = bitWidth;\n }\n get typeId(): Type {\n return Type.Int;\n }\n // get ArrayType() {\n // switch (this.bitWidth) {\n // case 8:\n // return this.isSigned ? Int8Array : Uint8Array;\n // case 16:\n // return this.isSigned ? Int16Array : Uint16Array;\n // case 32:\n // return this.isSigned ? Int32Array : Uint32Array;\n // case 64:\n // return this.isSigned ? Int32Array : Uint32Array;\n // default:\n // throw new Error(`Unrecognized ${this[Symbol.toStringTag]} type`);\n // }\n // }\n get [Symbol.toStringTag](): string {\n return 'Int';\n }\n toString(): string {\n return `${this.isSigned ? 'I' : 'Ui'}nt${this.bitWidth}`;\n }\n}\n\nexport class Int8 extends Int {\n constructor() {\n super(true, 8);\n }\n}\nexport class Int16 extends Int {\n constructor() {\n super(true, 16);\n }\n}\nexport class Int32 extends Int {\n constructor() {\n super(true, 32);\n }\n}\nexport class Int64 extends Int {\n constructor() {\n super(true, 64);\n }\n}\nexport class Uint8 extends Int {\n constructor() {\n super(false, 8);\n }\n}\nexport class Uint16 extends Int {\n constructor() {\n super(false, 16);\n }\n}\nexport class Uint32 extends Int {\n constructor() {\n super(false, 32);\n }\n}\nexport class Uint64 extends Int {\n constructor() {\n super(false, 64);\n }\n}\n\n// FLOATS\n\nconst Precision = {\n HALF: 16,\n SINGLE: 32,\n DOUBLE: 64\n};\n\nexport class Float extends DataType {\n readonly precision: number;\n constructor(precision) {\n super();\n this.precision = precision;\n }\n get typeId(): Type {\n return Type.Float;\n }\n // get ArrayType() {\n // switch (this.precision) {\n // case Precision.HALF:\n // return Uint16Array;\n // case Precision.SINGLE:\n // return Float32Array;\n // case Precision.DOUBLE:\n // return Float64Array;\n // default:\n // throw new Error(`Unrecognized ${this[Symbol.toStringTag]} type`);\n // }\n // }\n get [Symbol.toStringTag](): string {\n return 'Float';\n }\n toString(): string {\n return `Float${this.precision}`;\n }\n}\n\nexport class Float16 extends Float {\n constructor() {\n super(Precision.HALF);\n }\n}\nexport class Float32 extends Float {\n constructor() {\n super(Precision.SINGLE);\n }\n}\nexport class Float64 extends Float {\n constructor() {\n super(Precision.DOUBLE);\n }\n}\n\nexport class Binary extends DataType {\n constructor() {\n super();\n }\n get typeId() {\n return Type.Binary;\n }\n toString() {\n return 'Binary';\n }\n get [Symbol.toStringTag]() {\n return 'Binary';\n }\n}\n\n// STRINGS\n\nexport class Utf8 extends DataType {\n get typeId(): Type {\n return Type.Utf8;\n }\n // get ArrayType() {\n // return Uint8Array;\n // }\n get [Symbol.toStringTag](): string {\n return 'Utf8';\n }\n toString(): string {\n return 'Utf8';\n }\n}\n\n// DATES, TIMES AND INTERVALS\n\nconst DateUnit = {\n DAY: 0,\n MILLISECOND: 1\n};\n\nexport class Date extends DataType {\n readonly unit: number;\n constructor(unit) {\n super();\n this.unit = unit;\n }\n get typeId(): Type {\n return Type.Date;\n }\n // get ArrayType() {\n // return Int32Array;\n // }\n get [Symbol.toStringTag](): string {\n return 'Date';\n }\n toString(): string {\n return `Date${(this.unit + 1) * 32}<${DateUnit[this.unit]}>`;\n }\n}\n\nexport class DateDay extends Date {\n constructor() {\n super(DateUnit.DAY);\n }\n}\nexport class DateMillisecond extends Date {\n constructor() {\n super(DateUnit.MILLISECOND);\n }\n}\n\nconst TimeUnit = {\n SECOND: 1,\n MILLISECOND: 1e3,\n MICROSECOND: 1e6,\n NANOSECOND: 1e9\n};\n\nexport class Time extends DataType {\n readonly unit: number;\n readonly bitWidth: number;\n\n constructor(unit, bitWidth) {\n super();\n this.unit = unit;\n this.bitWidth = bitWidth;\n }\n get typeId(): Type {\n return Type.Time;\n }\n toString(): string {\n return `Time${this.bitWidth}<${TimeUnit[this.unit]}>`;\n }\n get [Symbol.toStringTag](): string {\n return 'Time';\n }\n // get ArrayType() {\n // return Int32Array;\n // }\n}\n\nexport class TimeSecond extends Time {\n constructor() {\n super(TimeUnit.SECOND, 32);\n }\n}\nexport class TimeMillisecond extends Time {\n constructor() {\n super(TimeUnit.MILLISECOND, 32);\n }\n}\n// export class TimeMicrosecond extends Time { constructor() { super(TimeUnit.MICROSECOND, 64); } }\n// export class TimeNanosecond extends Time { constructor() { super(TimeUnit.NANOSECOND, 64); } }\n\nexport class Timestamp extends DataType {\n readonly unit: any;\n readonly timezone: any;\n\n constructor(unit: any, timezone = null) {\n super();\n this.unit = unit;\n this.timezone = timezone;\n }\n get typeId(): Type {\n return Type.Timestamp;\n }\n // get ArrayType() {\n // return Int32Array;\n // }\n get [Symbol.toStringTag](): string {\n return 'Timestamp';\n }\n toString(): string {\n return `Timestamp<${TimeUnit[this.unit]}${this.timezone ? `, ${this.timezone}` : ''}>`;\n }\n}\n\nexport class TimestampSecond extends Timestamp {\n constructor(timezone = null) {\n super(TimeUnit.SECOND, timezone);\n }\n}\nexport class TimestampMillisecond extends Timestamp {\n constructor(timezone = null) {\n super(TimeUnit.MILLISECOND, timezone);\n }\n}\nexport class TimestampMicrosecond extends Timestamp {\n constructor(timezone = null) {\n super(TimeUnit.MICROSECOND, timezone);\n }\n}\nexport class TimestampNanosecond extends Timestamp {\n constructor(timezone = null) {\n super(TimeUnit.NANOSECOND, timezone);\n }\n}\n\nconst IntervalUnit = {\n DAY_TIME: 0,\n YEAR_MONTH: 1\n};\n\nexport class Interval extends DataType {\n readonly unit: number;\n constructor(unit: number) {\n super();\n this.unit = unit;\n }\n get typeId(): Type {\n return Type.Interval;\n }\n // get ArrayType() {\n // return Int32Array;\n // }\n get [Symbol.toStringTag](): string {\n return 'Interval';\n }\n toString(): string {\n return `Interval<${IntervalUnit[this.unit]}>`;\n }\n}\n\nexport class IntervalDayTime extends Interval {\n constructor() {\n super(IntervalUnit.DAY_TIME);\n }\n}\nexport class IntervalYearMonth extends Interval {\n constructor() {\n super(IntervalUnit.YEAR_MONTH);\n }\n}\n\nexport class FixedSizeList extends DataType {\n readonly listSize: number;\n readonly children: Field[];\n\n constructor(listSize: number, child: Field) {\n super();\n this.listSize = listSize;\n this.children = [child];\n }\n get typeId(): Type {\n return Type.FixedSizeList;\n }\n get valueType() {\n return this.children[0].type;\n }\n get valueField() {\n return this.children[0];\n }\n // get ArrayType() {\n // return this.valueType.ArrayType;\n // }\n get [Symbol.toStringTag](): string {\n return 'FixedSizeList';\n }\n toString(): string {\n return `FixedSizeList[${this.listSize}]<${this.valueType}>`;\n }\n}\n\nexport class Struct extends DataType {\n public readonly children: Field[];\n\n constructor(children: Field[]) {\n super();\n this.children = children;\n }\n\n public get typeId() {\n return Type.Struct;\n }\n public toString() {\n return `Struct<{${this.children.map((f) => `${f.name}:${f.type}`).join(', ')}}>`;\n }\n get [Symbol.toStringTag](): string {\n return 'Struct';\n }\n}\n","import {Schema, Field, Bool, Utf8, Float64, TimestampMillisecond} from '@loaders.gl/schema';\nimport BinaryChunkReader from '../streaming/binary-chunk-reader';\n\ntype DBFRowsOutput = object[];\n\ninterface DBFTableOutput {\n schema?: Schema;\n rows: DBFRowsOutput;\n}\n\ntype DBFHeader = {\n // Last updated date\n year: number;\n month: number;\n day: number;\n // Number of records in data file\n nRecords: number;\n // Length of header in bytes\n headerLength: number;\n // Length of each record\n recordLength: number;\n // Not sure if this is usually set\n languageDriver: number;\n};\n\ntype DBFField = {\n name: string;\n dataType: string;\n fieldLength: number;\n decimal: number;\n};\n\ntype DBFResult = {\n data: {[key: string]: any}[];\n schema?: Schema;\n error?: string;\n dbfHeader?: DBFHeader;\n dbfFields?: DBFField[];\n progress?: {\n bytesUsed: number;\n rowsTotal: number;\n rows: number;\n };\n};\n\nconst LITTLE_ENDIAN = true;\nconst DBF_HEADER_SIZE = 32;\n\nenum STATE {\n START = 0, // Expecting header\n FIELD_DESCRIPTORS = 1,\n FIELD_PROPERTIES = 2,\n END = 3,\n ERROR = 4\n}\n\nclass DBFParser {\n binaryReader = new BinaryChunkReader();\n textDecoder: TextDecoder;\n state = STATE.START;\n result: DBFResult = {\n data: []\n };\n\n constructor({encoding}) {\n this.textDecoder = new TextDecoder(encoding);\n }\n /**\n * @param arrayBuffer\n */\n write(arrayBuffer: ArrayBuffer): void {\n this.binaryReader.write(arrayBuffer);\n this.state = parseState(this.state, this.result, this.binaryReader, this.textDecoder);\n // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();\n\n // important events:\n // - schema available\n // - first rows available\n // - all rows available\n }\n\n end(): void {\n this.binaryReader.end();\n this.state = parseState(this.state, this.result, this.binaryReader, this.textDecoder);\n // this.result.progress.bytesUsed = this.binaryReader.bytesUsed();\n if (this.state !== STATE.END) {\n this.state = STATE.ERROR;\n this.result.error = 'DBF incomplete file';\n }\n }\n}\n/**\n * @param arrayBuffer\n * @param options\n * @returns DBFTable or rows\n */\nexport function parseDBF(\n arrayBuffer: ArrayBuffer,\n options: any = {}\n): DBFRowsOutput | DBFTableOutput {\n const loaderOptions = options.dbf || {};\n const {encoding} = loaderOptions;\n\n const dbfParser = new DBFParser({encoding});\n dbfParser.write(arrayBuffer);\n dbfParser.end();\n\n const {data, schema} = dbfParser.result;\n switch (options.tables && options.tables.format) {\n case 'table':\n // TODO - parse columns\n return {schema, rows: data};\n\n case 'rows':\n default:\n return data;\n }\n}\n/**\n * @param asyncIterator\n * @param options\n */\nexport async function* parseDBFInBatches(\n asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options: any = {}\n): AsyncIterable<DBFHeader | DBFRowsOutput | DBFTableOutput> {\n const loaderOptions = options.dbf || {};\n const {encoding} = loaderOptions;\n\n const parser = new DBFParser({encoding});\n let headerReturned = false;\n for await (const arrayBuffer of asyncIterator) {\n parser.write(arrayBuffer);\n if (!headerReturned && parser.result.dbfHeader) {\n headerReturned = true;\n yield parser.result.dbfHeader;\n }\n\n if (parser.result.data.length > 0) {\n yield parser.result.data;\n parser.result.data = [];\n }\n }\n parser.end();\n if (parser.result.data.length > 0) {\n yield parser.result.data;\n }\n}\n/**\n * https://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm\n * @param state\n * @param result\n * @param binaryReader\n * @param textDecoder\n * @returns\n */\n/* eslint-disable complexity, max-depth */\nfunction parseState(\n state: STATE,\n result: DBFResult,\n binaryReader: {[key: string]: any},\n textDecoder: TextDecoder\n): STATE {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n switch (state) {\n case STATE.ERROR:\n case STATE.END:\n return state;\n\n case STATE.START:\n // Parse initial file header\n const dataView = binaryReader.getDataView(DBF_HEADER_SIZE, 'DBF header');\n if (!dataView) {\n return state;\n }\n result.dbfHeader = parseDBFHeader(dataView);\n result.progress = {\n bytesUsed: 0,\n rowsTotal: result.dbfHeader.nRecords,\n rows: 0\n };\n state = STATE.FIELD_DESCRIPTORS;\n break;\n\n case STATE.FIELD_DESCRIPTORS:\n // Parse DBF field descriptors (schema)\n const fieldDescriptorView = binaryReader.getDataView(\n // @ts-ignore\n result.dbfHeader.headerLength - DBF_HEADER_SIZE,\n 'DBF field descriptors'\n );\n if (!fieldDescriptorView) {\n return state;\n }\n\n result.dbfFields = parseFieldDescriptors(fieldDescriptorView, textDecoder);\n result.schema = new Schema(result.dbfFields.map((dbfField) => makeField(dbfField)));\n\n state = STATE.FIELD_PROPERTIES;\n\n // TODO(kyle) Not exactly sure why start offset needs to be headerLength + 1?\n // parsedbf uses ((fields.length + 1) << 5) + 2;\n binaryReader.skip(1);\n break;\n\n case STATE.FIELD_PROPERTIES:\n const {recordLength = 0, nRecords = 0} = result?.dbfHeader || {};\n while (result.data.length < nRecords) {\n const recordView = binaryReader.getDataView(recordLength - 1);\n if (!recordView) {\n return state;\n }\n // Note: Avoid actually reading the last byte, which may not be present\n binaryReader.skip(1);\n\n // @ts-ignore\n const row = parseRow(recordView, result.dbfFields, textDecoder);\n result.data.push(row);\n // @ts-ignore\n result.progress.rows = result.data.length;\n }\n state = STATE.END;\n break;\n\n default:\n state = STATE.ERROR;\n result.error = `illegal parser state ${state}`;\n return state;\n }\n } catch (error) {\n state = STATE.ERROR;\n result.error = `DBF parsing failed: ${(error as Error).message}`;\n return state;\n }\n }\n}\n\n/**\n * @param headerView\n */\nfunction parseDBFHeader(headerView: DataView): DBFHeader {\n return {\n // Last updated date\n year: headerView.getUint8(1) + 1900,\n month: headerView.getUint8(2),\n day: headerView.getUint8(3),\n // Number of records in data file\n nRecords: headerView.getUint32(4, LITTLE_ENDIAN),\n // Length of header in bytes\n headerLength: headerView.getUint16(8, LITTLE_ENDIAN),\n // Length of each record\n recordLength: headerView.getUint16(10, LITTLE_ENDIAN),\n // Not sure if this is usually set\n languageDriver: headerView.getUint8(29)\n };\n}\n\n/**\n * @param view\n */\nfunction parseFieldDescriptors(view: DataView, textDecoder): DBFField[] {\n // NOTE: this might overestimate the number of fields if the \"Database\n // Container\" container exists and is included in the headerLength\n const nFields = (view.byteLength - 1) / 32;\n const fields: DBFField[] = [];\n let offset = 0;\n for (let i = 0; i < nFields; i++) {\n const name = textDecoder\n .decode(new Uint8Array(view.buffer, view.byteOffset + offset, 11))\n // eslint-disable-next-line no-control-regex\n .replace(/\\u0000/g, '');\n\n fields.push({\n name,\n dataType: String.fromCharCode(view.getUint8(offset + 11)),\n fieldLength: view.getUint8(offset + 16),\n decimal: view.getUint8(offset + 17)\n });\n offset += 32;\n }\n return fields;\n}\n\n/*\n * @param {BinaryChunkReader} binaryReader\nfunction parseRows(binaryReader, fields, nRecords, recordLength, textDecoder) {\n const rows = [];\n for (let i = 0; i < nRecords; i++) {\n const recordView = binaryReader.getDataView(recordLength - 1);\n binaryReader.skip(1);\n // @ts-ignore\n rows.push(parseRow(recordView, fields, textDecoder));\n }\n return rows;\n}\n */\n\n/**\n *\n * @param view\n * @param fields\n * @param textDecoder\n * @returns\n */\nfunction parseRow(\n view: DataView,\n fields: DBFField[],\n textDecoder: TextDecoder\n): {[key: string]: any} {\n const out = {};\n let offset = 0;\n for (const field of fields) {\n const text = textDecoder.decode(\n new Uint8Array(view.buffer, view.byteOffset + offset, field.fieldLength)\n );\n out[field.name] = parseField(text, field.dataType);\n offset += field.fieldLength;\n }\n\n return out;\n}\n\n/**\n * Should NaN be coerced to null?\n * @param text\n * @param dataType\n * @returns Field depends on a type of the data\n */\nfunction parseField(text: string, dataType: string): string | number | boolean | null {\n switch (dataType) {\n case 'B':\n return parseNumber(text);\n case 'C':\n return parseCharacter(text);\n case 'F':\n return parseNumber(text);\n case 'N':\n return parseNumber(text);\n case 'O':\n return parseNumber(text);\n case 'D':\n return parseDate(text);\n case 'L':\n return parseBoolean(text);\n default:\n throw new Error('Unsupported data type');\n }\n}\n\n/**\n * Parse YYYYMMDD to date in milliseconds\n * @param str YYYYMMDD\n * @returns new Date as a number\n */\nfunction parseDate(str: any): number {\n return Date.UTC(str.slice(0, 4), parseInt(str.slice(4, 6), 10) - 1, str.slice(6, 8));\n}\n\n/**\n * Read boolean value\n * any of Y, y, T, t coerce to true\n * any of N, n, F, f coerce to false\n * otherwise null\n * @param value\n * @returns boolean | null\n */\nfunction parseBoolean(value: string): boolean | null {\n return /^[nf]$/i.test(value) ? false : /^[yt]$/i.test(value) ? true : null;\n}\n\n/**\n * Return null instead of NaN\n * @param text\n * @returns number | null\n */\nfunction parseNumber(text: string): number | null {\n const number = parseFloat(text);\n return isNaN(number) ? null : number;\n}\n\n/**\n *\n * @param text\n * @returns string | null\n */\nfunction parseCharacter(text: string): string | null {\n return text.trim() || null;\n}\n\n/**\n * Create a standard Arrow-style `Field` from field descriptor.\n * TODO - use `fieldLength` and `decimal` to generate smaller types?\n * @param param0\n * @returns Field\n */\n// eslint-disable\nfunction makeField({name, dataType, fieldLength, decimal}): Field {\n switch (dataType) {\n case 'B':\n return new Field(name, new Float64(), true);\n case 'C':\n return new Field(name, new Utf8(), true);\n case 'F':\n return new Field(name, new Float64(), true);\n case 'N':\n return new Field(name, new Float64(), true);\n case 'O':\n return new Field(name, new Float64(), true);\n case 'D':\n return new Field(name, new TimestampMillisecond(), true);\n case 'L':\n return new Field(name, new Bool(), true);\n default:\n throw new Error('Unsupported data type');\n }\n}\n","import type {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {parseDBF, parseDBFInBatches} from './lib/parsers/parse-dbf';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * DBFLoader - DBF files are used to contain non-geometry columns in Shapefiles\n */\nexport const DBFWorkerLoader: Loader = {\n name: 'DBF',\n id: 'dbf',\n module: 'shapefile',\n version: VERSION,\n worker: true,\n category: 'table',\n extensions: ['dbf'],\n mimeTypes: ['application/x-dbf'],\n options: {\n dbf: {\n encoding: 'latin1'\n }\n }\n};\n\n/** DBF file loader */\nexport const DBFLoader: LoaderWithParser = {\n ...DBFWorkerLoader,\n parse: async (arrayBuffer, options) => parseDBF(arrayBuffer, options),\n parseSync: parseDBF,\n parseInBatches: parseDBFInBatches\n};\n","// import type {Feature} from '@loaders.gl/gis';\nimport type {SHXOutput} from './parse-shx';\nimport type {SHPHeader} from './parse-shp-header';\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\n\nimport {binaryToGeometry, transformGeoJsonCoords} from '@loaders.gl/gis';\nimport {Proj4Projection} from '@math.gl/proj4';\nimport {parseShx} from './parse-shx';\nimport {zipBatchIterators} from '../streaming/zip-batch-iterators';\nimport {SHPLoader} from '../../shp-loader';\nimport {DBFLoader} from '../../dbf-loader';\n\ntype Feature = any;\ninterface ShapefileOutput {\n encoding?: string;\n prj?: string;\n shx?: SHXOutput;\n header: SHPHeader;\n data: object[];\n}\n/**\n * Parsing of file in batches\n *\n * @param asyncIterator\n * @param options\n * @param context\n */\n// eslint-disable-next-line max-statements, complexity\nexport async function* parseShapefileInBatches(\n asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options?: any,\n context?: LoaderContext\n): AsyncIterable<ShapefileOutput> {\n const {reproject = false, _targetCrs = 'WGS84'} = options?.gis || {};\n const {shx, cpg, prj} = await loadShapefileSidecarFiles(options, context);\n\n // parse geometries\n // @ts-ignore context must be defined\n const shapeIterable: any = await context.parseInBatches(asyncIterator, SHPLoader, options);\n\n // parse properties\n let propertyIterable: any;\n // @ts-ignore context must be defined\n const dbfResponse = await context.fetch(replaceExtension(context?.url || '', 'dbf'));\n if (dbfResponse.ok) {\n // @ts-ignore context must be defined\n propertyIterable = await context.parseInBatches(dbfResponse, DBFLoader, {\n ...options,\n dbf: {encoding: cpg || 'latin1'}\n });\n }\n\n // When `options.metadata` is `true`, there's an extra initial `metadata`\n // object before the iterator starts. zipBatchIterators expects to receive\n // batches of Array objects, and will fail with non-iterable batches, so it's\n // important to skip over the first batch.\n let shapeHeader = (await shapeIterable.next()).value;\n if (shapeHeader && shapeHeader.batchType === 'metadata') {\n shapeHeader = (await shapeIterable.next()).value;\n }\n\n let dbfHeader: {batchType?: string} = {};\n if (propertyIterable) {\n dbfHeader = (await propertyIterable.next()).value;\n if (dbfHeader && dbfHeader.batchType === 'metadata') {\n dbfHeader = (await propertyIterable.next()).value;\n }\n }\n\n let iterator: any;\n if (propertyIterable) {\n iterator = zipBatchIterators(shapeIterable, propertyIterable);\n } else {\n iterator = shapeIterable;\n }\n\n for await (const item of iterator) {\n let geometries: any;\n let properties: any;\n if (!propertyIterable) {\n geometries = item;\n } else {\n [geometries, properties] = item;\n }\n\n const geojsonGeometries = parseGeometries(geometries);\n let features = joinProperties(geojsonGeometries, properties);\n if (reproject) {\n // @ts-ignore\n features = reprojectFeatures(features, prj, _targetCrs);\n }\n yield {\n encoding: cpg,\n prj,\n shx,\n header: shapeHeader,\n data: features\n };\n }\n}\n\n/**\n * Parse shapefile\n *\n * @param arrayBuffer\n * @param options\n * @param context\n * @returns output of shapefile\n */\nexport async function parseShapefile(\n arrayBuffer: ArrayBuffer,\n options?: {[key: string]: any},\n context?: LoaderContext\n): Promise<ShapefileOutput> {\n const {reproject = false, _targetCrs = 'WGS84'} = options?.gis || {};\n const {shx, cpg, prj} = await loadShapefileSidecarFiles(options, context);\n\n // parse geometries\n // @ts-ignore context must be defined\n const {header, geometries} = await context.parse(arrayBuffer, SHPLoader, options); // {shp: shx}\n\n const geojsonGeometries = parseGeometries(geometries);\n\n // parse properties\n let properties = [];\n\n // @ts-ignore context must be defined\n const dbfResponse = await context.fetch(replaceExtension(context.url, 'dbf'));\n if (dbfResponse.ok) {\n // @ts-ignore context must be defined\n properties = await context.parse(dbfResponse, DBFLoader, {dbf: {encoding: cpg || 'latin1'}});\n }\n\n let features = joinProperties(geojsonGeometries, properties);\n if (reproject) {\n features = reprojectFeatures(features, prj, _targetCrs);\n }\n\n return {\n encoding: cpg,\n prj,\n shx,\n header,\n data: features\n };\n}\n\n/**\n * Parse geometries\n *\n * @param geometries\n * @returns geometries as an array\n */\nfunction parseGeometries(geometries: any[]): any[] {\n const geojsonGeometries: any[] = [];\n for (const geom of geometries) {\n geojsonGeometries.push(binaryToGeometry(geom));\n }\n return geojsonGeometries;\n}\n\n/**\n * Join properties and geometries into features\n *\n * @param geometries [description]\n * @param properties [description]\n * @return [description]\n */\nfunction joinProperties(geometries: object[], properties: object[]): Feature[] {\n const features: Feature[] = [];\n for (let i = 0; i < geometries.length; i++) {\n const geometry = geometries[i];\n const feature: Feature = {\n type: 'Feature',\n geometry,\n // properties can be undefined if dbfResponse above was empty\n properties: (properties && properties[i]) || {}\n };\n features.push(feature);\n }\n\n return features;\n}\n\n/**\n * Reproject GeoJSON features to output CRS\n *\n * @param features parsed GeoJSON features\n * @param sourceCrs source coordinate reference system\n * @param targetCrs †arget coordinate reference system\n * @return Reprojected Features\n */\nfunction reprojectFeatures(features: Feature[], sourceCrs?: string, targetCrs?: string): Feature[] {\n const projection = new Proj4Projection({from: sourceCrs || 'WGS84', to: targetCrs || 'WGS84'});\n return transformGeoJsonCoords(features, (coord) => projection.project(coord));\n}\n\n/**\n *\n * @param options\n * @param context\n * @returns Promise\n */\n// eslint-disable-next-line max-statements\nexport async function loadShapefileSidecarFiles(\n options?: object,\n context?: LoaderContext\n): Promise<{\n shx?: SHXOutput;\n cpg?: string;\n prj?: string;\n}> {\n // Attempt a parallel load of the small sidecar files\n // @ts-ignore context must be defined\n const {url, fetch} = context;\n const shxPromise = fetch(replaceExtension(url, 'shx'));\n const cpgPromise = fetch(replaceExtension(url, 'cpg'));\n const prjPromise = fetch(replaceExtension(url, 'prj'));\n await Promise.all([shxPromise, cpgPromise, prjPromise]);\n\n let shx: SHXOutput | undefined;\n let cpg: string | undefined;\n let prj: string | undefined;\n\n const shxResponse = await shxPromise;\n if (shxResponse.ok) {\n const arrayBuffer = await shxResponse.arrayBuffer();\n shx = parseShx(arrayBuffer);\n }\n\n const cpgResponse = await cpgPromise;\n if (cpgResponse.ok) {\n cpg = await cpgResponse.text();\n }\n\n const prjResponse = await prjPromise;\n if (prjResponse.ok) {\n prj = await prjResponse.text();\n }\n\n return {\n shx,\n cpg,\n prj\n };\n}\n\n/**\n * Replace the extension at the end of a path.\n *\n * Matches the case of new extension with the case of the original file extension,\n * to increase the chance of finding files without firing off a request storm looking for various case combinations\n *\n * NOTE: Extensions can be both lower and uppercase\n * per spec, extensions should be lower case, but that doesn't mean they always are. See:\n * calvinmetcalf/shapefile-js#64, mapserver/mapserver#4712\n * https://trac.osgeo.org/mapserver/ticket/166\n */\nexport function replaceExtension(url: string, newExtension: string): string {\n const baseName = basename(url);\n const extension = extname(url);\n const isUpperCase = extension === extension.toUpperCase();\n if (isUpperCase) {\n newExtension = newExtension.toUpperCase();\n }\n return `${baseName}.${newExtension}`;\n}\n\n// NOTE - this gives the entire path minus extension (i.e. NOT same as path.basename)\n/**\n * @param url\n * @returns string\n */\nfunction basename(url: string): string {\n const extIndex = url && url.lastIndexOf('.');\n if (typeof extIndex === 'number') {\n return extIndex >= 0 ? url.substr(0, extIndex) : '';\n }\n return extIndex;\n}\n/**\n * @param url\n * @returns string\n */\nfunction extname(url: string): string {\n const extIndex = url && url.lastIndexOf('.');\n if (typeof extIndex === 'number') {\n return extIndex >= 0 ? url.substr(extIndex + 1) : '';\n }\n return extIndex;\n}\n","import {parseSHPHeader} from './parse-shp-header';\n\nexport interface SHXOutput {\n offsets: Int32Array;\n lengths: Int32Array;\n}\n\nconst SHX_HEADER_SIZE = 100;\nconst BIG_ENDIAN = false;\n\n/**\n * @param arrayBuffer\n * @returns SHXOutput\n */\nexport function parseShx(arrayBuffer: ArrayBuffer): SHXOutput {\n // SHX header is identical to SHP Header\n const headerView = new DataView(arrayBuffer, 0, SHX_HEADER_SIZE);\n const header = parseSHPHeader(headerView);\n const contentLength = header.length - SHX_HEADER_SIZE;\n\n const contentView = new DataView(arrayBuffer, SHX_HEADER_SIZE, contentLength);\n\n const offsets = new Int32Array(contentLength);\n const lengths = new Int32Array(contentLength);\n\n for (let i = 0; i < contentLength / 8; i++) {\n offsets[i] = contentView.getInt32(i * 8, BIG_ENDIAN);\n lengths[i] = contentView.getInt32(i * 8 + 4, BIG_ENDIAN);\n }\n\n return {\n offsets,\n lengths\n };\n}\n","import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {SHP_MAGIC_NUMBER} from './shp-loader';\nimport {parseShapefile, parseShapefileInBatches} from './lib/parsers/parse-shapefile';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/**\n * Shapefile loader\n * @note Shapefile is multifile format and requires providing additional files\n */\nexport const ShapefileLoader = {\n name: 'Shapefile',\n id: 'shapefile',\n module: 'shapefile',\n version: VERSION,\n category: 'geometry',\n extensions: ['shp'],\n mimeTypes: ['application/octet-stream'],\n tests: [new Uint8Array(SHP_MAGIC_NUMBER).buffer],\n options: {\n shapefile: {},\n shp: {\n _maxDimensions: 4\n }\n },\n parse: parseShapefile,\n parseInBatches: parseShapefileInBatches\n};\n\nexport const _typecheckShapefileLoader: LoaderWithParser = ShapefileLoader;\n"],"sourceRoot":""}