x

Umkreissuche funktiomniert nicht


Geschrieben von joergi2012 (Gast) am 18. Februar 2012 01:56:19: [flux]

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/Open … r_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/Open … r_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/Open … r_example)
$smarkt=$smarkt.$ic1;
$a++;
}
$poi=$schule."\t".$kgarten."\t".$smarkt; // Tabellen zusammenfassen

>

<div align="center">
<style type="text/css">.olControlAttribution { bottom: 3px!important; }</style>
<script src="http://www.openlayers.org/api/OpenLayers.js">
</script><script src="http://www.openstreetmap.org/openlayers/OpenStreetMap.js">
</script><div id="map" style="width:500px;height:340px;">
</div>
<script type="text/javascript" src="OpenLayers_Map_minZoom_maxZoom_Patch.js"></script>
<script type="text/javascript" src="my_panzoombar.js"></script>
<script type="text/javascript">

<!-- Durch einen Klick auf den Button, sollen die POI´s angezeigt werden -->
function zeige () {
alert ("Schulen, Kindergärten und Supermärkte werden mit jeweils eigenen Symbolen und Taginfo dargestellt.");
}
<!-- Ende der Funktion -->
var map;
function showMap()
{
map = new OpenLayers.Map("map",
{
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
maxResolution: 156543.0399,
units: "m",
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326"),
controls: [],
minZoom:12,
maxZoom:18
});
map.addControl (new OpenLayers.Control.Attribution());
map.addControl (new OpenLayers.Control.Navigation());
map.addControl (new OpenLayers.Control.PanZoomBar({minZoom: 12}));
OpenLayers.Marker.defaultIcon = function () {
return new OpenLayers.Icon ("symbole/nadel.png", {w:35, h:41}, {x: -10, y:-30});
};
var layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik (updated weekly)");
var layerTah = new OpenLayers.Layer.OSM.Osmarender("Tiles@Home");
map.addLayers([layerMapnik]);

<!--
Hier soll normalerweise das Ergebnis der "$poi" Variablen angezeigt werden!
Dieser Abschnitt funktioniert aber nicht
-->
var pois = new OpenLayers.Layer.Text( "My Points",
{ <?php echo $poi; ?>,
projection: map.displayProjection
});
map.addLayer(pois);
<!-- Ende des fehlerhaften Scriptteils -->

map.setCenter(new OpenLayers.LonLat(<?php echo $long; ?>,<?php echo $lat; ?>).transform(new OpenLayers.Projection("EPSG:4326"),
new OpenLayers.Projection("EPSG:900913")), 14);
map.addLayer(new OpenLayers.Layer.Markers());
var marker = new OpenLayers.Marker(map.getCenter());
marker.events.register("mousedown", marker, function(evt)
{
OpenLayers.Event.stop(evt);
}
);
map.layers[map.layers.length-1].addMarker(marker);
}
showMap();
</script>
</div>
<p align="center"><input src="symbole/zeige.gif" onClick="zeige()" type="image"></p>

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?


Antworten: