Fix duplicate building upload in GRB theme (hopefully), remove type from method name, improve typing and error messages

This commit is contained in:
Pieter Vander Vennet 2024-01-04 23:42:47 +01:00
parent fc483ed547
commit b8a631f368
11 changed files with 49 additions and 26 deletions

View file

@ -22,7 +22,7 @@
]
},
"icon": {
"render": "addSmall:#000",
"render": "addSmall",
"mappings": [
{
"if": "detach=yes",

5
package-lock.json generated
View file

@ -1,12 +1,12 @@
{
"name": "mapcomplete",
"version": "0.36.9",
"version": "0.36.11",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "mapcomplete",
"version": "0.36.9",
"version": "0.36.11",
"license": "GPL-3.0-or-later",
"dependencies": {
"@rgossiaux/svelte-headlessui": "^1.0.2",
@ -15,6 +15,7 @@
"@turf/boolean-intersects": "^6.5.0",
"@turf/buffer": "^6.5.0",
"@turf/collect": "^6.5.0",
"@turf/difference": "^6.5.0",
"@turf/distance": "^6.5.0",
"@turf/length": "^6.5.0",
"@turf/turf": "^6.5.0",

View file

@ -103,6 +103,7 @@
"@turf/boolean-intersects": "^6.5.0",
"@turf/buffer": "^6.5.0",
"@turf/collect": "^6.5.0",
"@turf/difference": "^6.5.0",
"@turf/distance": "^6.5.0",
"@turf/length": "^6.5.0",
"@turf/turf": "^6.5.0",

View file

@ -264,7 +264,8 @@ class ClosestNObjectFunc implements ExtraFunction {
const bbox = GeoOperations.bbox(
GeoOperations.buffer(GeoOperations.bbox(feature), maxDistance)
)
allFeatures = params.getFeaturesWithin(name, new BBox(bbox.geometry.coordinates))
const coors = <[number, number][]>bbox.geometry.coordinates
allFeatures = params.getFeaturesWithin(name, new BBox(coors))
} else {
allFeatures = [features]
}

View file

@ -39,8 +39,8 @@ export default class FeatureSourceMerger implements IndexedFeatureSource {
})
}
protected addData(featuress: Feature[][]) {
featuress = Utils.NoNull(featuress)
protected addData(sources: Feature[][]) {
sources = Utils.NoNull(sources)
let somethingChanged = false
const all: Map<string, Feature> = new Map()
const unseen = new Set<string>()
@ -51,7 +51,7 @@ export default class FeatureSourceMerger implements IndexedFeatureSource {
unseen.add(oldValue.properties.id)
}
for (const features of featuress) {
for (const features of sources) {
for (const f of features) {
const id = f.properties.id
unseen.delete(id)

View file

@ -6,7 +6,7 @@ import FeatureSourceMerger from "../Sources/FeatureSourceMerger"
/***
* A tiled source which dynamically loads the required tiles at a fixed zoom level.
* A single featureSource will be initiliased for every tile in view; which will alter be merged into this featureSource
* A single featureSource will be initialized for every tile in view; which will later be merged into this featureSource
*/
export default class DynamicTileSource extends FeatureSourceMerger {
constructor(

View file

@ -153,7 +153,7 @@ export class GeoOperations {
continue
}
const intersection = GeoOperations.calculateInstersection(
const intersection = GeoOperations.calculateIntersection(
feature,
otherFeature,
featureBBox
@ -184,7 +184,7 @@ export class GeoOperations {
// Calculate the surface area of the intersection
const intersection = this.calculateInstersection(feature, otherFeature, featureBBox)
const intersection = this.calculateIntersection(feature, otherFeature, featureBBox)
if (intersection === null) {
continue
}
@ -1029,7 +1029,7 @@ export class GeoOperations {
* Returns 0 if both are linestrings
* Returns null if the features are not intersecting
*/
private static calculateInstersection(
private static calculateIntersection(
feature,
otherFeature,
featureBBox: BBox,
@ -1099,7 +1099,7 @@ export class GeoOperations {
return null
}
if (otherFeature.geometry.type === "LineString") {
return this.calculateInstersection(
return this.calculateIntersection(
otherFeature,
feature,
otherFeatureBBox,
@ -1119,6 +1119,19 @@ export class GeoOperations {
// See https://github.com/Turfjs/turf/pull/2238
return null
}
if (e.message.indexOf("SweepLine tree") >= 0) {
console.log("Applying fallback intersection...")
const intersection = turf.intersect(
turf.truncate(feature),
turf.truncate(otherFeature)
)
if (intersection == null) {
return null
}
return turf.area(intersection) // in m²
// Another workaround: https://github.com/Turfjs/turf/issues/2258
}
throw e
}
}

View file

@ -274,17 +274,20 @@ export default class MetaTagging {
console.warn(
"Could not calculate a " +
(isStrict ? "strict " : "") +
" calculated tag for key " +
key +
" defined by " +
code +
" (in layer" +
layerId +
"calculated tag for key",
key,
"for feature",
feat.properties.id,
" defined by",
code,
"(in layer",
layerId +
") due to \n" +
e +
"\n. Are you the theme creator? Doublecheck your code. Note that the metatags might not be stable on new features",
e,
e.stack
e.stack,
{ feat }
)
MetaTagging.errorPrintCount++
if (MetaTagging.errorPrintCount == MetaTagging.stopErrorOutputAt) {

View file

@ -148,7 +148,6 @@ export class Changes {
}
public applyChanges(changes: ChangeDescription[]) {
console.log("Received changes:", changes)
this.pendingChanges.data.push(...changes)
this.pendingChanges.ping()
this.allChanges.data.push(...changes)
@ -191,7 +190,6 @@ export class Changes {
}
// This is a new object that should be created
states.set(id, "created")
console.log("Creating object for changeDescription", change)
let osmObj: OsmObject = undefined
switch (change.type) {
case "node":
@ -255,7 +253,6 @@ export class Changes {
const nlon = Utils.Round7(change.changes.lon)
const n = <OsmNode>obj
if (n.lat !== nlat || n.lon !== nlon) {
console.log("Node moved:", n.lat, nlat, n.lon, nlon)
n.lat = nlat
n.lon = nlon
changed = true
@ -443,7 +440,6 @@ export class Changes {
objects.forEach((obj) => SimpleMetaTagger.removeBothTagging(obj.tags))
}
console.log("Got the fresh objects!", objects, "pending: ", pending)
if (pending.length == 0) {
console.log("No pending changes...")
return true
@ -528,9 +524,7 @@ export class Changes {
await this._changesetHandler.UploadChangeset(
(csId, remappings) => {
if (remappings.size > 0) {
console.log("Rewriting pending changes from", pending, "with", remappings)
pending = pending.map((ch) => ChangeDescriptionTools.rewriteIds(ch, remappings))
console.log("Result is", pending)
}
const changes: {

View file

@ -30,6 +30,7 @@
import Direction_gradient from "../../assets/svg/Direction_gradient.svelte"
import Mastodon from "../../assets/svg/Mastodon.svelte"
import Party from "../../assets/svg/Party.svelte"
import AddSmall from "../../assets/svg/AddSmall.svelte"
/**
* Renders a single icon.
@ -111,6 +112,8 @@
<Mastodon {color} class={clss} />
{:else if icon === "party"}
<Party {color} class={clss} />
{:else if icon === "addSmall"}
<AddSmall {color} class={clss} />
{:else}
<img class={clss ?? "h-full w-full"} src={icon} aria-hidden="true" alt="" />
{/if}

View file

@ -159,7 +159,7 @@ class ApplyButton extends UIElement {
private async Run() {
try {
console.log("Applying auto-action on " + this.target_feature_ids.length + " features")
const appliedOn: string[] = []
for (let i = 0; i < this.target_feature_ids.length; i++) {
const targetFeatureId = this.target_feature_ids[i]
const feature = this.state.indexedFeatures.featuresById.data.get(targetFeatureId)
@ -190,6 +190,7 @@ class ApplyButton extends UIElement {
specialRendering.args
)
}
appliedOn.push(targetFeatureId)
if (i % 50 === 0) {
await this.state.changes.flushChanges("Auto button: intermediate save")
}
@ -198,6 +199,12 @@ class ApplyButton extends UIElement {
console.log("Flushing changes...")
await this.state.changes.flushChanges("Auto button: done")
this.buttonState.setData("done")
console.log(
"Applied changes onto",
appliedOn.length,
"items, unique IDs:",
new Set(appliedOn).size
)
} catch (e) {
console.error("Error while running autoApply: ", e)
this.buttonState.setData({ error: e })