forked from MapComplete/MapComplete
		
	Various fixes for bot
This commit is contained in:
		
							parent
							
								
									25c33d557d
								
							
						
					
					
						commit
						bd03a5a76a
					
				
					 3 changed files with 84 additions and 39 deletions
				
			
		|  | @ -5,7 +5,8 @@ import {BBox} from "../BBox"; | |||
| export interface GeoCodeResult { | ||||
|     display_name: string, | ||||
|     lat: number, lon: number, boundingbox: number[], | ||||
|     osm_type: string, osm_id: string | ||||
|     osm_type: "node" | "way" | "relation", | ||||
|     osm_id: string | ||||
| } | ||||
| 
 | ||||
| export class Geocoding { | ||||
|  |  | |||
|  | @ -4,6 +4,7 @@ import {Utils} from "../../Utils"; | |||
| import {UIEventSource} from "../UIEventSource"; | ||||
| import {BBox} from "../BBox"; | ||||
| import * as osmtogeojson from "osmtogeojson"; | ||||
| import {FeatureCollection} from "@turf/turf"; | ||||
| 
 | ||||
| /** | ||||
|  * Interfaces overpass to get all the latest data | ||||
|  | @ -34,12 +35,19 @@ export class Overpass { | |||
|         this._relationTracker = relationTracker | ||||
|     } | ||||
| 
 | ||||
|     public async queryGeoJson(bounds: BBox): Promise<[any, Date]> { | ||||
| 
 | ||||
|         let query = this.buildQuery("[bbox:" + bounds.getSouth() + "," + bounds.getWest() + "," + bounds.getNorth() + "," + bounds.getEast() + "]") | ||||
| 
 | ||||
|     public async queryGeoJson(bounds: BBox, ): Promise<[FeatureCollection, Date]> { | ||||
|         const bbox = "[bbox:" + bounds.getSouth() + "," + bounds.getWest() + "," + bounds.getNorth() + "," + bounds.getEast() + "]"; | ||||
|         const query = this.buildScript(bbox) | ||||
|         return this.ExecuteQuery(query); | ||||
|     } | ||||
|      | ||||
|     public buildUrl(query: string){ | ||||
|         return `${this._interpreterUrl}?data=${encodeURIComponent(query)}` | ||||
|     } | ||||
|      | ||||
|     public async ExecuteQuery(query: string):Promise<[FeatureCollection, Date]>  { | ||||
|         const self = this; | ||||
|         const json = await Utils.downloadJson(query) | ||||
|         const json = await Utils.downloadJson(this.buildUrl(query)) | ||||
| 
 | ||||
|         if (json.elements.length === 0 && json.remark !== undefined) { | ||||
|             console.warn("Timeout or other runtime error while querying overpass", json.remark); | ||||
|  | @ -52,11 +60,12 @@ export class Overpass { | |||
|         self._relationTracker?.RegisterRelations(json) | ||||
|         const geojson = osmtogeojson.default(json); | ||||
|         const osmTime = new Date(json.osm3s.timestamp_osm_base); | ||||
|         return [geojson, osmTime]; | ||||
|         return [<any> geojson, osmTime]; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Constructs the actual script | ||||
|      * Constructs the actual script to execute on Overpass | ||||
|      * 'PostCall' can be used to set an extra range, see 'AsOverpassTurboLink' | ||||
|      *  | ||||
|      * import {Tag} from "../Tags/Tag"; | ||||
|      *  | ||||
|  | @ -79,12 +88,41 @@ export class Overpass { | |||
|         } | ||||
|         return`[out:json][timeout:${this._timeout.data}]${bbox};(${filter});out body;${this._includeMeta ? 'out meta;' : ''}>;out skel qt;` | ||||
|     } | ||||
|      | ||||
|     public buildQuery(bbox: string): string { | ||||
|         const query = this.buildScript(bbox) | ||||
|         return `${this._interpreterUrl}?data=${encodeURIComponent(query)}` | ||||
|     /** | ||||
|      * Constructs the actual script to execute on Overpass with geocoding | ||||
|      * 'PostCall' can be used to set an extra range, see 'AsOverpassTurboLink' | ||||
|      * | ||||
|      */ | ||||
|     public buildScriptInArea(area: {osm_type: "way" | "relation", osm_id: number}, pretty = false): string { | ||||
|         const filters = this._filter.asOverpass() | ||||
|         let filter = "" | ||||
|         for (const filterOr of filters) { | ||||
|             if(pretty){ | ||||
|                 filter += "    " | ||||
|             } | ||||
|             filter += 'nwr' + filterOr + '(area.searchArea);' | ||||
|             if(pretty){ | ||||
|                 filter+="\n" | ||||
|             } | ||||
|         } | ||||
|         for (const extraScript of this._extraScripts) { | ||||
|             filter += '(' + extraScript + ');'; | ||||
|         } | ||||
|         let id = area.osm_id; | ||||
|         if(area.osm_type === "relation"){ | ||||
|             id += 3600000000 | ||||
|         } | ||||
|         return`[out:json][timeout:${this._timeout.data}];
 | ||||
|         area(id:${id})->.searchArea; | ||||
|         (${filter}); | ||||
|         out body;${this._includeMeta ? 'out meta;' : ''}>;out skel qt;` | ||||
|     } | ||||
| 
 | ||||
|      | ||||
|      | ||||
|     public buildQuery(bbox: string) { | ||||
|         return this.buildUrl(this.buildScript(bbox)) | ||||
|     } | ||||
|      | ||||
|     /** | ||||
|      * Little helper method to quickly open overpass-turbo in the browser | ||||
|      */ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue