[Talk-de] Neuer Namefinder
Marcus Wolschon
Marcus at Wolschon.biz
Mi Aug 20 13:17:41 UTC 2008
Am 20.08.08 schrieb Sascha Silbe <sascha-ml-gis-osm-talk-de at silbe.org>:
>> Auch die Suche nach Adressen schon?
>> (Str=Alexanderplatz, Ort=Berlin, Land=Germany)
> Könnte derzeit vom Frontend folgendermaßen durchgeführt werden:
> 1. Type: country
> 2. Name: Name="Germany", nur Nodes+Ways von Schritt 1
> 3. Type (city|town|village)
> 4. Name: Name="Berlin", nur Nodes+Ways von Schritt 3
> 5. Loc: BBox von Schritt 2, Nodes+Ways von Schritt 4
> 6. Name: Name="Alexanderplatz"
> 7. Loc: BBox von Schritt 5, Ways von Schritt 6
> 8. Type: (alle bekannten Straßentypen), Ways von Schritt 7
>
> Also relativ umständlich, aber möglich (der bisherige Namefinder kann
> das derzeit nicht).
> Für Post-1.0 (also wenn das Frontend die Funktionen des bisherigen
> Namefinders alle kann) könnte man sich überlegen, wie man die Daten
> entsprechend vorarbeitet und abspeichert, um diese Suche effizienter zu
> gestalten. Zum Ablegen vermutlich irgendein Baum - der schwierige Part
> ist eher die Performance der Vorverarbeitung: im Europa-Dump sind
> Ortsgrenzen (hamlet..city, nicht country o.ä.) drin, die z.B. PostGIS
> (verwendet GEOS) nicht in sinnvoller Zeit verarbeiten kann (bereits
> ST_IsSimple ist zu langsam!).
Zugegeben ich bin jetzt nicht der große PostgreSQL-Experte aber
das sind doch normale Datenbank-Tabellen mit evtl einem Volltext-Index drauf.
Vorverarbeitet kann man also in die Tabelle der Straßen noch einen FK
auf die Tabellen für Ortsteil, Ort, PLZ, Land setzen und dann in einer
Anfrage mit einem Index auf diesen 5 Spalten effizient suchen.
Select id from Ort where name like "%Berlin%"
Select id, bbox from Street where cityID=32424 and name like "%Alexanderplatz%"
oder so ähnlich.
Bäume hören sich nach nichts an, was in einer relationalen DB gut zu
machen ich (zumal SQL ja keine Rekursion erlaubt).
>> Welche Platzhalter sind in Suchabfragen erlaubt?
>> (*, ?)
> Exakt, Substring: Keine
> Regex: PCRE (also Perl-kompatibel)
Regex sind natürlich cool. :)
>> Welche Normalisierungen machst du für Namen?
> Vorgesehen sind die vom alten Namefinder.
>
>> Ich habe Java-Code für die Positions-Bestimmung
>> von Hausnummern, wenn einmal die Straße gefunden ist.
>> Der sollte sehr einfach nach C (oder in jede andere Sprache) zu
>> konvertieren sein.
> Hört sich gut an. Wo genau finde ich den? Soll zwar erst Post-1.0 rein,
> aber schonmal angucken schadet nicht. :)
Den Code findest du in:
http://travelingsales.svn.sourceforge.net/viewvc/travelingsales/libosm/src/org/openstreetmap/osm/data/searching/HouseNumberFinderTest.java?view=markup
Das ist ein Java-Servlet was auf AJAX-Anfragen hin geoJSON liefert.
Sowas wie getWaysForNode oder getWaysByName müsste man halt durch
entsprechende Datenbank-Abfragen ersetzen.
Wenn du eine stabile URL hast auf die man Anfragen wie im alten Namefinder
stellen kann, kann ich einen IPlaceFinder für Traveling Salesman dafür
schreiben,
um bei Netz-Verbindung damit statt mit dem NameFinder außerhalb der lokal
verfügbaren Karte zu suchen (z.B. Ich will nach Berlin, habe nur NRW
in der lokalen DB,
suche das Ziel und lasse dann erst die für das navigieren notwendigen
Karten-Stücke laden.).
Marcus
Mehr Informationen über die Mailingliste Talk-de