@dra2020/district-analytics 9.0.1 → 9.0.2
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.
- package/dist/district-analytics.js +14 -8
- package/dist/district-analytics.js.map +1 -1
- package/package.json +3 -3
- package/dist/cli.js +0 -611
- package/dist/cli.js.map +0 -1
- package/dist/src/geofeature.d.ts +0 -0
package/dist/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./test/_cli.ts"],"names":[],"mappings":"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","file":"cli.js","sourcesContent":[" \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 = \"./test/_cli.ts\");\n","//\n// A SIMPLE COMMAND-LINE INTERFACE FOR EXERCISING THE ANALYTICS & VALIDATIONS\n//\n\nconsole.log(\"This has been deprecated! \");\n\n/* \n\nCONFIGURATIONS \n\nThese configurations implement various CLI tests (using the commands in parens)\nw/in VS Code:\n\n* api-analyze (analyze) - Analyzes a plan and logs the results.\n\n* unit-valid (valid) - Exercises the validations.\n\n* invalid-unassigned (valid) - Tests a plan w/ unassigned features.\n* invalid-missing (valid) - Tests a plan w/ a missing district.\n* invalid-empty (valid) - Tests a plan w/ an empty district.\n* invalid-discontiguous (valid) - Tests a plan w/ a discontiguous district.\n* invalid-hole (valid) - Tests a plan w/ an embedded district.\n\n\nCOMMANDS\n\nTests can also be exercised from the commmand line from the project directory.\nThis is a sample. Use \"node --inspect --inspect-brk main.js ...\" to attach a debugger.\n\n1 - Plain vanilla run:\n./main.js analyze -x NC -n 13 -p data/SAMPLE-BG-map.csv -d data/SAMPLE-BG-data2.json -s data/SAMPLE-BG-shapes.geojson -g data/SAMPLE-BG-graph.json -c data/SAMPLE-COUNTY.geojson\n\n2 - Missing district:\n./main.js analyze -x NC -n 13 -p data/SAMPLE-BG-map-missing.csv -d data/SAMPLE-BG-data2.json -s data/SAMPLE-BG-shapes.geojson -g data/SAMPLE-BG-graph.json -c data/SAMPLE-COUNTY.geojson\n\n3 - Empty district:\n./main.js valid -x NC -n 13 -p data/SAMPLE-BG-map.csv -d data/SAMPLE-BG-data2.json -s data/SAMPLE-BG-shapes.geojson -g data/SAMPLE-BG-graph.json -c data/SAMPLE-COUNTY.geojson --empty\n\n4 - Unassigned features:\n./main.js analyze -x NC -n 13 -p data/SAMPLE-BG-map-unassigned.csv -d data/SAMPLE-BG-data2.json -s data/SAMPLE-BG-shapes.geojson -g data/SAMPLE-BG-graph.json -c data/SAMPLE-COUNTY.geojson\n\n5 - Discontiguous districts:\n./main.js analyze -n 13 -p data/SAMPLE-BG-map-discontiguous.csv -d data/SAMPLE-BG-data2.json -s data/SAMPLE-BG-shapes.geojson -g data/SAMPLE-BG-graph.json -c data/SAMPLE-COUNTY.geojson\n\n6 - Embedded district:\n./main.js analyze -n 13 -p data/SAMPLE-BG-map-hole.csv -d data/SAMPLE-BG-data2.json -s data/SAMPLE-BG-shapes.geojson -g data/SAMPLE-BG-graph.json -c data/SAMPLE-COUNTY.geojson\n\n7 - Test using NC block-level data <<< TODO - Need BLOCK-data2.json & COUNTY.geojson to run this again.\n\ncd ~/Documents/Professional/Projects/Redistricting/DRA2020/Analytics/compact/classic/ts_sample\n./main.js analyze -v -n 13 -p SAMPLE-BLOCK-map.csv -d SAMPLE-BLOCK-data2.json -s SAMPLE-BLOCK-shapes.geojson -g SAMPLE-BLOCK-graph.json -c SAMPLE-COUNTY.geojson\n\n*/\n\n\n// import yargs from 'yargs';\n// // TODO - Fix this import, so I don't have to do the 'union' workaround below.\n// import * as PC from 'polygon-clipping';\n// import * as Poly from '@dra2020/poly';\n\n// import * as fs from 'fs';\n// import * as path from 'path';\n// import parse from 'csv-parse/lib/sync';\n\n// import { AnalyticsSession } from '../src/_api'\n// import { doPreprocessData } from '../src/preprocess'\n// import { doAnalyzeDistricts } from '../src/analyze'\n// import { doAnalyzePostProcessing, DistrictStatistics, DistrictColumn } from '../src/results'\n// import { doIsComplete, doIsContiguous, doIsFreeOfHoles } from '../src/valid'\n// import { doHasEqualPopulations } from '../src/equal';\n\n// import * as T from '../src/types'\n// import * as U from '../src/utils';\n// import * as S from '../src/settings';\n\n// import * as D from '../src/_data';\n\n// // Simulate DRA unioning district shapes in the background\n// function addToPoly(poly: any, polys: any[]): any\n// {\n// // Terry's workaround\n// let _union: any = undefined;\n// let anyPC: any = PC;\n// if (anyPC.union) _union = anyPC.union;\n// if (anyPC.default.union) _union = anyPC.default.union;\n// if (_union === undefined) throw 'Unable to load union function from polygon-clipping';\n\n// return _union(poly, ...polys);\n// }\n\n\n// console.log(\"Starting command @ \", new Date());\n\n// // COMMAND LINE\n\n// let argv = yargs\n// .usage('Usage: $0 command [options]')\n// .example('$0 equal -f foo.geojson', 'Calculate population deviation')\n// .demandCommand(1, 'You must specify a command to execute.')\n// .command('valid', 'Perform validations.')\n// .command('analyze', 'API call to analyze a plan.')\n// .option('state', {\n// alias: 'x',\n// describe: 'Specify the state.',\n// type: 'string'\n// })\n// .option('number', {\n// alias: 'n',\n// describe: 'Specify the number of districts.',\n// type: 'number'\n// })\n// .option('legislative', {\n// alias: 'l',\n// describe: 'Specify that districts are legislative.',\n// type: 'boolean',\n// default: false\n// })\n// .option('plan', {\n// alias: 'p',\n// describe: 'Specify the plan to evaluate.',\n// type: 'string'\n// })\n// .option('data', {\n// alias: 'd',\n// describe: 'Specify the census & election data to use.',\n// type: 'string'\n// })\n// .option('shapes', {\n// alias: 's',\n// describe: 'Specify the shapes to use.',\n// type: 'string'\n// })\n// .option('graph', {\n// alias: 'g',\n// describe: 'Specify the contiguity graph to use.',\n// type: 'string'\n// })\n// .option('counties', {\n// alias: 'c',\n// describe: 'Specify the FIPS-to-county-name map to use.',\n// type: 'string'\n// })\n// .option('empty', {\n// describe: 'Specify whether a district should be empty.',\n// type: 'boolean',\n// default: false\n// })\n// .option('suites', {\n// describe: 'Specify the test suites to run.',\n// type: 'array',\n// default: []\n// })\n// .option('verbose', {\n// alias: 'v',\n// describe: 'Specify whether code should log to STDOUT.',\n// type: 'boolean',\n// default: false\n// })\n// .demandOption(['number', 'plan', 'data', 'shapes', 'counties'],\n// 'Please specify all the args.')\n// .help()\n// .argv;\n\n\n// // PROCESS COMMAND LINE ARGS\n\n// let command = argv._[0]\n\n// let xx = argv.state as string;\n// let bLegislativeDistricts = argv.legislative as boolean;\n// let nDistricts = argv.n as number;\n// let planByGeoID = readPlanCSV(argv.plan as string);\n// let graph = readJSON(argv.graph as string);\n// let data = readJSON(argv.data as string) as T.GeoFeatureCollection;\n// let counties = readJSON(argv.counties as string) as T.GeoFeatureCollection;\n\n// let shapes = readJSON(argv.shapes as string) as T.GeoFeatureCollection;\n// let bEmpty = argv.empty as boolean;\n\n// let suites = argv.suites as [];\n\n// // Some default dataset keys\n// let datasetKeys = {\n// SHAPES: \"2010_VD\",\n// CENSUS: \"D16F\",\n// VAP: \"D16T\",\n// ELECTION: \"E16GPR\"\n// } as T.DatasetKeys;\n\n// let datasetDescriptions = {\n// SHAPES: \"2010 Voting Districts\",\n// CENSUS: \"2016 ACS Total Population\",\n// VAP: \"2016 ACS Voting Age Population\",\n// ELECTION: \"2016 Presidential Election\",\n// }\n\n// // Session settings are required:\n// // - Analytics suites can be defaulted to all with [], but\n// // - Datasets must be explicitly specified\n// let sessionSettings = {\n// 'suites': suites,\n// 'datasets': datasetKeys,\n// 'descriptions': datasetDescriptions\n// } as T.Dict;\n\n// let bLog = argv.verbose as boolean;\n\n// // Invert the plan, so you can create the district shapes for the SessionRequest.\n// // NOTE - The plan here is complete (all features assigned).\n// let planByDistrictID = D.invertPlan(planByGeoID, undefined, bLog);\n\n\n// // SIMULATE THE HOST\n\n// // Create district shapes & extract properties (area, diameter, perimeter)\n\n// // Index the shapes by geoID\n// let shapesByGeoID: T.GeoFeatureMap = {};\n// let idStr = \"GEOID\";\n\n// // TODO - Terry: But sometimes \"GEOID10\" hasn't been set to \"GEOID\"\n// let firstFeature = shapes.features[0];\n// if (!(firstFeature.properties == null))\n// {\n// if (U.keyExists(\"GEOID10\", firstFeature.properties)) idStr = \"GEOID10\";\n// }\n\n// for (let f of shapes.features)\n// {\n// if (!(f.properties == null))\n// {\n// // let idStr = \"GEOID\";\n// // TODO - Terry: Sometimes \"GEOID10\" hasn't been => to \"GEOID!\"\n// // if (U.keyExists(\"GEOID10\", f.properties)) idStr = \"GEOID10\";\n// let geoID = f.properties[idStr];\n// shapesByGeoID[geoID] = f;\n// }\n// }\n\n// // Find the smallest Feature\n// // COPIED from dra-client/geodistrict.ts, and lightly modified\n// let geo = shapes;\n// let minFeatureArea = Poly.polyArea(geo.features[0]);\n\n// for (let i = 1; i < geo.features.length; i++)\n// {\n// let a = Poly.polyArea(geo.features[i]);\n// if (a < minFeatureArea) minFeatureArea = a;\n// }\n\n// // Eliminate anomalous holes\n// // COPIED from dra-client/geodistrict.ts, and lightly modified\n// // This is a bit of a hack in the sense that it is still an open question as to whether this is a problem\n// // with either the underlying shape data or a problem in our simplification of that shape data.\n// // But in any case, what this does is eliminate any holes that are smaller than the smallest feature. Such\n// // a hole must be an anomaly. CA/2010_VT in particular seems to have many such issues.\n\n// function eliminateAnomalousHoles(mp: any): void\n// {\n// // Normalize to multipolygon\n// if (U.depthof(mp) == 4) mp = [mp];\n\n// for (let i: number = 0; i < mp.length; i++)\n// {\n// let p: any = mp[i];\n// let cleanp: any[] = [p[0]];\n// for (let j: number = 1; j < p.length; j++)\n// {\n// let a = Poly.polyArea(p[j]);\n// if (a >= minFeatureArea)\n// cleanp.push(p[j]);\n// }\n// if (cleanp.length < p.length)\n// mp[i] = cleanp;\n// }\n// }\n\n// // Create district shapes\n// let districtShapes = {} as T.GeoFeatureCollection;\n// districtShapes['type'] = \"FeatureCollection\";\n// districtShapes['features'] = [] as T.GeoFeatureArray;\n\n// for (let districtID = 1; districtID <= nDistricts; districtID++)\n// {\n// let districtFeatures: T.GeoFeatureArray = [];\n\n// // If the district is not empty, collect its Features\n// // TODO - Should we generate degenerate shape, if a district is empty?\n// if (planByDistrictID[districtID])\n// {\n// planByDistrictID[districtID].forEach(function (geoID: string): void\n// {\n// districtFeatures.push(shapesByGeoID[geoID]);\n// });\n\n// // Union them together\n// let poly1Coordinates: any = Poly.polyNormalize(districtFeatures[0]);\n// let polyNCoordinates = districtFeatures.slice(1).map((i) => Poly.polyNormalize(i));\n// let poly = addToPoly(poly1Coordinates, polyNCoordinates);\n\n// // Convert the result to a Feature\n// let bPolygon: boolean = U.depthof(poly) == 4;\n// if (!bPolygon && poly.length == 1)\n// {\n// bPolygon = true;\n// poly = poly[0];\n// }\n\n// eliminateAnomalousHoles(poly);\n\n// let f: any = {\n// type: 'Feature',\n// properties: { districtID: `${districtID}` },\n// geometry: {\n// type: bPolygon ? 'Polygon' : 'MultiPolygon',\n// coordinates: poly\n// }\n// };\n// districtShapes.features.push(f);\n// } // End non-empty districts\n// }\n\n// // CONSTRUCT A SESSION REQUEST\n\n// let SessionRequest = {} as T.SessionRequest;\n\n// SessionRequest['title'] = \"CLI Test\";\n// SessionRequest['stateXX'] = xx;\n// SessionRequest['nDistricts'] = nDistricts;\n// SessionRequest['legislativeDistricts'] = bLegislativeDistricts;\n// SessionRequest['data'] = data;\n// SessionRequest['counties'] = counties;\n// SessionRequest['graph'] = graph;\n// SessionRequest['plan'] = planByGeoID;\n// SessionRequest['districtShapes'] = districtShapes;\n// SessionRequest['config'] = sessionSettings;\n\n// // CREATE AND INITIALIZE AN ANALYTICS SESSION\n\n// let s = new AnalyticsSession(SessionRequest);\n\n\n// // DISPATCH TO REQUESTED COMMAND W/ NEEDED SCAFFOLDING\n// let t: T.TestEntry;\n// // let text: any;\n\n// switch (command)\n// {\n// case 'valid': {\n// doPreprocessData(s);\n// if (bEmpty)\n// {\n// // Make one random district empty\n// let randomDistrict = Math.floor(Math.random() * s.state.nDistricts) + 1;\n// let reassignFeatures = s.plan._planByDistrictID[randomDistrict];\n// s.plan._planByDistrictID[S.NOT_ASSIGNED] = reassignFeatures;\n// s.plan.initializeDistrict(randomDistrict);\n// }\n// doAnalyzeDistricts(s);\n\n// let t1 = doIsComplete(s);\n// let t2 = doIsContiguous(s);\n// let t3 = doIsFreeOfHoles(s);\n// let t5 = doHasEqualPopulations(s);\n\n// doAnalyzePostProcessing(s);\n\n// echoTestResult(\"Complete:\", t1);\n// echoTestResult(\"Contiguous:\", t2);\n// echoTestResult(\"Free of holes:\", t3);\n// echoTestResult(\"Equal populations:\", t5);\n\n// break;\n// }\n// // TODO - Update this w/ scoring info\n// case 'analyze': {\n// s.analyzePlan(bLog);\n// // let planAnalytics = s.getPlanAnalytics(bLog);\n// let districtStatistics = s.getDistrictStatistics(bLog);\n\n// // echoPlanAnalytics(planAnalytics);\n// echoDistrictStatistics(districtStatistics);\n\n// break;\n// }\n// }\n\n// console.log(\"Ending command @ \", new Date());\n\n\n// // HELPER FUNCTIONS FOR ECHOING RESULTS\n\n// function echoTestResult(test: string, t: T.TestEntry): void\n// {\n// console.log(\"\");\n// console.log(\"Test:\", test);\n// console.log(\"Score:\", t['score']);\n\n// let keys = U.getObjectKeys(t['details']);\n\n// if (keys.length > 0)\n// {\n// console.log(\"Details:\");\n// for (let i in keys)\n// {\n// let key = keys[i];\n// console.log(\"-\", key, \"=\", t['details'][key]);\n// }\n// }\n\n// console.log(\"___\");\n// }\n\n// // Prepare the items in a list for rendering\n// function prepareListItems(list: any[]): string\n// {\n// if (U.isArrayEmpty(list))\n// {\n// return \"\";\n// }\n// else\n// {\n// let nItems = list.length;\n// let listStr: string;\n\n// switch (nItems)\n// {\n// case 1: {\n// listStr = list[0];\n// break;\n// }\n// case 2: {\n// listStr = list[0] + \" and \" + list[1];\n// break;\n// }\n// default: {\n// let listWithCommas = list.join(', ');\n// let lastCommaIndex = listWithCommas.length - ((list[list.length - 1].length) + 1);\n// let beforeAnd = listWithCommas.substr(0, lastCommaIndex);\n// let afterAnd = listWithCommas.substr(lastCommaIndex + 1);\n// listStr = beforeAnd + \" and \" + afterAnd;\n// break;\n// }\n// }\n// return listStr;\n// }\n// }\n\n// function formatNumber(n: number): string\n// {\n// let p = S.PRECISION;\n\n// return n.toLocaleString('en-US', { minimumFractionDigits: p, maximumFractionDigits: p });\n// }\n\n// export function echoDistrictStatistics(ds: DistrictStatistics): void\n// {\n// console.log(\"District Statistics:\");\n// for (let row of ds.table)\n// {\n// let DistrictID = row[DistrictColumn.DistrictID];\n// let TotalPop = row[DistrictColumn.TotalPop];\n// let PopDevPct = row[DistrictColumn.PopDevPct];\n// let bEqualPop = row[DistrictColumn.bEqualPop];\n// let bNotEmpty = row[DistrictColumn.bNotEmpty];\n// let bContiguous = row[DistrictColumn.bContiguous];\n// let bNotEmbedded = row[DistrictColumn.bNotEmbedded];\n// let DemPct = row[DistrictColumn.DemPct];\n// let RepPct = row[DistrictColumn.RepPct];\n// let WhitePct = row[DistrictColumn.WhitePct];\n// let MinorityPct = row[DistrictColumn.MinorityPct];\n// let BlackPct = row[DistrictColumn.BlackPct];\n// let HispanicPct = row[DistrictColumn.HispanicPct];\n// let PacificPct = row[DistrictColumn.PacificPct];\n// let AsianPct = row[DistrictColumn.AsianPct];\n// let NativePct = row[DistrictColumn.NativePct];\n// console.log(\n// DistrictID,\n// formatNumber(TotalPop),\n// formatNumber(PopDevPct),\n// bEqualPop,\n// bNotEmpty,\n// bContiguous,\n// bNotEmbedded,\n// formatNumber(DemPct),\n// formatNumber(RepPct),\n// formatNumber(WhitePct),\n// formatNumber(MinorityPct),\n// formatNumber(BlackPct),\n// formatNumber(HispanicPct),\n// formatNumber(PacificPct),\n// formatNumber(AsianPct),\n// formatNumber(NativePct)\n// );\n// }\n// console.log(\"\");\n// console.log(\"* Details:\");\n// console.log(\" - N/A\");\n// console.log(\"* Datasets:\");\n// console.log(\"- Shapes:\", ds.datasets.shapes);\n// console.log(\"- Census:\", ds.datasets.census);\n// console.log(\"- VAP:\", ds.datasets.vap);\n// console.log(\"- Election:\", ds.datasets.election);\n// console.log(\"* Resources:\");\n// console.log(\"- N/A\");\n// console.log(\"\");\n\n// }\n\n\n// // HELPERS TO LOAD SAMPLE DATA FROM DISK\n\n// // A clone of 'carefulRead' in DRA-CLI\n// export function readJSONcareful(file: string): any\n// {\n// try\n// {\n// let s: string = fs.readFileSync(file, 'utf8');\n// let o: any = JSON.parse(s);\n// return o;\n// }\n// catch (err)\n// {\n// console.log(\"Error reading JSON file ...\");\n// return null;\n// }\n// }\n\n// export function readJSON(file: string): any\n// {\n// let fullPath: string;\n// if (path.isAbsolute(file))\n// {\n// fullPath = file;\n// }\n// else\n// {\n// fullPath = path.resolve(file);\n// }\n\n// return readJSONcareful(fullPath);\n// }\n\n// // Following the clone above, except for CSV, using the csv-parse/sync API\n// export function readCSV(file: string): any\n// {\n// try\n// {\n// let input: string = fs.readFileSync(file, 'utf8');\n// let dictRows: any = parse(input, {\n// columns: true,\n// skip_empty_lines: true\n// });\n// return dictRows;\n// }\n// catch (err)\n// {\n// console.log(\"Error reading CSV file ...\");\n// return null;\n// }\n// }\n\n// // Read a plan from a .csv file\n// export function readPlanCSV(file: string): T.PlanByGeoID\n// {\n// var plan = {} as T.PlanByGeoID;\n\n// let fullPath: string;\n// if (path.isAbsolute(file))\n// {\n// fullPath = file;\n// }\n// else\n// {\n// fullPath = path.resolve(file);\n// }\n\n// var csvArray: any = readCSV(fullPath);\n\n// for (let dictRow of csvArray)\n// {\n// let geoID: string = dictRow['GEOID'];\n// let districtID: number = Number(dictRow['DISTRICT']);\n\n// plan[geoID] = districtID;\n// }\n\n// return plan;\n// }\n\n\n// // END\n"],"sourceRoot":""}
|
package/dist/src/geofeature.d.ts
DELETED
|
File without changes
|