/** Prepare Smart M.App BI Data* 2017-06-02 Piotr Szrajber <piotr.szrajber@hexagongeospatial.com>** Requirements: Node.js, "shapefile" dependency* (> npm i --save shapefile) ** Installation: * save this file as prepare_bi_data.js* * Usage:* > node prepare_bi_data.js <your_folder_with_shapefile> <output_name_without_extension>** Note: this version supports only one shapefile & dbf in the folder. Their names must match** Example:* > node prepare_bi_data.js ./shapefiles/ Segments_optimized** Output:* two files Segments_optimized.geojson and Segments_optimized.csv*/// BEGIN Edit to match your datavarcolumns="ID2,NetworkLev,A_CATEGORY,V_CATEGORY,Network_st,PSID".split(",");varprocessors={NetworkLev:function(v){return{Primary:0,Secondary:1}[v];},A_CATEGORY:function(v){return{OK:0,WARNING:1,ALARM:2}[v];},V_CATEGORY:function(v){return{OK:0,WARNING:1,ALARM:2}[v];},Network_st:function(v){return{OK:0,WARNING:1,ALARM:2,"Not Measured":3}[v];},V_REL:function(v){return+v.replace(/[^\d]/,"");}};// END Edit to match your datavarshapefile=require("shapefile");varfs=require("fs");varpath=process.argv[2];varoutputName=process.argv[3]||"output";varkey_property="ID2";//TODO: hardcoded// https://bitbucket.org/snippets/pszrajbe/6nn9d/geojson-to-csvfunctiongeojson2csv(x,header,processors){varheader=header||Object.keys(x.features[0].properties);return[header].concat(x.features.map(function(feature){returnheader.map(function(col){varvalue=feature.properties[col];if(processors&&processors[col]){value=processors[col](value);}returnvalue;}).join(",");})).join("\n");}fs.readdir(path,(err,files)=>{varshp=files.find(file=>/.shp$/i.test(file));vardbf=files.find(file=>/.dbf$/i.test(file)&&shp.replace(/.shp$/i,"").toLowerCase()==file.replace(/.dbf$/i,"").toLowerCase());console.log(shp,dbf);shapefile.read(path+shp,path+dbf).then(json=>{varcsv=geojson2csv(json,columns,processors);fs.writeFile(`${outputName}.csv`,csv);json.features=json.features.map(function(feature){return{type:"Feature",geometry:feature.geometry,properties:{ID2:feature.properties[key_property]}};});fs.writeFile(`${outputName}.geojson`,JSON.stringify(json));});});
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.