var __extends=this&&this.__extends||function(){var o=function(r,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,t){r.__proto__=t}||function(r,t){for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(r[e]=t[e])})(r,t)};return function(r,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function e(){this.constructor=r}o(r,t),r.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}}();import Feature from"../Feature.js";import JSONFeature from"./JSONFeature.js";import LineString from"../geom/LineString.js";import MultiLineString from"../geom/MultiLineString.js";import MultiPoint from"../geom/MultiPoint.js";import MultiPolygon from"../geom/MultiPolygon.js";import Point from"../geom/Point.js";import Polygon from"../geom/Polygon.js";import{get as getProjection}from"../proj.js";import{transformGeometryWithOptions}from"./Feature.js";var TopoJSON=function(e){function r(r){var t=e.call(this)||this,r=r||{};return t.layerName_=r.layerName,t.layers_=r.layers||null,t.dataProjection=getProjection(r.dataProjection||"EPSG:4326"),t}return __extends(r,e),r.prototype.readFeaturesFromObject=function(r,t){if("Topology"!=r.type)return[];var e,o=void 0,n=null,i=null,a=(r.transform&&(n=(o=r.transform).scale,i=o.translate),r.arcs),u=(o&&transformArcs(a,n,i),[]),s=r.objects,l=this.layerName_,c=void 0;for(e in s)this.layers_&&-1==this.layers_.indexOf(e)||("GeometryCollection"===s[e].type?(c=s[e],u.push.apply(u,readFeaturesFromGeometryCollection(c,a,n,i,l,e,t))):(c=s[e],u.push(readFeatureFromGeometry(c,a,n,i,l,e,t))));return u},r.prototype.readProjectionFromObject=function(r){return this.dataProjection},r}(JSONFeature),GEOMETRY_READERS={Point:readPointGeometry,LineString:readLineStringGeometry,Polygon:readPolygonGeometry,MultiPoint:readMultiPointGeometry,MultiLineString:readMultiLineStringGeometry,MultiPolygon:readMultiPolygonGeometry};function concatenateArcs(r,t){for(var e,o=[],n=0,i=r.length;n<i;++n)e=r[n],0<n&&o.pop(),e=0<=e?t[e]:t[~e].slice().reverse(),o.push.apply(o,e);for(var a=0,u=o.length;a<u;++a)o[a]=o[a].slice();return o}function readPointGeometry(r,t,e){r=r.coordinates;return t&&e&&transformVertex(r,t,e),new Point(r)}function readMultiPointGeometry(r,t,e){var o=r.coordinates;if(t&&e)for(var n=0,i=o.length;n<i;++n)transformVertex(o[n],t,e);return new MultiPoint(o)}function readLineStringGeometry(r,t){r=concatenateArcs(r.arcs,t);return new LineString(r)}function readMultiLineStringGeometry(r,t){for(var e=[],o=0,n=r.arcs.length;o<n;++o)e[o]=concatenateArcs(r.arcs[o],t);return new MultiLineString(e)}function readPolygonGeometry(r,t){for(var e=[],o=0,n=r.arcs.length;o<n;++o)e[o]=concatenateArcs(r.arcs[o],t);return new Polygon(e)}function readMultiPolygonGeometry(r,t){for(var e=[],o=0,n=r.arcs.length;o<n;++o){for(var i=r.arcs[o],a=[],u=0,s=i.length;u<s;++u)a[u]=concatenateArcs(i[u],t);e[o]=a}return new MultiPolygon(e)}function readFeaturesFromGeometryCollection(r,t,e,o,n,i,a){for(var u=r.geometries,s=[],l=0,c=u.length;l<c;++l)s[l]=readFeatureFromGeometry(u[l],t,e,o,n,i,a);return s}function readFeatureFromGeometry(r,t,e,o,n,i,a){var u,s=null,l=r.type,l=(l&&(u=GEOMETRY_READERS[l],s="Point"===l||"MultiPoint"===l?u(r,e,o):u(r,t),s=transformGeometryWithOptions(s,!1,a)),new Feature({geometry:s})),e=(void 0!==r.id&&l.setId(r.id),r.properties);return n&&((e=e||{})[n]=i),e&&l.setProperties(e,!0),l}function transformArcs(r,t,e){for(var o=0,n=r.length;o<n;++o)transformArc(r[o],t,e)}function transformArc(r,t,e){for(var o=0,n=0,i=0,a=r.length;i<a;++i){var u=r[i];o+=u[0],n+=u[1],u[0]=o,u[1]=n,transformVertex(u,t,e)}}function transformVertex(r,t,e){r[0]=r[0]*t[0]+e[0],r[1]=r[1]*t[1]+e[1]}export default TopoJSON;