Skip to content

StopFinder-Request

Freitextsuche nach Haltestellen, Adressen oder POIs. Verifiziert Benutzer­eingaben und liefert strukturierte Trefferkandidaten — typischer Einstieg in jeden Workflow, der mit einer ID weiterarbeitet (DM, Trip, LineStop …).

Endpoint

  • Pfad: XML_STOPFINDER_REQUEST
  • Methode: GET

Obligatorische Parameter

Point-Input mit Suffix _sf:

ParameterWerteBeschreibung
name_sfSuchbegriff, ID oder KoordinateEingabetext (frei), ID (z. B. de:05911:5494) oder Koordinate
type_sfany | coordany für Text/ID, coord für Koordinateneingabe

Optionale Parameter — Such­optimierung

ParameterWerteBeschreibung
anyMaxSizeHitListGanzzahlMaximale Trefferliste; über diesen Wert hinaus wird nach Qualität reduziert
anyResSort_<usage>ResultSorter-IDBenutzerdefinierte Sortierung (Config-seitig im EFALocationServer)
anySigWhenPerfectNoOtherMatches1Nur den perfekten Treffer zurückgeben, sonst unscharfe Liste
locationInfoActive1Hausnummer-Auflösung für verifizierte Straßen aktivieren
useHouseNumberList_<usage>1Liste möglicher Hausnummern zurückgeben
useLocalityMainStop1Einen Ort auf seine Haupt­haltestelle abbilden statt umliegende zu suchen
doNotSearchForStops_<usage>1Nach Koordinaten-Verifikation nicht nach nahegelegenen Halten suchen (für Nicht-ÖPNV-Routing)
prMinQu0100Mindestqualität, unter der Treffer verworfen werden

Optionale Parameter — Suchkriterien

ParameterWerteBeschreibung
anyObjFilter_<usage>BitmaskeObjekttyp-Filter — siehe Objekttypen
anyOmc_<usage>GemeindeschlüsselSuche auf eine Gemeinde beschränken
regionID_<usage>Regions-IDSuche auf eine Region beschränken (Config-abhängig)
tryFurtherAnyWithoutLoc1Fallback: ohne Gemeinde-Filter nachziehen, wenn keine Treffer

Optionale Parameter — Qualität & Ranking

ParameterWerteBeschreibung
coord<x>:<y>:<CoordFormat>Bezugspunkt für rMethod=DISTANCEFROMCENTER
objPrefAlBitmaskeTypen-Präferenz — immer bevorzugen
objPrefAmBitmaskeTypen-Präferenz — unter den besten Treffern bevorzugen
prefStModeAmBitmaske über MOT-IDsUnter den besten Halten jene mit bestimmten Verkehrsmitteln bevorzugen
regPrefAlRegions-IDRegion immer bevorzugen
regPrefAmRegions-IDRegion unter den besten Treffern bevorzugen
relInf0100 (%)Gewicht der Relevanz im Quality-Score
rMethodDISTANCEFROMCENTER | BESTCOVER | PREFIXCOUNT | PREFIXRATIORanking-Verfahren

Siehe auch gemeinsame Parameter.

Beispiel-Requests

Textsuche in einer Gemeinde, nur Halte und POIs, mit Ranking nach Trefferpräfix:

GET /XML_STOPFINDER_REQUEST
    ?outputFormat=JSON
    &type_sf=any
    &name_sf=Essen%20Hbf
    &anyObjFilter_sf=34
    &anyOmc_sf=05113
    &rMethod=PREFIXRATIO
    &anyMaxSizeHitList=20

Umkreis­suche um eine Koordinate, bevorzugt Halte mit S-/U-/Straßenbahn:

GET /XML_STOPFINDER_REQUEST
    ?outputFormat=JSON
    &type_sf=coord
    &name_sf=7.0128:51.4513:WGS84[dd.ddddd]
    &rMethod=DISTANCEFROMCENTER
    &coord=7.0128:51.4513:WGS84[dd.ddddd]
    &prefStModeAm=30
    &anyMaxSizeHitList=10

(prefStModeAm=30 = Bits 1|2|3|4 → S-Bahn, U-Bahn, Stadtbahn, Straßenbahn.)

Antwort (Beispiel)

json
{
  "locations": [
    {
      "id": "de:05113:9009",
      "name": "Essen Hbf",
      "type": "stop",
      "isBest": true,
      "matchQuality": 950,
      "coord": { "lat": 51.4513, "lon": 7.0128 },
      "assignedStops": [
        { "id": "de:05113:9009:1", "name": "Gleis 1" }
      ]
    }
  ]
}
  • isBest — Server-seitig beste Übereinstimmung.
  • matchQuality — numerische Güte.
  • assignedStops[] — umliegende Halte (nur wenn Point-Input sie anfordert).

JavaScript-Beispiele

js
const base = 'https://server:port/virtuellesVerzeichnis/XML_STOPFINDER_REQUEST'

async function searchStops(query, { signal } = {}) {
  const usp = new URLSearchParams({
    outputFormat: 'JSON',
    type_sf: 'any',
    name_sf: query,
    anyObjFilter_sf: '34',
    rMethod: 'PREFIXRATIO',
    anyMaxSizeHitList: '10'
  })
  const res = await fetch(`${base}?${usp}`, { signal })
  if (!res.ok) throw new Error('HTTP ' + res.status)
  return res.json()
}

function debounce(fn, ms = 250) {
  let t, ctrl
  return (...args) => {
    clearTimeout(t)
    if (ctrl) ctrl.abort()
    ctrl = new AbortController()
    t = setTimeout(() => fn(...args, { signal: ctrl.signal }), ms)
  }
}
ts
export async function resolveToId(query: string): Promise<string | null> {
  const usp = new URLSearchParams({
    outputFormat: 'JSON',
    type_sf: 'any',
    name_sf: query,
    anySigWhenPerfectNoOtherMatches: '1'
  })
  const res = await fetch(`${base}?${usp}`)
  const data = await res.json() as { locations: { id: string; isBest: boolean }[] }
  return data.locations.find(l => l.isBest)?.id ?? null
}
js
async function findStopsNear(lat, lon) {
  const coord = `${lon}:${lat}:WGS84[dd.ddddd]`
  const usp = new URLSearchParams({
    outputFormat: 'JSON',
    type_sf: 'coord',
    name_sf: coord,
    coord,
    rMethod: 'DISTANCEFROMCENTER',
    prefStModeAm: '30',
    anyMaxSizeHitList: '5'
  })
  const res = await fetch(`${base}?${usp}`)
  return res.json()
}

Hinweise

  • Eine verifizierte id aus locations[].id lässt sich unverändert in Folge-Requests (z. B. DM, Trip) als name_<usage> verwenden.
  • Bei freier Texteingabe immer debouncen (200–300 ms) und laufende Requests via AbortController abbrechen.
  • matchQuality ist deployment-spezifisch skaliert; nicht mit Prozentwerten vergleichen.