GeoNames Home | Postal Codes | Download / Webservice | About 

GeoNames Forum
  [Search] Search   [Recent Topics] Recent Topics   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Namenssuche mit Platzhalter  XML
Forum Index -> Forum in Deutsch
Author Message
chregi



Joined: 31/05/2006 13:21:53
Messages: 3
Offline

hallo allerseits

gibt es die möglichkeit nach namen zu suchen, wenn man auch nicht den vollständigen text eingibt! ich möchte geonames nutzen, um ortschaften in einer liste anzuzeigen, welche bei der eingabe fortlaufend aktualisiert werden.

z.b. suche ich die ortschaft villmergen mit http://ws.geonames.org/search?q=villmergen

ist es möglich mit platzhaltern zu arbeiten, welche die ortschaft villmergen schon bei einer eingabe von http://ws.geonames.org/search?q=villme
liefern? was für einen platzhalter müsste ich verwenden? * ist leider nicht möglich.
marc



Joined: 08/12/2005 07:39:47
Messages: 4412
Offline

Hallo Chregi

Das ist richtig, bei der Volltextsuche mit dem Parameter q der über alle Felder wie Land, Provinz etc läuft, werden Sonderzeichen 'escaped' und dienen nicht als Platzhalter.
Du kannst stattdessen den Parameter name verwenden :
http://ws.geonames.org/search?name=villme*

oder auch den noch undokumentierten Parameter name_equals :
http://ws.geonames.org/search?name_equals=villme*

Mit dem Parameter name wird auch über Teile eines Namens gesucht während name_equals über den exakten Namen sucht. Ersteres würde auch ein 'Unter Villmergen' finden und letzeres nicht.

Marc

Edit :
Für die Suche nach Namensanfang gibt es einen neuen Parameter name_startsWith. Er hat diverse Vorteile gegenüber dem *. Der Stern sollte deshalb nicht mehr verwendet werden.

[WWW]
chregi



Joined: 31/05/2006 13:21:53
Messages: 3
Offline

hallo marc

danke für die hilfreiche antwort!
der parameter name_equals liefert genau die antworten, welche ich auch brauche!
ein problem ist jedoch festzustellen: suche ich nach einem ort, welcher aus zwei wörtern besteht, so funktioniert die suche nicht (z.b new york). mit dem leerschlag gibt es probleme! der paramater name hingegen liefert antworten!
gibt es eine möglichkeit mit name_equals ebenfalls nach ortschaften zu suchen, welche aus zwei wörtern bestehen, denn dieser parameter eignet sich für meine anwendung besser als der parameter name.

schon mal danke für deine antwort

chregi

marc



Joined: 08/12/2005 07:39:47
Messages: 4412
Offline

Hallo Chregi

Der Leerschlag hat dazu geführt, dass der Service nach beiden Namen gesucht hat. Das heisst ein Ort der gleichzeitig 'new' und 'york' heisst. Mit Quotes hat der Service die beiden Wörter als einen Suchterm behandelt "new york". Dies ist nicht sehr benutzerfreundlich und die Suche nach zwei Namen ist wahrscheinlich auch nicht sehr nützlich.

Ich habe den Service deshalb geändert, so dass die Quotes jetzt nicht mehr nötig sind:

http://ws.geonames.org/search?name_equals=new+york

Bitte beachte, dass ich den Parameter umbennant habe. Er heisst jetzt name_equals

Zudem gibt es jetzt auch einen neuen Parameter 'name_startsWith' um nach Namen zu suchen die mit mit dem Suchbegriff beginnen. Dieser Parameter funktioniert auch mit Leerschägen und auch für einen einzigen Anfangsbuchstaben.

Marc

[WWW]
chregi



Joined: 31/05/2006 13:21:53
Messages: 3
Offline

besten dank!

name_startsWith erfüllt all meine anforderungen!

eine weitere frage ist jedoch aufgetaucht:

http://ws.geonames.org/search?name_startsWith=villm
mit dieser anfrage wird als resultat unter anderem auch die ortschaft lappeeneranta geliefert. wieso das?

gruess und besten dank für den tollen service

chregi
marc



Joined: 08/12/2005 07:39:47
Messages: 4412
Offline

Lappeenranta heisst auch "Villmanstrand" :

http://www.geonames.org/search.html?q=Villmanstrand

Ich habe den Service jetzt so erweitert, dass er auch eine Namensvariante zurückliefert, die mit den gegebenen Anfangsbuchstaben beginnt.
Das heisst Lappeenranta wird bei dieser Suche nun als Villmanstrand angegeben.

Die Namensvarianten sind auch sprachabhängig. Wenn du bei einer Suche nach 'Bern' möchtest, dass die Hauptstadt der Schweiz in der deutschen schreibweise angeführt wird, musst du den parameter lang=de übergeben.

Bsp :
http://ws.geonames.org/search?name_startsWith=bern
http://ws.geonames.org/search?name_startsWith=bern&lang=de


Marc

[WWW]
Anonymous



hallo marc

besten dank! nun funktionierts wie gewünscht!
eine kleine frage noch:
suche ich mit http://ws.geonames.org/search?name_startsWith=ber&lang=de so erscheinen die verschiedenen ortschaften, welche mit 'ber' beginnen, jedoch sind sie nicht alphbetisch geordnet. so kommt z. B. die ortschaft bermuda vor bergamo. Ist es möglich mit dem parameter name_startsWith eine suche durchzuführen, welche die namen in alphabetischer reihenfolge liefert?

schon mal danke für deine antwort!
marc



Joined: 08/12/2005 07:39:47
Messages: 4412
Offline

Die Namen sind jetzt nach 'Wichtigkeit' geordnet. Das heisst, bei der Suche nach 'Ber' steht jetzt Berlin zuoberst gefolgt von Bern. Ich denke, das macht mehr Sinn als eine rein alphabetische Ordnung. Dann hätte man irgendwelche völlig unwichtigen Weiler, Teiche oder Hügel zuoberst.

Was ich mir noch vorstellen könnte, wäre unter den x wichtigsten eine alphabetische Sortierung durchzuführen und dann die "maxRows" obersten davon auszuliefern.

Marc

[WWW]
Anonymous



Hallo Marc,

wenn man den Parameter "name_startsWith" verwendet, muss der zugehörige Wert komplett aus Kleinbuchstaben bestehen, damit etwas gefunden wird.
Bei den Parametern "name" und "name_equals" spielt hingegen die Groß-Kleinschreibung der Werte keine Rolle. Könnte man das bei dem Paramter "name_startsWith" nicht ebenfalls so umsetzen, dass dort unabhängig von der Groß-Kleinschreibung immer die selbe Treffermenge gefunden wird?

Viele Grüße
Christian
Anonymous



Hi Marc,

ich teste etwas mit dem Parameter "name_startsWith" herum und bin jetzt etwas verwirrt.

Wenn ich mit dem Parameter "name_equals" nach "hamburg" suche, erhalte ich 3 Teffer (http://ws.geonames.org/search?&name_equals=hamburg&country=DE&lang=de).
Wenn ich dann mit dem Parameter "name_startsWith" nach "hamburg" suche, erhalte ich 19 Treffer, wobei die 3 Treffer der ersten Abfrage auch bei den 19 Treffern wieder auftauchen.
(http://ws.geonames.org/search?&name_startsWith=hamburg&country=DE&lang=de)
Soweit - so gut - genau das habe ich erwartet.

Wenn ich das gleich Spiel wiederhole und nach "Köln" suche, sieht das aber etwas anders aus.
Suche mit dem Parameter "name_equals" liefert einen Treffer:
(http://ws.geonames.org/search?&name_equals=k%C3%B6ln&country=DE&lang=de)
Suche mit dem Parameter "name_startsWith" liefert 6 Treffer, allerdings ist der Treffer der ersten Abfrage (nämlich die Stadt Köln) nicht in der Ergebnismenge dieser Abfrage enthalten.

Mir ist jetzt nicht klar, was passieren soll, wenn der zum Parameter "name_startsWith" gesetzte Wert exakt mit einem Datensatz übereinstimmt. Soll dieser Datensatz dann in die Treffermenge aufgenommen werden (siehe "hamburg") oder soll er nicht in die Treffermenge aufgenommen werden (siehe "köln")?
Aus meiner Sicht wäre der erste Fall ("hamburg") der sinnvollste.

Viele Grüße
Christian
marc



Joined: 08/12/2005 07:39:47
Messages: 4412
Offline

Hi Christian

Beide Punkte sind Bugs. Der erste wurde heute abend behoben (Gross-Kleinschreibung) und der zweite sollte bis morgen behoben sein. Danke für die Hinweise.

Viele Grüsse

Marc
[WWW]
Anonymous



Hi Marc,

super dass du die beiden Bugs so schnell gefixt hast!
Ich habe gerade die Webservice-Schnittstelle mit Parameter "name_startsWith" etwas weiter getestet und habe leider noch einige Bugs festgestellt. (Ich hoffe, ich nerve dich damit nicht.)
Also ich habe vermeintlich unsinnige Werte (Sonderzeichen, Zahlen, etc.) als Wert übergeben. Meistens verhält sich der Dienst korrekt und liefert keine Treffer. Allerdings nicht immer!

Suche nach "(":
http://ws.geonames.org/search?&name_startsWith=(&country=DE&lang=de
Hier werden u.a. "(( Pampowsee ))" in Polen und "(( Werns Bach ))" in der Tschechei gefunden, obwohl der Parameter country=DE mitgeschickt wurde.

Suche nach "#":
http://ws.geonames.org/search?&name_startsWith=#&country=DE&lang=de
Jetzt werden 6282009 Treffer gefunden. D.h. hier wird der Parameter country=DE ebenfalls nicht berücksichtigt.

Suche nach "'":
http://ws.geonames.org/search?&name_startsWith='&country=DE&lang=de
Jetzt wird "'t Gelders Kanaal" in den Niederlanden gefunden. D.h. auch hier wird der Parameter country=DE nicht berücksichtigt.

Viele Grüße
Christian
marc



Joined: 08/12/2005 07:39:47
Messages: 4412
Offline

Hallo Christian

(( Werns Bach )) liegt sowohl in Tschechien wie auch in Deutschland. Es ist deshalb korrekt, dass er gefunden wurde. Diese mehrfachen Länderzugehörigkeiten, denke zum Beispiel an den Rhein, ist im XML Resultat noch nicht abgedeckt.
Ich denke das beste wäre, in so einem Fall das countryCode Element mehrfach zu haben. Das geht aber nicht mit dem countryName Element. Da dann nicht klar wäre, welches countryCode Element zu welchem countryName Element gehört. Wahrscheinlich wäre es grundsätzlich besser den countryName als Attribut zum countryCode zu haben und nicht als eigenständiges Element. Was denkst Du?

Das Nummer Zeichen '#' wird bei der Suche gar nicht berücksichtigt, deshalb kommen alle Rekords.


Viele Grüsse

Marc

[WWW]
Anonymous



Hallo Marc,

danke für die schnelle Antwort. An mehrfache Länderzugehörigkeiten hatte ich bisher gar nicht gedacht. Aber es wäre natürlich wichtig, dass die entsprechende Information im XML-Resultat vorliegt.

Was die XML-Modellierung angeht, so würde ich auch den countryNamen als vom countryCode abhängig modellieren. Wenn man allerdings bedenkt, dass zu einem countryCode ja mehrere countryNamen existieren (nämlich in verschiedenen Sprachen!), so würde ich countryName als untergeordnetes Element von countryCode bzw. einem Element country modellieren. Das sähe dann z.B. so aus:

<country code="DE">
<countryName lang="de">Deutschland</countryName>
<countryName lang="en">Germany</countryName>
</country>

Dieser Ansatz ist flexibler bezüglich der Internationalisierung der XML-Antwort. Man könnte auch direkt mit einem allgemeinen Element "name" arbeiten. Das sähe dann so aus:

<country code="DE">
<name lang="de">Deutschland</name>
<name lang="en">Germany</name>
</country>

Falls ein Objekt zu mehreren Ländern gehört, könnte man das country Element dann mehrfach in den XML-Response aufnehmen.

Dieses Konzept - also ein allgemeines Element "name" zu verwenden - könnte man auch grundsätzlich für den geonames-Dienst anwenden.
Interessant wäre es z.B. bei den alternateNames. Ein Vorschlag für die XML-Struktur wäre:

<alternateNames>
<name lang="de">Hamburg</name>
<name lang="it">Amburgo</countryName>
<name lang="ca">Estat d'Hamburg</countryName>
<name lang="fr">Hambourg</countryName>
</alternateNames>

Das Konzept könnte bei Bedarf auch auf die Elemente fclName, fcodeName, adminName1, usw. angewendet werden.

Viele Grüße,
Christian
marc



Joined: 08/12/2005 07:39:47
Messages: 4412
Offline

Hallo Christian

Mir gefällt diese Variante am besten :
<country code="DE">
<countryName lang="de">Deutschland</countryName>
<countryName lang="en">Germany</countryName>
</country>

Das ist ein interessantes Thema und sollte nicht nur hier im Deutschsprachigen Forum diskutiert werden. Ich habe deshalb einen Thread in der Mailingliste gestartet :

http://groups.google.com/group/geonames/browse_frm/thread/6f1a1af74d2120b4/9e9a249f9f06b024#9e9a249f9f06b024


Marc

[WWW]
 
Forum Index -> Forum in Deutsch
Go to:   
Powered by JForum 2.1.5 © JForum Team