forked from MapComplete/MapComplete
Scripts: fix import into smaller parts
This commit is contained in:
parent
6ca410d26f
commit
5b4743be57
1 changed files with 147 additions and 6 deletions
|
@ -1,6 +1,6 @@
|
||||||
import Script from "../Script"
|
import Script from "../Script"
|
||||||
import { existsSync, promises as fs, readFileSync, writeFile, writeFileSync } from "fs"
|
import { existsSync, promises as fs, readFileSync, writeFile, writeFileSync } from "fs"
|
||||||
import { Feature, FeatureCollection, Point } from "geojson"
|
import { Feature, FeatureCollection, Point, Polygon } from "geojson"
|
||||||
import { join } from "path"
|
import { join } from "path"
|
||||||
import sqlite3, { Database } from "sqlite3"
|
import sqlite3, { Database } from "sqlite3"
|
||||||
import { open } from "sqlite"
|
import { open } from "sqlite"
|
||||||
|
@ -15,6 +15,7 @@ import ChangeTagAction from "../../src/Logic/Osm/Actions/ChangeTagAction"
|
||||||
import { Tag as OsmTag } from "../../src/Logic/Tags/Tag"
|
import { Tag as OsmTag } from "../../src/Logic/Tags/Tag"
|
||||||
import { Changes } from "../../src/Logic/Osm/Changes"
|
import { Changes } from "../../src/Logic/Osm/Changes"
|
||||||
import ScriptUtils from "../ScriptUtils"
|
import ScriptUtils from "../ScriptUtils"
|
||||||
|
import { GeoOperations } from "../../src/Logic/GeoOperations"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Note:
|
* Note:
|
||||||
|
@ -56,6 +57,125 @@ function mediaUrl(sha: string | { "sha1": string }): string {
|
||||||
return `https://openbenches.org/image/${sha}.jpg`
|
return `https://openbenches.org/image/${sha}.jpg`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const uk: Feature<Polygon> = {
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
3.139397666817615,
|
||||||
|
53.112746745001914
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.12546232547020963,
|
||||||
|
61.34289409315957
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-5.193638926198332,
|
||||||
|
60.3858935023425
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-12.316831332595541,
|
||||||
|
56.76308878364702
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-12.586640816376246,
|
||||||
|
51.076733390490034
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-3.6443836396576046,
|
||||||
|
49.4256703574342
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0194660085441853,
|
||||||
|
50.442813369706585
|
||||||
|
],
|
||||||
|
[
|
||||||
|
3.139397666817615,
|
||||||
|
53.112746745001914
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const us : Feature<Polygon> = {
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
-171.55472370762342,
|
||||||
|
71.44263911390138
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-171.31347027402668,
|
||||||
|
33.24735774004321
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-105.9804086342826,
|
||||||
|
-3.5292610992716362
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-57.00596161415962,
|
||||||
|
15.805666337324794
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-32.880618254493015,
|
||||||
|
49.584578264365916
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-47.35582427029317,
|
||||||
|
72.85409976292118
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-101.60890406091582,
|
||||||
|
79.0557752859543
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-171.55472370762342,
|
||||||
|
71.44263911390138
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const australia: Feature<Polygon> = {
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
177.6309142850211,
|
||||||
|
-48.72845301037672
|
||||||
|
],
|
||||||
|
[
|
||||||
|
177.6309142850211,
|
||||||
|
-8.050870320392335
|
||||||
|
],
|
||||||
|
[
|
||||||
|
107.59695622498174,
|
||||||
|
-8.050870320392335
|
||||||
|
],
|
||||||
|
[
|
||||||
|
107.59695622498174,
|
||||||
|
-48.72845301037672
|
||||||
|
],
|
||||||
|
[
|
||||||
|
177.6309142850211,
|
||||||
|
-48.72845301037672
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const areas = {uk, us, australia}
|
||||||
|
|
||||||
class Openbenches extends Script {
|
class Openbenches extends Script {
|
||||||
private db: Database
|
private db: Database
|
||||||
|
|
||||||
|
@ -200,14 +320,14 @@ class Openbenches extends Script {
|
||||||
return JSON.parse(readFileSync(alreadyImportedPath, "utf-8"))
|
return JSON.parse(readFileSync(alreadyImportedPath, "utf-8"))
|
||||||
}
|
}
|
||||||
|
|
||||||
async conflate(osmData: FeatureCollection, openBenchesData: FeatureCollection) {
|
async conflate(osmData: Feature[], openBenchesData: FeatureCollection, area: string = "") {
|
||||||
const dict: Map<string, Feature> = new Map()
|
const dict: Map<string, Feature> = new Map()
|
||||||
for (const bench of openBenchesData.features) {
|
for (const bench of openBenchesData.features) {
|
||||||
const obid = bench.properties["openbenches:id"]
|
const obid = bench.properties["openbenches:id"]
|
||||||
dict.set("" + obid, bench)
|
dict.set("" + obid, bench)
|
||||||
}
|
}
|
||||||
const changes: OsmChangeAction[] = []
|
const changes: OsmChangeAction[] = []
|
||||||
for (const bench of osmData.features) {
|
for (const bench of osmData) {
|
||||||
const obid = bench.properties["openbenches:id"]
|
const obid = bench.properties["openbenches:id"]
|
||||||
const ob = dict.get(obid)
|
const ob = dict.get(obid)
|
||||||
if (!ob) {
|
if (!ob) {
|
||||||
|
@ -256,8 +376,11 @@ class Openbenches extends Script {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(changes.length === 0){
|
||||||
|
return
|
||||||
|
}
|
||||||
const xml = await Changes.createChangesetXMLForJosm(changes)
|
const xml = await Changes.createChangesetXMLForJosm(changes)
|
||||||
writeFileSync("attributes_import.osc",xml, "utf-8")
|
writeFileSync(`attributes_import${area}.osc`,xml, "utf-8")
|
||||||
}
|
}
|
||||||
|
|
||||||
async main(args: string[]): Promise<void> {
|
async main(args: string[]): Promise<void> {
|
||||||
|
@ -289,6 +412,7 @@ class Openbenches extends Script {
|
||||||
tagsOnBenches.get(bench).push(tags.get(tg.tagID))
|
tagsOnBenches.get(bench).push(tags.get(tg.tagID))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const alreadyLinked = new Set(osmData.features.map(f => f.properties["openbenches:id"]))
|
||||||
const r = await this.all<Bench & User>("SELECT * FROM benches INNER JOIN users ON benches.userID = users.userID")
|
const r = await this.all<Bench & User>("SELECT * FROM benches INNER JOIN users ON benches.userID = users.userID")
|
||||||
const features: Feature<Point>[] = []
|
const features: Feature<Point>[] = []
|
||||||
for (let i = 0; i < r.length; i++) {
|
for (let i = 0; i < r.length; i++) {
|
||||||
|
@ -310,7 +434,12 @@ class Openbenches extends Script {
|
||||||
type: "FeatureCollection", features,
|
type: "FeatureCollection", features,
|
||||||
}, null, " "), "utf-8")
|
}, null, " "), "utf-8")
|
||||||
|
|
||||||
const maproulette = features.map(f => {
|
const maproulette = features
|
||||||
|
.filter(f => {
|
||||||
|
const openbenchesId = f.properties["openbenches:id"]
|
||||||
|
return !alreadyLinked.has(openbenchesId)
|
||||||
|
})
|
||||||
|
.map(f => {
|
||||||
const properties = {tags: JSON.stringify(f.properties)}
|
const properties = {tags: JSON.stringify(f.properties)}
|
||||||
properties["id"] = "openbenches/"+f.properties["openbenches:id"]
|
properties["id"] = "openbenches/"+f.properties["openbenches:id"]
|
||||||
return {...f, properties}
|
return {...f, properties}
|
||||||
|
@ -319,9 +448,21 @@ class Openbenches extends Script {
|
||||||
type: "FeatureCollection", features: maproulette,
|
type: "FeatureCollection", features: maproulette,
|
||||||
}, null, " "), "utf-8")
|
}, null, " "), "utf-8")
|
||||||
|
|
||||||
|
if(!createTest){
|
||||||
|
writeFileSync(`openbenches_export_maproulette_first_100.geojson`, JSON.stringify({
|
||||||
|
type: "FeatureCollection", features: maproulette.slice(0, 100),
|
||||||
|
}, null, " "), "utf-8")
|
||||||
|
}
|
||||||
|
|
||||||
const openBenches = JSON.parse(readFileSync("openbenches_export_josm_.geojson", "utf-8"))
|
const openBenches = JSON.parse(readFileSync("openbenches_export_josm_.geojson", "utf-8"))
|
||||||
// await this.conflate(osmData, openBenches)
|
for (const area in areas) {
|
||||||
|
const areaGeo = areas[area]
|
||||||
|
await this.conflate(osmData.features.filter(
|
||||||
|
f => GeoOperations.inside(GeoOperations.centerpointCoordinates(f),
|
||||||
|
areaGeo)
|
||||||
|
), openBenches, "_"+area)
|
||||||
|
}
|
||||||
|
await this.conflate(osmData.features, openBenches, "_all")
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue