PHP Ausgabe zerlegen

E

Ec16

Hallo,

mal wieder ich mit einem Problem wo ich nicht weiter komme.

Und zwar habe ich eine DB Abfrage und möchte den Wert gerne zerlegen für eine Google Map.
Den Wert (Zeichenkette) erstelle ich mir mit einer anderen Google Map und zwar genau die gleiche wie hier:
http://www.the-di-lab.com/polygon/

Die Abfrage sieht wie folgt aus:
PHP:
$abfrage =  ("Select * FROM verein WHERE id ='" .  mysql_real_escape_string($_GET['id']) . "';");
$ergebnis = mysql_query($abfrage);
if (!$ergebnis)
{
	die('Invalid query: ' . mysql_error());
}
while($row = mysql_fetch_object($ergebnis))
{
	echo ' '. $row->strecke . ' ';
}

Als Ergebnis bei "strecke" bekomme ich z.B. einen Wert der so aussieht:
Code:
(50.54309395492101, 8.515777587890625)(50.59194113547687, 8.647613525390625)(50.66250551544689, 8.765716552734375)(50.699922592840785, 8.842620849609375)(50.645962883774004, 8.795928955078125)(50.63289879592736, 8.7615966796875)(50.609374285799454, 8.71490478515625)(50.57798996541261, 8.680572509765625)(50.5605451899225, 8.64898681640625)(50.53785732470035, 8.56109619140625)(50.5291283155526, 8.513031005859375)(50.5291283155526, 8.513031005859375)

Jetzt möchte ich dieses Ergebnis gerne zerlegen um es in eine Google Map einbauen zu können.
Das wo die Werte nachher rein kommen sollen sieht so aus:
Code:
<script type="text/javascript">
		var paths = [[
			new google.maps.LatLng(38.872886, -77.054720),
			new google.maps.LatLng(38.872602, -77.058046),
			new google.maps.LatLng(38.870080, -77.058604),
			new google.maps.LatLng(38.868894, -77.055664),
			new google.maps.LatLng(38.870598, -77.053346)
		]];

		function initialize() 
		{
			var map = new google.maps.Map(document.getElementById("map"), 
			{
				zoom: 16,
				center: new google.maps.LatLng(38.8714, -77.0556),
				mapTypeId: google.maps.MapTypeId.SATELLITE
			});

			var poly = new google.maps.Polygon(
			{
				paths: paths,
				strokeWeight: 3,
				fillColor: '#55FF55',
				fillOpacity: 0.5
			});

			poly.setMap(map);
		}
	</script>
Also oben in die Zeilen 3-7 sollen dann die Werte rein.

Ich kann an der Google Map zum erstellen des Codes und an der Google Map zum anzeigen des Codes alles ändern.
Nur habe ich keine Ahnung von JavaScript.
Vielleicht kann man ja schon an der Google Map zum erstellen des Codes was ändern um diesen dann später besser teilen zu können bzw. vielleicht schon fix und fertig erstellen.

Wie kann ich das am besten zerlegen?
Kann mir da jemand helfen?

Danke
 
Zuletzt bearbeitet von einem Moderator:
Sehe ich richtig, dass die Werte immer gleichviel Zeichen haben (eine Klammer, 17 Zeichen, Komma&Abstand und nochmals 17 Zeichen mit einer Klammer)?
Dann könntest du das natürlich fest einprogrammieren. Läuft aber die Gefahr dass es Fehler gibt.

Wenn du es so machen willst wie du sagst, müsstest alle Indizen der Klammern rausholen (->strpos) und dann in einer Schlaufe von Hinten nach Vorne den Teil
Code:
,new google.maps.LatLng
einfügen.
 
Eclipse16V hat gesagt.:
Dachte ich jetzt gerade auch dran.
Geht es nicht einfacher indem er gleich aus

Code:
(38.872886, -77.054720)(38.872602, -77.058046)

Code:
new google.maps.LatLng(38.872886, -77.054720),
            new google.maps.LatLng(38.872602, -77.058046),

macht?
Müsste je eigentlich nur immer
Code:
,new google.maps.LatLng
zwischen die Klammern setzen.

Das ist die bisher einfachste Lösung.

Wenn möglich würde ich trotzdem darüber nachdenken, ob die Daten nicht etwas anders Strukturiert seien sollten. Gleich mehrere Koordinaten in einer Zelle ist nicht sehr atomar, zumal Zahlen in der DB als Text repräsentiert werden.
 
Wie ZodiacXP sagt, wäre es am schönsten, wenn nur die Zahlen in die DB geschrieben würden.
Dann müsstest du nicht mühsam den Befehlt zusammenbasteln, sondern einfach die Zahlen auslesen und einsetzen.

Wie werden denn die Daten generiert? Evtl. ist da mit wenig Aufwand etwas erreicht.
 
Wie wäre es mit regulären Ausdrücken?
PHP:
$count = preg_match_all('/(\d+\.\d+)/', $str, $matches);

if ($count === false || ($count % 2 != 0)) {
    // error
}
else {
    $pairs = array();

    for ($i = 0; $i < $count; $i+=2) {
        $pairs[] = array($matches[0][$i], $matches[0][$i+1]);
    }

     // do something with pairs
}
 
Dein Anliegen hat mehr mit der Datenbank zu tun, nicht mit dem JS-Code.

Die Frage von DexXxtrin war, warum die Daten so…

Code:
(50.54309395492101, 8.515777587890625)(50.59194113547687, 8.647613525390625)(50.66250551544689, 8.765716552734375)(50.699922592840785, 8.842620849609375)(50.645962883774004, 8.795928955078125)(50.63289879592736, 8.7615966796875)(50.609374285799454, 8.71490478515625)(50.57798996541261, 8.680572509765625)(50.5605451899225, 8.64898681640625)(50.53785732470035, 8.56109619140625)(50.5291283155526, 8.513031005859375)(50.5291283155526, 8.513031005859375)

…in dem Datenbankfeld stehen.

Ich würde aber in diesem Fall im Zweifel ganz pragmatisch sagen: Ist egal. Nimm eine der gezeigten Lösungen und fertig.
 
Dann musst du mir bitte verraten, wie du mit JavaScript Daten in eine MySQL-Tabelle bekommst. (Die Antwort ist: Gar nicht.)

Den zweiten Codeblock habe ich mir selbstverständlich nicht näher angesehen. Der ist unlesbar.
 
Zuletzt bearbeitet:
Zurück