Last active
March 6, 2020 14:34
-
-
Save Zia-/0235fc468504e95a9be2a4bf32f9df2c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require('fs') | |
const flat = require('flat') | |
const l = require('lodash') | |
const dirTree = require("directory-tree"); | |
var unzippedTurkeyDir = '/Users/zzz/exp/rubbish/gm_test/turkey_regions/TÜRKİYE' | |
var exportJSONforMongo = '/Users/zzz/exp/rubbish/gm_test/turkey_regions/places.json' | |
// fs.appendFileSync('/Users/zzz/exp/rubbish/gm_test/osm_turkey/result.json', '['); | |
function getCentCoord(geojsonFile) { | |
var geojson = fs.readFileSync(geojsonFile); | |
var geojsonParsed = JSON.parse(geojson) | |
var regionsList = geojsonParsed.properties.request | |
if (geojsonParsed.features.length > 0) { | |
var coord = geojsonParsed.features[0].geometry.coordinates | |
var flatCoord = flat(coord) | |
var coordXY = l.values(flatCoord) | |
var xArr = [] | |
var yArr = [] | |
l.map(coordXY, (item, index) => { | |
(index%2 == 0) ? (xArr.push(item)) : (yArr.push(item)) | |
}) | |
// var crsExtent = [ | |
// l.min(xArr), | |
// l.min(yArr), | |
// l.max(xArr), | |
// l.max(yArr) | |
// ] | |
xCnt = (l.min(xArr) + l.max(xArr))/2 | |
yCnt = (l.min(yArr) + l.max(yArr))/2 | |
// console.log(crsExtent) | |
regionsList = regionsList.split(',') | |
regionsList = l.map(regionsList, (i) => {return i.trim()}) | |
return { | |
"regions": regionsList, | |
"coord": [xCnt, yCnt] | |
} | |
} else { | |
return { | |
"regions": null, | |
"coord": null | |
} | |
} | |
} | |
function loopingDir(nestedTree) { | |
if ('children' in nestedTree) { | |
for (var i=0; i<nestedTree.children.length; i++) { | |
loopingDir(nestedTree.children[i]) | |
} | |
} else { | |
if (nestedTree.name == '.DS_Store') { | |
// pass | |
} else { | |
singleTreeAll = {} | |
// var path = nestedTree.path | |
// var relativePath = path.substring(basePathLength+1); | |
// singleTreeAll['path'] = relativePath.substring(0, relativePath.lastIndexOf("/")) | |
// singleTreeAll['coord'] = getCentCoord(nestedTree.path) | |
var {regions, coord} = getCentCoord(nestedTree.path) | |
if (coord != null) { | |
singleTreeAll['regions'] = regions | |
singleTreeAll['coord'] = coord | |
// if (counter != 0) { | |
// fs.appendFileSync('/Users/zzz/exp/rubbish/gm_test/osm_turkey/result.json', ',' + '\n'); | |
// } else { | |
// counter = 1 | |
// } | |
// fs.appendFileSync('/Users/zzz/exp/rubbish/gm_test/osm_turkey/result.json', JSON.stringify(singleTreeAll)); | |
parentList.push(singleTreeAll) | |
} | |
} | |
} | |
} | |
const tree = dirTree(unzippedTurkeyDir); | |
var parentList = [] | |
// var basePathLength = tree.path.substring(0, tree.path.lastIndexOf("/")).length | |
loopingDir(tree) | |
// fs.appendFileSync('/Users/zzz/exp/rubbish/gm_test/osm_turkey/result.json', ']'); | |
// console.log(parentList) | |
var finalPair = [] | |
for (var i=0; i< parentList.length; i++) { | |
var singleRegionsList = parentList[i].regions | |
singleRegionsList = l.map(singleRegionsList, (i) => {return i.trim()}) | |
var regionsAllCombi = [] | |
// finalPair.push(singleRegionsList) | |
finalPair.push(JSON.stringify(singleRegionsList)) | |
// regionsAllCombi.push(singleRegionsList) | |
for (var j=1; j< singleRegionsList.length; j++){ | |
var singleItem = singleRegionsList.slice(0, -1 * j) | |
finalPair.push(JSON.stringify(singleItem)) | |
// finalPair.push(singleItem) | |
// regionsAllCombi.push(singleItem) | |
} | |
// finalPair.push(regionsAllCombi) | |
} | |
finalPair = l.union(finalPair) | |
finalPair = l.map(finalPair, (i) => { | |
return JSON.parse(i) | |
}) | |
// console.log(finalPair) | |
// console.log(parentList) | |
var counter = 0 | |
fs.appendFileSync(exportJSONforMongo, '['); | |
for (var i=0; i<finalPair.length; i++) { | |
var coordList = [] | |
var lengthFinalPair = finalPair[i].length | |
for (var j=0; j<parentList.length; j++) { | |
var parentSlice = parentList[j].regions.slice(0, lengthFinalPair) | |
if (l.isEqual(parentSlice, finalPair[i])) { | |
coordList.push(parentList[j].coord) | |
} | |
} | |
var xList = [] | |
var yList = [] | |
for (var k=0; k<coordList.length; k++) { | |
xList.push(coordList[k][0]) | |
yList.push(coordList[k][1]) | |
} | |
x = (xList.reduce((a, b) => a + b, 0))/xList.length | |
y = (yList.reduce((a, b) => a + b, 0))/yList.length | |
x = Math.trunc(x * 1000000) | |
y = Math.trunc(y * 1000000) | |
var coord = [x,y] | |
var zoom = finalPair[i].length | |
// Turkish entry | |
var place = l.reverse(finalPair[i]) | |
place.splice(-1,1) | |
place.push('TÜRKİYE') | |
place = l.map(place, (i) => { | |
var letters = { "A": "a", "B": "b", "C": "c", "D": "d", "E": "e", "F": "f", "G": "g", "H": "h", "J": "j", "K": "k", "L": "l", "M": "m", "N": "n", "O": "o", "P": "p", "Q": "q", "R": "r", "S": "s", "T": "t", "U": "u", "V": "v", "W": "w", "X": "x", "Y": "y", "Z": "z", "İ": "i", "I": "ı", "Ş": "ş", "Ğ": "ğ", "Ü": "ü", "Ö": "ö", "Ç": "ç" }; | |
var cc = i.slice(1) | |
cc = cc.replace(/(([ABCDEFGHJKLMNOPQRSTUVWXYZİIŞĞÜÇÖ]))/g, function(letter){ return letters[letter]; }) | |
// console.log(i.charAt(0) + cc) | |
return i.charAt(0) + cc | |
}) | |
place = place.toString() | |
place = place.replace("mah.", "Mahallesi") | |
place = place.replace(/,/g, ", ") | |
if (counter != 0) { | |
fs.appendFileSync(exportJSONforMongo, ',' + '\n'); | |
} else { | |
counter = 1 | |
} | |
fs.appendFileSync(exportJSONforMongo, '{"p":'+ JSON.stringify(place) +',"c":[' + coord +'],"l":"tr","d":' + zoom + '}'); // p => place, c => coordinates, l => language, d => details/level of depth | |
// English Entry | |
var place1 = finalPair[i] | |
place1.splice(-1,1) | |
place1.push('TÜRKİYE') | |
place1 = l.map(place1, (i) => { | |
var letters = { "A": "a", "B": "b", "C": "c", "D": "d", "E": "e", "F": "f", "G": "g", "H": "h", "J": "j", "K": "k", "L": "l", "M": "m", "N": "n", "O": "o", "P": "p", "Q": "q", "R": "r", "S": "s", "T": "t", "U": "u", "V": "v", "W": "w", "X": "x", "Y": "y", "Z": "z", "İ": "i", "I": "i", "Ş": "s", "Ğ": "g", "Ü": "u", "Ö": "o", "Ç": "c" }; | |
var cc = i | |
cc = cc.replace(/(([ABCDEFGHJKLMNOPQRSTUVWXYZİIŞĞÜÇÖ]))/g, function(letter){ return letters[letter]; }) | |
// console.log(i.charAt(0) + cc) | |
cc = cc.charAt(0).toUpperCase() + cc.slice(1) | |
return cc | |
}) | |
place1 = place1.toString() | |
place1 = place1.replace("mah.", "Mahallesi") | |
place1 = place1.replace(/,/g, ", ") | |
if (counter != 0) { | |
fs.appendFileSync(exportJSONforMongo, ',' + '\n'); | |
} else { | |
counter = 1 | |
} | |
fs.appendFileSync(exportJSONforMongo, '{"p":'+ JSON.stringify(place1) +',"c":[' + coord +'],"l":"en","d":' + zoom + '}'); // p => place, c => coordinates, l => language, d => details/level of depth | |
} | |
fs.appendFileSync(exportJSONforMongo, ']'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment