20e1205 ←f913f39antonApr 18, 2026 api

edit generate-map.js via macOS

M /anton/undefined +6 -0
532 unmodified lines
533
534 // --- flights.geojson: flights only (no trains, buses, cars) ---
535 var flightSegments = allSegments.filter(function(s) { return isFlightMode(s.mode) })
536 var flightFeatures = []
537 var flightStops = {}
537 var flightStops = {} // name → { coord, transitCount, totalCount }
538 for (var i = 0; i < flightSegments.length; i++) {
539 var seg = flightSegments[i]
540 var isTransitSeg = seg.mode.toLowerCase().indexOf('transit') !== -1
541 flightFeatures.push({
542 type: 'Feature',
543 properties: {
544 layer: 'flight',
545 from: seg.from, to: seg.to, date: seg.date, mode: seg.mode, trip: seg.trip,
546 },
547 geometry: { type: 'LineString', coordinates: flightCoordinates(seg.fromCoord, seg.toCoord) },
548 })
548 flightStops[seg.from] = seg.fromCoord
549 flightStops[seg.to] = seg.toCoord
549 if (!flightStops[seg.from]) flightStops[seg.from] = { coord: seg.fromCoord, transitCount: 0, totalCount: 0 }
550 if (!flightStops[seg.to]) flightStops[seg.to] = { coord: seg.toCoord, transitCount: 0, totalCount: 0 }
551 flightStops[seg.from].totalCount++
552 flightStops[seg.to].totalCount++
553 if (isTransitSeg) { flightStops[seg.from].transitCount++; flightStops[seg.to].transitCount++ }
554 }
555 var flightStopNames = Object.keys(flightStops)
556 for (var i = 0; i < flightStopNames.length; i++) {
557 var st = flightStops[flightStopNames[i]]
558 var isTransit = st.transitCount === st.totalCount && st.totalCount > 0
559 flightFeatures.push({
560 type: 'Feature',
555 properties: { layer: 'stop', name: flightStopNames[i] },
556 geometry: { type: 'Point', coordinates: flightStops[flightStopNames[i]] },
561 properties: { layer: 'stop', name: flightStopNames[i], transit: isTransit },
562 geometry: { type: 'Point', coordinates: st.coord },
563 })
564 }
565 try {
566 await files.write('flights.geojson', JSON.stringify({ type: 'FeatureCollection', features: flightFeatures }, null, 2))
88 unmodified lines