GeoNames Home | Postal Codes | Download / Webservice | About 

GeoNames Forum
  [Search] Search   [Recent Topics] Recent Topics   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
lat lon --> plz  XML
Forum Index -> Forum in Deutsch
Author Message
Anonymous



Hallo,

ich bin leider unfähig die Beispielseiten von geonames.org so umzubauen, daß ich einen request wie

http://ws.geonames.org/findNearbyPostalCodesJSON?lat=54&lng=13

auswerten kann. Ich sehe immer eine Liste mit sooft 'undefined' wie der alternative XML-Request sonst Datensätze zurückliefert. Habe leider keinerlei Erfahrung in Javascript oder sonstiger Programmierung.

Mit freundlichen Grüßen
marc



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

Hallo

Mit dem parameter formatted=true kannst du den JSON array im Browser gut anschauen :
http://ws.geonames.org/findNearbyPostalCodesJSON?lat=54&lng=13&formatted=true

Hast Du das JSON Beispiel für den search web service angesehen :
http://www.geonames.org/maps/json-googlemaps-example.html

Wenn du noch den Parameter callback verwendest wird der Array in einem Javascript Funktionsaufruf gekapselt und du must nur noch die Implementierung zu dieser Funktion programmieren :
http://ws.geonames.org/findNearbyPostalCodesJSON?lat=54&lng=13&formatted=true&callback=getLocation

Gruss

Marc

Hier der Einfachheit halber noch der Code zu oben erwähntem Beispiel :

Code:
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <script type="text/javascript" src="/export/jsr_class.js"></script>
 <script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAeEq19YLZnpE6J2uIs5Io9BT60Ozg8oAvB6f6tprXp7GrsK4jVRRb9A2DRaR-2dsD1bdXZ39-VJ3t_w" type="text/javascript"></script>
 
 </head>
 <body>
 <div id="map" style="width: 500px; height: 400px"></div>
 <script type="text/javascript">
  var map = new GMap2(document.getElementById("map"));
  map.setCenter(new GLatLng(51.5,-0.1), 13);
  map.addControl(new GSmallMapControl());
  map.addControl(new GMapTypeControl());
  map.setMapType(G_SATELLITE_MAP);
 </script>
 
 
 
 <script>
 
 // this function will be called by our JSON callback
 // the parameter jData will contain an array with geonames objects
 function getLocation(jData) {
   if (jData == null) {
     // There was a problem parsing search results
     return;
   }
 
   var html = '';
   var geonames = jData.geonames;
   for (i=0;i< geonames.length;i++) {
      var name = geonames[i];
      // we create a simple html list with the geonames objects
      // the link will call the center() javascript method with lat/lng as parameter
      html = html + '<a href="javascript:center(' + name.lat +',' + name.lng + ');">' + name.name + '</a><br>';
   }
   document.getElementById('resultDiv').innerHTML = html;
 }
 
 // centers the google map on the lat/lng
 function center(lat,lng){
   var point = new GLatLng(lat,lng);
   map.setCenter(point,13);
 }
 
 // calls the geonames JSON webservice with the search term
 function search() {
   request = 'http://ws.geonames.org/searchJSON?q=' +  encodeURIComponent(document.getElementById('q').value)  + '&maxRows=10&callback=getLocation';
 
   // Create a new script object
   // (implementation of this class is in /export/jsr_class.js)
   aObj = new JSONscriptRequest(request);
   // Build the script tag
   aObj.buildScriptTag();
   // Execute (add) the script tag
   aObj.addScriptTag();
 }
     	
 
 
 </script>
 
 
 
 
 <form id="searchForm" onsubmit="search(); return false;" style="display:inline">
   <input id="q" type=text name=q>
   <input type=submit value=search>
 </form>
 <small><a href="http://www.geonames.org">powered by geonames</a>
 
 <div id="resultDiv">Enter a place name in the search box and press the search button. You will then get a list of matching place names. Then you click on one of the place names and the map above will display the chosen place.</div>
 </body>
 
 </html>
 

[WWW]
Anonymous



Hallo,
genau die Seite hatte ich als Ausgangsbasis genommen. Ich glaube aber fast, ich habe ein grundsätzliches Verständnisproblem. Wenn ich genau dieses Script kommplett so lasse und nur in der Zeile
Code:
html = html + '<a href="javascript:center(' + name.lat +',' + name.lng + ');">' + name.name + '</a><br>';

ein name.lat + oder name.fclass vor dem '</a> einfüge, tut sich was ich erwarte. Ein name.postalcode gibts dann nicht. Ich hatte vermutet, die Nodeknoten aus der XML-Hierarchie nehmen zu können.
marc



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

Da besteht leider eine Inkonsistenz zwischen dem xml und dem JSON output.

was in der xml version postalcode heisst, heisst in der JSON variante postalCode. Tut mir leid, da ist was schiefgelaufen bei der Namensgebung.

Schau dir den JSON output an als Grundlage für die Programmierung :
http://ws.geonames.org/findNearbyPostalCodesJSON?lat=54&lng=13&formatted=true

Gruss

Marc

[WWW]
Anonymous



Hallo Marc,

ich raffel das irgendwie nicht so ganz. Die XML-Variante ist zwar auch noch nicht fertig, arbeitet aber in dem Punkt.
http://www.agrosync.de/muehlen/recherche/

Die Json - Variante hätte ich eigentlich bevorzugt. Kanns Du Dir mal
http://www.agrosync.de/geonames.html

ansehen und mir sagen, was ich falsch mache um eine Liste mit den Plz + Name zu bekommen? Habe aus obigen Beispiel die GMapsachen entfernt und die Koordinaten mal hartkodiert.

Die Sammlung soll mehrere private zusammenführen und wäre vielleicht auch was für Dich. Unter dem letzten Link findest Du das Datenformat, auf das wir uns geignet haben. Wir erwarten so 2000+x Punkte in Deutschland.

Kanst mich auch privat anmailen und als Außenstehender Deine Meinung datenbanktechnisch zu äußern. Wir haben es so eher mit alter mecheanischer Technik. Ich würde es begrüßen, wenn unsere Punkte auch hier mit eingehen.
http://www.agrosync.de/muehlen/mrecherche.html

Mit freundlichen Grüßen

wieland@niecke.de
marc



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

Hallo Wieland

Deine Json Variante ist nahe dran Du hast den falschen Teil auskommentiert. Wenn du auf die PLZ zugreifen möchtest, musst du die Suche an den findNearbyPostalCodesJSON service schicken. Dann hat es am Ende der Zeile auch noch ein überflüssiges + '&callback'

Code:
//http://ws.geonames.org/findNearbyPostalCodesJSON?lat=54&lng=13 
 request = 'http://ws.geonames.org/searchJSON?q=lat=54&lng=13'    + '&maxRows=10&callback=getLocation' +  '&callback';
 


Möchtest Du die Mühlendaten zum Geonames Projekt beisteuern? Es gibt bereits einige Featurecodes für diverse Arten von Mühlen :

Code:
 ML 	mill(s) 	a building housing machines for transforming, shaping, finishing, grinding, or extracting products
 MLM 	ore treatment plant 	a facility for improving the metal content of ore by concentration
 MLO 	olive oil mill 	a mill where oil is extracted from olives
 MLSG 	sugar mill 	a facility where sugar cane is processed into raw sugar 
 MLSGQ 	former sugar mill 	a sugar mill no longer used as a sugar mill 
 MLSW 	sawmill 	a mill where logs or lumber are sawn to specified shapes and sizes
 MLWND 	windmill 	a mill or water pump powered by wind
 MLWTR 	water mill 	a mill powered by running water
 


Marc

[WWW]
Anonymous



Hallo Marc,

ich sollte einfach weniger arbeiten. Ich hatte schon den findNearbyPostalCodesJSON aufgerufen, nur dann ein bißchen mehr in der Datei rumgeschrieben und wollte zum Schluß wieder einen reproduzierbaren Ausgangszustand herstellen. Dabei ist dann versehentich das Falsche auskommentiert worden. Jetzt bekomme ich auf der Javascriptkonsole (mozilla) auch wieder meinen Fehler 'invalid label', mit dem ich leider aber nichts anfangen kann.

Das die Standorte hier einfließen können, habe ich Dir ja irgendwie angeboten. Die Einteilung der Mühlen nach Featurecodes habe ich mir noch nicht angesehen, ist aber auch bei uns Gegenstand von Diskussionen. Die Nutzungart lassen wir letztendlich ganz weg und mehr als Wind/Wasser/Motor wird bei Dir nach Mühlentyp nicht ankommen. Da kann man sich aber mal separat drüber unterhalten. Wir wollen auch nur zusammen geokodieren und die Daten dann in eigenen Projekten verwenden. Erstmal soll aber das Eintragen so einfach wie möglich gemacht werden. Kannst Du Dir geonames.html nochmal ansehen?
marc



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

Hallo Wieland

jetzt hast du ein bisschen zu viel weggelöscht. Der callback parameter ist wichtig für den Funktionsaufruf. Nur so wird die Funktion aufgerufen. Als Wert des Parameters muss man den Namen der aufzurufenden Funktion angeben. In diesem Fall getLocation

Code:
request = 'http://ws.geonames.org/findNearbyPostalCodesJSON?lat=54&lng=13&maxRows=10&callback=getLocation';
 


So sollte es eigentlich funktionieren.

Gruss

Marc

[WWW]
Anonymous



Hallo Marc,

das Leben kann schön sein, oder sollte man sich aufhängen, weil ich an so einem schönen Sonnentag lieber keine Tastatur unter den Fingern gehabt haben hätte sollen können. Dat looft jetzt, besten Dank. Von zwei Bundesländer liegen die Daten bereits fast komplett vor. Und es wir auch eine Textdatei zum Download geben. Mußt mal vorbeischauen.

Ich habe aber noch ein Frage zu Deinen Featurecodes. Definierst Du die selber oder holst Du Dir die von irgendeiner tollen Organisation/Behörde? (ich bin gerade zu faul zum Recherchieren) Man könnte es aber ja berücksichtigen. Nur mit der Einteilung oben wird man als Mühlenfreund nicht unbedingt glücklich.

MfG w
marc



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

Die codes stammen hauptsächlich von der National Geospatial-Intelligence Agency einer US Behörde.

Marc

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