Skip to content

Instantly share code, notes, and snippets.

@Zia-
Last active March 6, 2020 14:34
Show Gist options
  • Save Zia-/0235fc468504e95a9be2a4bf32f9df2c to your computer and use it in GitHub Desktop.
Save Zia-/0235fc468504e95a9be2a4bf32f9df2c to your computer and use it in GitHub Desktop.
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