Standortdaten in eigener Datenbank

Tach Leute.

Ich hoffe das hier ist das richtige Forum für meine Frage. Ich bin am Verzweifeln :frowning:

Ich habe eine sql-Datenbank in der Positionsangaben gespeichert sind. Nun habe ich diese Standortdaten (lat, lon) mit php ausgelesen und damit in openlayers einen Marker gesetzt. Funktioniert auch wunderbar aaaaaaaber… das Problem ist: wie setze ich einen zweiten Marker? …oder dritten oder vierten??

der Code sieht so aus:

<script type="text/javascript">

map = new OpenLayers.Map ("mapdiv", {controls:[]});
map.displayProjection = new OpenLayers.Projection("EPSG:4326");
map.addControl (new OpenLayers.Control.Navigation());

map.addLayer(new OpenLayers.Layer.OSM());
 
var lonLat = new OpenLayers.LonLat( <?php echo" $lat"; ?> ,<?php echo" $lng"; ?> )
.transform(new OpenLayers.Projection("EPSG:4326"),
map.getProjectionObject());

var lonLat2 = new OpenLayers.LonLat( <?php echo" $lat"; ?> ,<?php echo" $lng"; ?> )
.transform(new OpenLayers.Projection("EPSG:4326"),
map.getProjectionObject());

var lonLat3 = new OpenLayers.LonLat( 0.0 ,0.0 )
.transform(new OpenLayers.Projection("EPSG:4326"),
map.getProjectionObject());

var zoom=16;
 
var markers = new OpenLayers.Layer.Markers( "Markers" );
map.addLayer(markers);
map.setCenter (lonLat, zoom);

markers.addMarker(new OpenLayers.Marker(lonLat2));
markers.addMarker(new OpenLayers.Marker(lonLat3));

</script>

Wie man erkennen kann existiert bereits ein zweiter Marker… der aber nicht über das array angezeigt werden kann, weil das ja schon vom ersten Marker benutzt wird. Ich brauche also ein array1, array2, array3 usw. so das jeder Marker sein eigenes array hat.

…und so hole ich die Daten mit php aus der sql-Datenbank:

$query = "select * from mitglieder where person like  '%$lol2%' OR ort like  '%$lol2%' AND PLZ like  '%$lol1%' order by plz";
$numresults=mysql_query($query);
$numrows=mysql_num_rows($numresults);

while ($row= mysql_fetch_array($result)) 
{
$lat = $row["lat"];
$lng = $row["lng"];

...

den php-script hab ich jetzt nur stark vereinfacht und abgekürzt gezeigt… is ja nur dass man sehen kann dass ich die (lat,lng) in einem array speicher v_v

Wie man sehen kann ist es also in erster Linie ein php Problem. Sollte ich vielleicht lieber in einem php-Forum nachfragen…? …oder in einem java-forum? Ich wäre echt dankbar wenn mir jemand helfen könnte… ich bin mir sicher, dass es irgendwie geht

Ich weiss nicht, ob Dein Ansatz - gleich alle POIs in einen Layer zu packen - der richtige ist. Bei den meisten dynamischen Karten ist es so, dass beim initialen Laden der Karte, bzw. bei jedem Verschieben, JavaScript die Datenbank fragt, welche POIs sich gerade in dem aktuellen Kartenausschnitt befinden, und nur diese in den POI-Layer packt. Diese Technik nennt sich AJAX. Im WIKI ist ein Beispiel: http://wiki.openstreetmap.org/wiki/OpenLayers_Dynamic_POI

PS: Vorsicht, wenn Du versuchst diese Frage in einem Java-Forum zu posten! Java und JavaScript (das Opelayers verwendet) haben ausser dem Wort “Java” nichts gemeinsam… :wink:

Nahmd,

Für Deine Aufgabenstellung gibt es mehrere Lösungen:

1.) Du erzeugst per PHP die HTML-Seite mit der Karte darin und das PHP trägt die Koordinaten aller Deiner POIs direkt in den HTML-Code ein.

  1. Du baust eine “statische” Karte ganz ohne PHP. Dazu eine PHP-Seite, die beim Aufruf nur eine Liste der POIs ausliefert, rein als Zahlen/Text ohne Karte. Der JS-Code in der statischen Karte ruft die PHP-Seite mit den Koordinaten der POIs ab und trägt die POIs in die Karte ein.

Wenn Du sehr viele Marker hast, gibt es Erweiterungen von #2, das ist aber Kür.

Ich empfehle Lösung 2, kann aber auch bei Lösung 1 weiterhelfen.

Gruß Wolf

Edit: Verknüpfungen eingefügt.

Danke für eure Antworten ^^

@Netzwolf
Es sind nur wenige POIs (etwa 20). Die Karte wird ja schon in PHP durch HTML angezeigt. Den Code den ich im ersten post gezeigt habe ist alles aus einer einzigen PHP Datei. Ist es denn irgendwie möglich, alle POIs mit PHP aus der sql-Datenbank in die Karte zu kriegen. Wenn das gehen würde wär echt super :smiley: und sind ja nich viele Marker

Der Sinn des Ganzen ist folgendes:
Die Seite ist für meinen Verein und die Mitglieder sollen auf Karte angezeigt werden und daneben in Tabelle die Namen und Wohnort usw.

Das sieht dann so aus, dass in Tabelle steht z.B.:

  1. Anja Berlin
  2. Claudia Berlin
  3. Katrin Potsdam

naja und daneben dann die Karte mit den Markern v_v

…die Datenbank-Tabelle ist so aufgebaut:

ID, Name, Stadt, lat, lon

Wär echt super wenn es mit PHP gehen würde, weil eigentlich funktioniert ja alles aber ich kann nur einen Marker anzeigen >.<

Muss ich für jede POI ein einzelnes Array anlegen? :expressionless: :roll_eyes:

Wozu brauchst Du php?
Hier ist ein Beispiel, wie man direkt die Daten aus einer Tabelle als Marker darstellt. http://wiki.openstreetmap.org/wiki/Openlayers_POI_layer_example

Nahmd,

Probiere einmal die Lösung 1 aus.

Gruß Wolf

Moin Lisa,

der Schnippsel hier ist getestet und funktioniert:


$dbconn = pg_connect($postgis) 
  or die('Could not connect: ' . pg_last_error());

pg_set_client_encoding("UTF-8");
$result = pg_query($query) 
  or die('Query failed: ' . pg_last_error());

echo "lon\tlat\ttitle\tdescription\n";
while ($line = pg_fetch_array($result,null,PGSQL_ASSOC)) {
  $name = htmlspecialchars($line["name"]);
  $description = htmlspecialchars($line["description"])."<br />";
  $image=$line["image"];
  if ($image!="") $description.="<img src=\"$image\" width=\"160\" height=\"120\" /><br />";
  $description .="<a href=\"?id=".$line["osm_id"]."\">Details</a>";
  echo $line["lon"]."\t".$line["lat"]."\t".$name."\t".$description."\n";
}

pg_free_result($result);
pg_close($dbconn);

Damit wird der LayerText erzeugt, der für Vorschlag 1 benötigt wird, gemäß dem “simple OpenLayers POI example”.

LG,

-moenk

Hallo und Danke für eure Antworten… scheint echt ´ne nette Comunity zu sein bei OSM ^^ so nett sind manche Programmierforen nicht wenn man als Neuling fragen stellt v_v

@Netzwolf
Ja, das scheint genau das zu sein was ich gesucht habe. Dachte mir schon, dass es irgendwie mit dieser Schleife geht aber ich hab das einfach nicht hingekriegt. Werds mit deinem Code probieren, bin mir sicher das es so funktionieren wird ^^

@fx99
Warum php, weil php das Einzige ist was ich wenigstens ein bissl verstehe obwohl ich da auch noch Anfängerin bin ^^

Vielleicht werd ich mich ja mal intensiver mit OSM beschäftigen und andere Wege ausprobieren um die Marker in die Karte zu bringen… aber für den Anfang ist es erstmal wichtig, dass es funktioniert.

Hi Lisa, ja eigentlich sind wir hier ein ganz netter Haufen :slight_smile:

was der gute fx99 meinte, wieso du nicht einfach eine statische (also nicht dynamisch mit PHP) seite machst. So beginnen viele und eigentlich ist das auch gar nicht schwer, wenn man ein paar Beispiele hat. So habe ich das damals etwa mit .KML Dateien gelöst (die kann man sehr einfachz.B. mit Google Maps erzeugen): http://usergroups.openstreetmap.de

Also, viel Erfolg und steckt den Sand nicht in den Kopf :wink: Wir hängen auch alle öfters mal an ein paar wenigen Codezeilen…