{"version":3,"sources":["jsdelivr-header.js","/npm/gdal-enhanced-seraph@0.11.5/lib/gdal.js"],"names":[],"mappings":"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","file":"/npm/gdal-enhanced-seraph@0.11.5/lib/gdal.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/gdal-enhanced-seraph@0.11.5/lib/gdal.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/* eslint no-console: 0 */\nconst path = require('path');\nconst fs = require('fs');\nconst binary = require('@mapbox/node-pre-gyp');\nconst binding_path = binary.find(path.join(__dirname, '../package.json'));\nconst data_path = path.resolve(__dirname, '../deps/libgdal/gdal/data');\n\nif (process.env.GDAL_DATA === undefined && !fs.existsSync(data_path)) {\n\tthrow new Error(\"The bundled data path for node-gdal is missing '\" + data_path + \"' and GDAL_DATA environment is not set\");\n}\n\nvar gdal = module.exports = require(binding_path);\n\ngdal.Point.Multi      = gdal.MultiPoint;\ngdal.LineString.Multi = gdal.MultiLineString;\ngdal.LinearRing.Multi = gdal.MultiLineString;\ngdal.Polygon.Multi    = gdal.MultiPolygon;\n\ngdal.quiet();\n\ngdal.config = {};\n\n/**\n * Gets a GDAL configuration setting.\n *\n * @example\n * ```\n * data_path = gdal.config.get('GDAL_DATA');```\n *\n * @for gdal\n * @static\n * @method config.get\n * @param {string} key\n * @return {string}\n */\ngdal.config.get = gdal.getConfigOption;\n\n/**\n * Sets a GDAL configuration setting.\n *\n * @example\n * ```\n * gdal.config.set('GDAL_DATA', data_path);```\n *\n * @for gdal\n * @static\n * @method config.set\n * @param {string} key\n * @param {string} value\n * @return {mixed}\n */\ngdal.config.set = gdal.setConfigOption;\n\ndelete gdal.getConfigOption;\ndelete gdal.setConfigOption;\n\nif (process.env.GDAL_DATA === undefined) {\n\tgdal.config.set('GDAL_DATA', data_path);\n}\n\ngdal.Envelope = require('./envelope.js')(gdal);\ngdal.Envelope3D = require('./envelope_3d.js')(gdal);\n\nvar getEnvelope = gdal.Geometry.prototype.getEnvelope;\ngdal.Geometry.prototype.getEnvelope = function() {\n\tvar obj = getEnvelope.apply(this, arguments);\n\treturn new gdal.Envelope(obj);\n};\n\nvar getEnvelope3D = gdal.Geometry.prototype.getEnvelope3D;\ngdal.Geometry.prototype.getEnvelope3D = function() {\n\tvar obj = getEnvelope3D.apply(this, arguments);\n\treturn new gdal.Envelope3D(obj);\n};\n\nvar getExtent = gdal.Layer.prototype.getExtent;\ngdal.Layer.prototype.getExtent = function() {\n\tvar obj = getExtent.apply(this, arguments);\n\treturn new gdal.Envelope(obj);\n};\n\n// --- add additional functionality to collections ---\n\nfunction defaultForEach(callback) {\n\tvar n = this.count();\n\tfor (var i = 0; i < n; i++) {\n\t\tif (callback(this.get(i), i) === false) return;\n\t}\n}\n\nfunction defaultMap(callback) {\n\tvar result = [];\n\tthis.forEach(function(value, i) {\n\t\tresult.push(callback(value, i));\n\t});\n\treturn result;\n}\n\nfunction defaultToArray() {\n\tvar array = [];\n\tthis.forEach(function(geom) {\n\t\tarray.push(geom);\n\t});\n\treturn array;\n}\n\n/**\n * Iterates through all bands using a callback function.\n * Note: GDAL band indexes start at 1, not 0.\n *\n * @example\n * ```\n * dataset.bands.forEach(function(band, i) { ... });```\n *\n * @for gdal.DatasetBands\n * @method forEach\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.RasterBand\"}}RasterBand{{/crossLink}}\n */\ngdal.DatasetBands.prototype.forEach = function(callback) {\n\tvar n = this.count();\n\tfor (var i = 1; i <= n; i++) {\n\t\tif (callback(this.get(i), i) === false) return;\n\t}\n};\n\n/**\n * Iterates through all bands using a callback function and builds\n * an array of the returned values.\n *\n * @example\n * ```\n * var result = dataset.bands.map(function(band, i) {\n *     return value;\n * });```\n *\n * @for gdal.DatasetBands\n * @method map\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.RasterBand\"}}RasterBand{{/crossLink}}\n */\ngdal.DatasetBands.prototype.map = defaultMap;\n\n/**\n * Iterates through all features using a callback function.\n *\n * @example\n * ```\n * layer.features.forEach(function(feature, i) { ... });```\n *\n * @for gdal.LayerFeatures\n * @method forEach\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.Feature\"}}Feature{{/crossLink}}\n */\ngdal.LayerFeatures.prototype.forEach = function(callback) {\n\tvar i = 0;\n\tvar feature = this.first();\n\twhile (feature) {\n\t\tif (callback(feature, i++) === false) return;\n\t\tfeature = this.next();\n\t}\n};\n\n/**\n * Iterates through all features using a callback function and builds\n * an array of the returned values.\n *\n * @example\n * ```\n * var result = layer.features.map(function(band, i) {\n *     return value;\n * });```\n *\n * @for gdal.LayerFeatures\n * @method map\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.Feature\"}}Feature{{/crossLink}}\n */\ngdal.LayerFeatures.prototype.map = defaultMap;\n\n/**\n * Iterates through all fields using a callback function.\n *\n * @example\n * ```\n * layer.features.get(0).fields.forEach(function(value, key) { ... });```\n *\n * @for gdal.FeatureFields\n * @method forEach\n * @param {Function} callback The callback to be called with each feature `value` and `key`.\n */\ngdal.FeatureFields.prototype.forEach = function(callback) {\n\tvar obj = this.toObject();\n\tvar names = Object.keys(obj);\n\tvar n = names.length;\n\tfor (var i = 0; i < n; i++) {\n\t\tvar key = names[i];\n\t\tvar value = obj[key];\n\t\tif (callback(value, key) === false) return;\n\t}\n};\n\n/**\n * Iterates through all fields using a callback function and builds\n * an array of the returned values.\n *\n * @example\n * ```\n * var result = layer.features.get(0).fields.map(function(value, key) {\n *     return value;\n * });```\n *\n * @for gdal.FeatureFields\n * @method map\n * @param {Function} callback The callback to be called with each feature `value` and `key`.\n */\ngdal.FeatureFields.prototype.map = defaultMap;\n\n/**\n * Outputs the fields as a serialized JSON string.\n *\n * @for gdal.FeatureFields\n * @method toJSON\n * @return {String} Serialized JSON\n */\ngdal.FeatureFields.prototype.toJSON = function() {\n\treturn JSON.stringify(this.toObject());\n};\n\n/**\n * Converts the geometry to a GeoJSON object representation.\n *\n * @for gdal.Geometry\n * @method toObject\n * @return {Object} GeoJSON\n */\ngdal.Geometry.prototype.toObject = function() {\n\treturn JSON.parse(this.toJSON());\n};\n\n/**\n * Iterates through all field definitions using a callback function.\n *\n * @example\n * ```\n * layer.fields.forEach(function(field, i) { ... });```\n *\n * @for gdal.LayerFields\n * @method forEach\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.FieldDefn\"}}FieldDefn{{/crossLink}}\n */\ngdal.LayerFields.prototype.forEach = defaultForEach;\n\n/**\n * Iterates through all field definitions using a callback function and builds\n * an array of the returned values.\n *\n * @example\n * ```\n * var result = layer.fields.map(function(field, i) {\n *     return value;\n * });```\n *\n * @for gdal.LayerFields\n * @method map\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.FieldDefn\"}}FieldDefn{{/crossLink}}\n */\ngdal.LayerFields.prototype.map = defaultMap;\n\n/**\n * Iterates through all layers using a callback function.\n *\n * @example\n * ```\n * dataset.layers.forEach(function(layer, i) { ... });```\n *\n * @for gdal.DatasetLayers\n * @method forEach\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.Layer\"}}Layer{{/crossLink}}\n */\ngdal.DatasetLayers.prototype.forEach = defaultForEach;\n\n/**\n * Iterates through all layers using a callback function and builds\n * an array of the returned values.\n *\n * @example\n * ```\n * var result = dataset.layers.map(function(field, i) {\n *     return value;\n * });```\n *\n * @for gdal.DatasetLayers\n * @method map\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.Layer\"}}Layer{{/crossLink}}\n */\ngdal.DatasetLayers.prototype.map = defaultMap;\n\n/**\n * Iterates through all field definitions using a callback function.\n *\n * @example\n * ```\n * featureDefn.forEach(function(field, i) { ... });```\n *\n * @for gdal.FeatureDefnFields\n * @method forEach\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.FieldDefn\"}}FieldDefn{{/crossLink}}\n */\ngdal.FeatureDefnFields.prototype.forEach = defaultForEach;\n\n/**\n * Iterates through all field definitions using a callback function and builds\n * an array of the returned values.\n *\n * @example\n * ```\n * var result = dataset.layers.map(function(field, i) {\n *     return value;\n * });```\n *\n * @for gdal.FeatureDefnFields\n * @method map\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.FieldDefn\"}}FieldDefn{{/crossLink}}\n */\ngdal.FeatureDefnFields.prototype.map = defaultMap;\n\n/**\n * Iterates through all rings using a callback function.\n *\n * @example\n * ```\n * polygon.rings.forEach(function(ring, i) { ... });```\n *\n * @for gdal.PolygonRings\n * @method forEach\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.LineString\"}}LineString{{/crossLink}}\n */\ngdal.PolygonRings.prototype.forEach = defaultForEach;\n\n/**\n * Iterates through all rings using a callback function and builds\n * an array of the returned values.\n *\n * @example\n * ```\n * var result = polygon.rings.map(function(ring, i) {\n *     return value;\n * });```\n *\n * @for gdal.LineStringPoints\n * @method map\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.LineString\"}}LineString{{/crossLink}}\n */\ngdal.PolygonRings.prototype.map = defaultMap;\n\n/**\n * Iterates through all points using a callback function.\n *\n * @example\n * ```\n * lineString.points.forEach(function(point, i) { ... });```\n *\n * @for gdal.LineStringPoints\n * @method forEach\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.Point\"}}Point{{/crossLink}}\n */\ngdal.LineStringPoints.prototype.forEach = defaultForEach;\n\n/**\n * Iterates through all points using a callback function and builds\n * an array of the returned values.\n *\n * @example\n * ```\n * var result = lineString.points.map(function(point, i) {\n *     return value;\n * });```\n *\n * @for gdal.LineStringPoints\n * @method map\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.Point\"}}Point{{/crossLink}}\n */\ngdal.LineStringPoints.prototype.map = defaultMap;\n\n/**\n * Iterates through all child geometries using a callback function.\n *\n * @example\n * ```\n * geometryCollection.children.forEach(function(geometry, i) { ... });```\n *\n * @for gdal.GeometryCollectionChildren\n * @method forEach\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.Geometry\"}}Geometry{{/crossLink}}\n */\ngdal.GeometryCollectionChildren.prototype.forEach = defaultForEach;\n\n/**\n * Iterates through all child geometries using a callback function and builds\n * an array of the returned values.\n *\n * @example\n * ```\n * var result = geometryCollection.children.map(function(geometry, i) {\n *     return value;\n * });```\n *\n * @for gdal.GeometryCollectionChildren\n * @method map\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.Geometry\"}}Geometry{{/crossLink}}\n */\ngdal.GeometryCollectionChildren.prototype.map = defaultMap;\n\n/**\n * Iterates through all overviews using a callback function.\n *\n * @example\n * ```\n * band.overviews.forEach(function(overviewBand, i) { ... });```\n *\n * @for gdal.RasterBandOverviews\n * @method forEach\n * @param {Function} callback\n */\ngdal.RasterBandOverviews.prototype.forEach = defaultForEach;\n\n/**\n * Iterates through all raster overviews using a callback function and builds\n * an array of the returned values.\n *\n * @example\n * ```\n * var result = band.overviews.map(function(overviewBand, i) {\n *     return value;\n * });```\n *\n * @for gdal.RasterBandOverviews\n * @method map\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.Geometry\"}}Geometry{{/crossLink}}\n */\ngdal.RasterBandOverviews.prototype.map = defaultMap;\n\n/**\n * Iterates through all registered drivers using a callback function.\n *\n * @example\n * ```\n * gdal.drivers.forEach(function(driver, i) { ... });```\n *\n * @for gdal.GDALDrivers\n * @method forEach\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.Driver\"}}Driver{{/crossLink}}\n */\ngdal.GDALDrivers.prototype.forEach = defaultForEach;\n\n/**\n * Iterates through all drivers using a callback function and builds\n * an array of the returned values.\n *\n * @example\n * ```\n * var result = gdal.drivers.map(function(driver, i) {\n *     return value;\n * });```\n *\n * @for gdal.GDALDrivers\n * @method map\n * @param {Function} callback The callback to be called with each {{#crossLink \"gdal.Driver\"}}Driver{{/crossLink}}\n */\ngdal.GDALDrivers.prototype.map = defaultMap;\n\n/**\n * Outputs all geometries as a regular javascript array.\n *\n * @for gdal.GeometryCollectionChildren\n * @method toArray\n * @return {Array} List of {{#crossLink \"gdal.Geometry\"}}Geometry{{/crossLink}} instances.\n */\ngdal.GeometryCollectionChildren.prototype.toArray = defaultToArray;\n\n/**\n * Outputs all points as a regular javascript array.\n *\n * @for gdal.LineStringPoints\n * @method toArray\n * @return {Array} List of {{#crossLink \"gdal.Point\"}}Point{{/crossLink}} instances.\n */\ngdal.LineStringPoints.prototype.toArray = defaultToArray;\n\n/**\n * Outputs all rings as a regular javascript array.\n *\n * @for gdal.PolygonRings\n * @method toArray\n * @return {Array} List of {{#crossLink \"gdal.LineString\"}}LineString{{/crossLink}} instances.\n */\ngdal.PolygonRings.prototype.toArray = defaultToArray;\n\n/**\n * Creates or opens a dataset. Dataset should be explicitly closed with `dataset.close()` method if opened in `\"w\"` mode to flush any changes. Otherwise, datasets are closed when (and if) node decides to garbage collect them.\n *\n * @example\n * ```\n * var dataset = gdal.open('./data.shp');```\n *\n * @for gdal\n * @throws Error\n * @method open\n * @static\n * @param {String} path Path to dataset to open\n * @param {String} [mode=\"r\"] The mode to use to open the file: `\"r\"`, `\"r+\"`, or `\"w\"`\n * @param {String|Array} [drivers] Driver name, or list of driver names to attempt to use.\n *\n * @param {Integer} [x_size] Used when creating a raster dataset with the `\"w\"` mode.\n * @param {Integer} [y_size] Used when creating a raster dataset with the `\"w\"` mode.\n * @param {Integer} [band_count] Used when creating a raster dataset with the `\"w\"` mode.\n * @param {Integer} [data_type] Used when creating a raster dataset with the `\"w\"` mode.\n * @param {String[]|object} [creation_options] Used when creating a dataset with the `\"w\"` mode.\n *\n * @return {gdal.Dataset}\n */\ngdal.open = (function() {\n\tvar open = gdal.open;\n\n\t// add 'w' mode to gdal.open() method and also GDAL2-style driver selection\n\treturn function(filename, mode, drivers/* , x_size, y_size, n_bands, datatype, options */) {\n\t\tif (typeof drivers === 'string') {\n\t\t\tdrivers = [drivers];\n\t\t} else if (drivers && !Array.isArray(drivers)) {\n\t\t\tthrow new Error('driver(s) must be a string or list of strings');\n\t\t}\n\n\t\tif (mode === 'w') {\n\t\t\t// create file with given driver\n\t\t\tif (!drivers) {\n\t\t\t\tthrow new Error('Driver must be specified');\n\t\t\t}\n\t\t\tif (drivers.length !== 1) {\n\t\t\t\tthrow new Error('Only one driver can be used to create a file');\n\t\t\t}\n\t\t\tvar driver = gdal.drivers.get(drivers[0]);\n\t\t\tif (!driver) {\n\t\t\t\tthrow new Error('Cannot find driver: ' + drivers[0]);\n\t\t\t}\n\n\t\t\tvar args = Array.prototype.slice.call(arguments, 3); // x_size, y_size, ...\n\t\t\targs.unshift(filename);\n\t\t\treturn driver.create.apply(driver, args);\n\t\t}\n\n\t\tif (arguments.length > 2) {\n\t\t\t// open file with driver list\n\t\t\t// loop through given drivers trying to open file\n\t\t\tvar ds;\n\t\t\tdrivers.forEach(function(driver_name) {\n\t\t\t\tvar driver = gdal.drivers.get(driver_name);\n\t\t\t\tif (!driver) {\n\t\t\t\t\tthrow new Error('Cannot find driver: ' + driver_name);\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tds = driver.open(filename, mode);\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (err) {\n\t\t\t\t\t/* skip driver */\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!ds) throw new Error('Error opening dataset');\n\t\t\treturn ds;\n\t\t}\n\n\t\t// call gdal.open() method normally\n\t\treturn open.apply(gdal, arguments);\n\t};\n})();\n\nfunction fieldTypeFromValue(val) {\n\tvar type = typeof val;\n\tif (type === 'number') {\n\t\tif (val % 1 === 0) return gdal.OFTInteger;\n\t\treturn gdal.OFTReal;\n\t} else if (type === 'string') {\n\t\treturn gdal.OFTString;\n\t} else if (type === 'boolean') {\n\t\treturn gdal.OFTInteger;\n\t} else if (val instanceof Date) {\n\t\treturn gdal.OFTDateTime;\n\t} else if (val instanceof Array) {\n\t\tvar sub_type = fieldTypeFromValue(val[0]);\n\t\tswitch (sub_type) {\n\t\t\tcase gdal.OFTString : return gdal.OFTStringList;\n\t\t\tcase gdal.OFTInteger : return gdal.OFTIntegerList;\n\t\t\tcase gdal.OFTReal : return gdal.OFTRealList;\n\t\t\tdefault : throw new Error('Array element cannot be converted into OGRFieldType');\n\t\t}\n\t} else if (val instanceof Buffer) {\n\t\treturn gdal.OFTBinary;\n\t}\n\n\tthrow new Error('Value cannot be converted into OGRFieldType');\n}\n\n/**\n * Creates a LayerFields instance from an object of keys and values.\n *\n * @method fromJSON\n * @for gdal.LayerFields\n * @param {Object} object\n * @param {Boolean} [approx_ok=false]\n */\ngdal.LayerFields.prototype.fromJSON = (function() {\n\tvar warned = false;\n\treturn function(obj, approx_ok) {\n\t\tif (!warned) {\n\t\t\tconsole.warn('NODE-GDAL Deprecation Warning: LayerFields fromJSON() is deprecated, use fromObject() instead');\n\t\t\twarned = true;\n\t\t}\n\t\treturn this.fromObject(obj, approx_ok);\n\t};\n})();\n\ngdal.LayerFields.prototype.fromObject = function(obj, approx_ok) {\n\tapprox_ok = approx_ok || false;\n\tvar field_names = Object.keys(obj);\n\tfor (var i = 0; i < field_names.length; i++) {\n\t\tvar name  = field_names[i];\n\t\tvar value = obj[field_names[i]];\n\t\tvar type  = fieldTypeFromValue(value);\n\t\tvar def   = new gdal.FieldDefn(name, type);\n\t\tthis.add(def, approx_ok);\n\t}\n};\n\ngdal.Point.wkbType               = gdal.wkbPoint;\ngdal.LineString.wkbType          = gdal.wkbLineString;\ngdal.LinearRing.wkbType          = gdal.wkbLinearRing;\ngdal.Polygon.wkbType             = gdal.wkbPolygon;\ngdal.MultiPoint.wkbType          = gdal.wkbMultiPoint;\ngdal.MultiLineString.wkbType     = gdal.wkbMultiLineString;\ngdal.MultiPolygon.wkbType        = gdal.wkbMultiPolygon;\ngdal.GeometryCollection.wkbType  = gdal.wkbGeometryCollection;\n\n// enable passing geometry constructors as the geometry type\ngdal.DatasetLayers.prototype.create = (function() {\n\tvar create = gdal.DatasetLayers.prototype.create;\n\treturn function(name, srs, geom_type/* , creation_options */) {\n\t\tif (arguments.length > 2 && geom_type instanceof Function) {\n\t\t\tif (typeof geom_type.wkbType === 'undefined') {\n\t\t\t\tthrow new Error('Function must be a geometry constructor');\n\t\t\t}\n\t\t\targuments[2] = geom_type.wkbType;\n\t\t}\n\t\treturn create.apply(this, arguments);\n\t};\n})();\n\nfunction getTypedArrayType(array) {\n\tif (array instanceof Uint8Array)   return 1; // gdal.GDT_Byte\n\tif (array instanceof Int8Array)    return 1; // gdal.GDT_Byte\n\tif (array instanceof Int16Array)   return 3; // gdal.GDT_Int16\n\tif (array instanceof Uint16Array)  return 2; // gdal.GDT_UInt16\n\tif (array instanceof Int32Array)   return 5; // gdal.GDT_Int32\n\tif (array instanceof Uint32Array)  return 4; // gdal.GDT_UInt32\n\tif (array instanceof Float32Array) return 6; // gdal.GDT_Float32\n\tif (array instanceof Float64Array) return 7; // gdal.GDT_Float64\n\treturn 0; // gdal.GDT_Unknown\n}\n\ngdal.RasterBandPixels.prototype.read = (function() {\n\tvar read = gdal.RasterBandPixels.prototype.read;\n\treturn function(x, y, width, height, data, options) {\n\t\tif (!options) options = {};\n\t\tif (data) data._gdal_type = getTypedArrayType(data);\n\t\treturn read.apply(this, [x, y, width, height, data, options.buffer_width, options.buffer_height, options.type, options.pixel_space, options.line_space]);\n\t};\n})();\n\ngdal.RasterBandPixels.prototype.write = (function() {\n\tvar write = gdal.RasterBandPixels.prototype.write;\n\treturn function(x, y, width, height, data, options) {\n\t\tif (!options) options = {};\n\t\tif (data) data._gdal_type = getTypedArrayType(data);\n\t\treturn write.apply(this, [x, y, width, height, data, options.buffer_width, options.buffer_height, options.pixel_space, options.line_space]);\n\t};\n})();\n\ngdal.RasterBandPixels.prototype.readBlock = (function() {\n\tvar readBlock = gdal.RasterBandPixels.prototype.readBlock;\n\treturn function(x, y, data) {\n\t\tif (data) data._gdal_type = getTypedArrayType(data);\n\t\treturn readBlock.apply(this, arguments);\n\t};\n})();\n\ngdal.RasterBandPixels.prototype.writeBlock = (function() {\n\tvar writeBlock = gdal.RasterBandPixels.prototype.writeBlock;\n\treturn function(x, y, data) {\n\t\tdata._gdal_type = getTypedArrayType(data);\n\t\treturn writeBlock.apply(this, arguments);\n\t};\n})();\n"]}