UNPKG

well-known-parser

Version:

A WKT/WKB/EWKT/EWKB/TWKB/GeoJSON parser and serializer

3 lines (2 loc) 2.56 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("./well-known-parser3.cjs"),n=require("./well-known-parser2.cjs"),c=require("./well-known-parser4.cjs"),f=require("./well-known-parser12.cjs");class o extends g.Geometry{constructor(t,e,r){super(),this.exteriorRing=t||[],this.interiorRings=e||[],this.srid=r,this.exteriorRing.length>0&&(this.hasZ=this.exteriorRing[0].hasZ,this.hasM=this.exteriorRing[0].hasM)}static Z(t,e,r){const i=new o(t,e,r);return i.hasZ=!0,i}static M(t,e,r){const i=new o(t,e,r);return i.hasM=!0,i}static ZM(t,e,r){const i=new o(t,e,r);return i.hasZ=!0,i.hasM=!0,i}toWkt(t=!1){return t?this.toInnerWkt():this.exteriorRing.length===0?this.getWktType(n.GEOMETRY_TYPES.Polygon.wkt,!0):this.getWktType(n.GEOMETRY_TYPES.Polygon.wkt,!1)+this.toInnerWkt()}toInnerWkt(){let t="((";for(const e of this.exteriorRing)t+=e.toWkt(!0)+",";t=t.slice(0,-1),t+=")";for(const e of this.interiorRings){t+=",(";for(const r of e)t+=r.toWkt(!0)+",";t=t.slice(0,-1),t+=")"}return t+=")",t}toWkb(t){const e=new f.BinaryWriter(this.getWkbSize());e.writeInt8(1),this.writeWkbType(e,n.GEOMETRY_TYPES.Polygon.wkb,t),this.exteriorRing.length>0?(e.writeUInt32LE(1+this.interiorRings.length),e.writeUInt32LE(this.exteriorRing.length)):e.writeUInt32LE(0);for(const r of this.exteriorRing)e.writeBuffer(r.toWkb(t,!0));for(const r of this.interiorRings){e.writeUInt32LE(r.length);for(const i of r)e.writeBuffer(i.toWkb(t,!0))}return e.buffer}toTwkb(t=new c.Point(0,0,0,0),e=!1){const r=new f.BinaryWriter(0,!0),i=g.Geometry.getTwkbPrecision(5,0,0),h=this.exteriorRing.length===0;if(e||this.writeTwkbHeader(r,n.GEOMETRY_TYPES.Polygon.wkb,i,h),this.exteriorRing.length>0){r.writeVarInt(1+this.interiorRings.length),r.writeVarInt(this.exteriorRing.length);for(const s of this.exteriorRing)r.writeBuffer(s.toTwkb(t,!0));for(const s of this.interiorRings){r.writeVarInt(s.length);for(const u of s)r.writeBuffer(u.toTwkb(t,!0))}}return r.buffer}getWkbSize(){let t=16;this.hasZ&&(t+=8),this.hasM&&(t+=8);let e=9;this.exteriorRing.length>0&&(e+=4+this.exteriorRing.length*t);for(let r=0;r<this.interiorRings.length;r++)e+=4+this.interiorRings[r].length*t;return e}toGeoJSON(t=!1){const e=[];if(this.exteriorRing.length>0){const r=[];for(const i of this.exteriorRing)r.push(i.toGeoJSON(!0));e.push(r)}for(const r of this.interiorRings){const i=[];for(const h of r)i.push(h.toGeoJSON(!0));e.push(i)}return t?e:{type:n.GEOMETRY_TYPES.Polygon.geoJSON,coordinates:e}}}exports.Polygon=o; //# sourceMappingURL=well-known-parser6.cjs.map