Umkreissuche funktiomniert nicht

Hi,

ich versuche zur Zeit, eine Umkreissuche zu programmieren. Normalerweise sollten die Markierungen über die Variable “$poi” positioniert werden. Aber das funktioniert nicht. Könnt Ihr mir helfen? Hier der Script:

<?php $lat=51.20418118214776; $long=7.1737611293792725; // Umkreissuche in einem Gebiet von 6 KM $uk1=$long-0.04200; $uk2=$lat-0.02700; $uk3=$long+0.04200; $uk4=$lat+0.02700; $ja1 = file_get_contents('http://nominatim.openstreetmap.org/search?viewbox='.$uk1.','.$uk2.','.$uk3.','.$uk4.'&bounded=1&format=json&polygon=0&addressdetails=1&q=schule&limit=999'); // ohne Angabe von Limit=999, werden nur die ersten 10 Ergebnisse ausgegeben $jb1 = json_decode($ja1); $ja2 = file_get_contents('http://nominatim.openstreetmap.org/search?viewbox='.$uk1.','.$uk2.','.$uk3.','.$uk4.'&bounded=1&format=json&polygon=0&addressdetails=1&q=kindergarten&limit=999'); // ohne Angabe von Limit=999, werden nur die ersten 10 Ergebnisse ausgegeben $jb2 = json_decode($ja2); $ja3 = file_get_contents('http://nominatim.openstreetmap.org/search?viewbox='.$uk1.','.$uk2.','.$uk3.','.$uk4.'&bounded=1&format=json&polygon=0&addressdetails=1&q=supermarkt&limit=999'); // ohne Angabe von Limit=999, werden nur die ersten 10 Ergebnisse ausgegeben $jb3 = json_decode($ja3); $a=0; $anzahl=count($jb1); while ($a<$anzahl) { if ($jb1[$a]->address->school=="") { $art="Schule"; } else { $art=$jb1[$a]->address->school; } $ic1=$jb1[$a]->lat."\t".$jb1[$a]->lon."\t \t".utf8_decode($art)."\tsymbole/schule.png\t32,37\t-16,-18"."\t"; //Tabelle aufbauen (siehe [http://wiki.openstreetmap.org/wiki/Openlayers_POI_layer_example)](http://wiki.openstreetmap.org/wiki/Openlayers_POI_layer_example)) $schule=$schule.$ic1; $a++; } $a=0; $anzahl=count($jb2); while ($a<$anzahl) { if ($jb2[$a]->address->kindergarten=="") { $art="Kindergarten"; } else { $art=$jb2[$a]->address->kindergarten; } $ic1=$jb2[$a]->lat."\t".$jb2[$a]->lon."\t \t".utf8_decode($art)."\tsymbole/kgarten.png\t32,37\t-16,-18"."\t"; //Tabelle aufbauen (siehe [http://wiki.openstreetmap.org/wiki/Openlayers_POI_layer_example)](http://wiki.openstreetmap.org/wiki/Openlayers_POI_layer_example)) $kgarten=$kgarten.$ic1; $a++; } $a=0; $anzahl=count($jb3); while ($a<$anzahl) { if ($jb3[$a]->address->supermarket=="") { $art="Supermarkt"; } else { $art=$jb3[$a]->address->supermarket; } $ic1=$jb3[$a]->lat."\t".$jb3[$a]->lon."\t \t".utf8_decode($art)."\tsymbole/smarkt.png\t32,37\t-16,-18"."\t"; //Tabelle aufbauen (siehe [http://wiki.openstreetmap.org/wiki/Openlayers_POI_layer_example)](http://wiki.openstreetmap.org/wiki/Openlayers_POI_layer_example)) $smarkt=$smarkt.$ic1; $a++; } $poi=$schule."\t".$kgarten."\t".$smarkt; // Tabellen zusammenfassen ?>
.olControlAttribution { bottom: 3px!important; }

Momentan rufe ich für jedes Genre (Schule, Kindergarten und Supermarkt) die nomination Seite erneut auf. Gibt es hier auch einen effizienteren Weg?

Mich würde auch interessieren, ob wirklich ein Bereich von ca. 6 KM abgedeckt wird

Könnte man den Button auch so programmieren, das bei jedem Klick die Pois eingeblendet bzw. ausgeblendet werden?

So richtig wollte ich mich da nicht durchwühlen. Aber wenn ichs richtig sehe, willst Du alle Schulen/Kindergärten/Supermärkte im Umkreis haben und rufst deshalb nominatim mit dem Suchbegriff “Schule”… auf.

Das ist so ziemlich der falsche Weg. Nominatim ist eine Adresssuche und nicht dafür gedacht, größere Bereiche nach Schulen zu durchsuchen (ich würde auch vermuten, dass das nicht gut funktioniert, ausser die Schule heisst auch “Schule”).

Fürs Runterladen größerer Bereiche würde ich mich entweder in xapi oder Overpass API einarbeiten. Oder mir den Bereich gelegentlich komplett runterladen (mit josm, oder der Export-Funktion in openstreetmap.org) und dann lokal eine Suche bauen, sofern das immer der gleiche Bereich ist. Wenns was größeres wird, wäre eine eigene Datenbank mit den Daten eine Möglichkeit, aber wegen 36qkm würde ich damit erstmal nicht anfangen…

viele Grüße, Max

Hi Maxbe,

die Suche klappt sehr gut. So wie ich es sehe sogar vergleichbar mit der google Suche. Mittels “echo $poi;” siehst Du das Ergebnis.

Die Karte selbst ist in diesem Beispiel nicht sichtbar, weil ein Teil vom Javascript fehlerhaft ist. Wenn Du aber die Zeilen

var pois = new OpenLayers.Layer.Text( “My Points”,
{ <?php echo $poi; ?>,
projection: map.displayProjection
});
map.addLayer(pois);

entfernst, ist zumindest die Karte sichtbar :-))

Hi, habe die Lösung gefunden. Sie war eigentlich sehr einfach. Folgende Zeilen sind gegen die alten Zeilen zu ersetzen:

$ic1=$jb1[$a]->lat.“\t”.$jb1[$a]->lon.“\t \t”.$art.“\tsymbole/schule.png\t32,37\t-16,-18\n”;
$ic1=$jb2[$a]->lat.“\t”.$jb2[$a]->lon.“\t \t”.$art.“\tsymbole/kgarten.png\t32,37\t-16,-18\n”;
$ic1=$jb3[$a]->lat.“\t”.$jb3[$a]->lon.“\t \t”.$art.“\tsymbole/smarkt.png\t32,37\t-16,-18\n”;

$poi=“lat\tlon\ttitle\tdescription\ticon\ticonSize\ticonOffset\n”.$schule.$kgarten.$smarkt;
$datei = fopen(“daten.txt”, “w”);
fwrite($datei,$poi);
fclose($datei);

var pois = new OpenLayers.Layer.Text( “My Points”,
{ location:“./daten.txt”,
projection: map.displayProjection
});

Uppss, die Javascript Änderung ist nicht ganz vollständig. Richtig lautet diese:

var pois = new OpenLayers.Layer.Text( “My Points”,
{ location:“./daten.txt”,
projection: map.displayProjection
});
map.addLayer(pois);