forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			54 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { Utils } from "../../Utils"
 | 
						|
import { Feature } from "geojson"
 | 
						|
import { Point } from "@turf/turf"
 | 
						|
import { GeoLocationPointProperties } from "../../Logic/Actors/GeoLocationHandler"
 | 
						|
import UploadTraceToOsmUI from "../BigComponents/UploadTraceToOsmUI"
 | 
						|
import { SpecialVisualization } from "../SpecialVisualization"
 | 
						|
 | 
						|
/**
 | 
						|
 * Wrapper  around 'UploadTraceToOsmUI'
 | 
						|
 */
 | 
						|
export class UploadToOsmViz implements SpecialVisualization {
 | 
						|
    funcName = "upload_to_osm"
 | 
						|
    docs =
 | 
						|
        "Uploads the GPS-history as GPX to OpenStreetMap.org; clears the history afterwards. The actual feature is ignored."
 | 
						|
    args = []
 | 
						|
 | 
						|
    constr(state, featureTags, args) {
 | 
						|
        function getTrace(title: string) {
 | 
						|
            title = title?.trim()
 | 
						|
            if (title === undefined || title === "") {
 | 
						|
                title = "Uploaded with MapComplete"
 | 
						|
            }
 | 
						|
            title = Utils.EncodeXmlValue(title)
 | 
						|
            const userLocations: Feature<Point, GeoLocationPointProperties>[] =
 | 
						|
                state.historicalUserLocations.features.data.map((f) => f.feature)
 | 
						|
            const trackPoints: string[] = []
 | 
						|
            for (const l of userLocations) {
 | 
						|
                let trkpt = `    <trkpt lat="${l.geometry.coordinates[1]}" lon="${l.geometry.coordinates[0]}">`
 | 
						|
                trkpt += `        <time>${l.properties.date}</time>`
 | 
						|
                if (l.properties.altitude !== null && l.properties.altitude !== undefined) {
 | 
						|
                    trkpt += `        <ele>${l.properties.altitude}</ele>`
 | 
						|
                }
 | 
						|
                trkpt += "    </trkpt>"
 | 
						|
                trackPoints.push(trkpt)
 | 
						|
            }
 | 
						|
            const header =
 | 
						|
                '<gpx version="1.1" creator="MapComplete track uploader" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">'
 | 
						|
            return (
 | 
						|
                header +
 | 
						|
                "\n<name>" +
 | 
						|
                title +
 | 
						|
                "</name>\n<trk><trkseg>\n" +
 | 
						|
                trackPoints.join("\n") +
 | 
						|
                "\n</trkseg></trk></gpx>"
 | 
						|
            )
 | 
						|
        }
 | 
						|
 | 
						|
        return new UploadTraceToOsmUI(getTrace, state, {
 | 
						|
            whenUploaded: async () => {
 | 
						|
                state.historicalUserLocations.features.setData([])
 | 
						|
            },
 | 
						|
        })
 | 
						|
    }
 | 
						|
}
 |