Simple Fahrzeug-/Hausmap via MySQL-Daten

  • Hallo zusammen,


    Da ich im Showroom-Bereich keinen Thread öffnen kann, werde ich das Ganze einfach als Tutorial schreiben. Eventuell hilft es einigen Leuten, alle anderen können mich haten.


    In diesem Tutorial "bestücken" wir eine Map mithilfe des jQuery-Plugins "Craftmap " und Daten aus einer MySQL-Tabelle mit Parkstandorten von Fahrzeugen. Ihr könnt selbstverständlich auch anderen Daten abfragen und so z.B. Freie Häuser auf der Karte anzeigen, das ist euch überlassen.


    Eine solche Karte könnte so aussehen:


    Was benötigen wir?

    • Erweiterte Kentnisse in PHP & SQL
    • jQuery-Plugin Craftmap inklusive Demonstrationsdateien und natürlich jQuery selbst.(Welches alles im RAR-Archiv auf der Seite enthalten ist)
    • Ein wenig Hirnmasse
    • Ein Gamemode, der auf MySQL-Tabellen aufbaut(Mit einem Filesystem würde es auch gehen, jedoch ist mir das zu viel unnötige Arbeit)
    • Eine San-Andreas Karte, vorzugsweise gleich Diese


    Ich benutze für dieses Tutorial die bereits vorhandenen Demonstrationsdateien. Im Anhang findet sich der komplette Quellcode und eine abgeänderte Version der init.js und der demo1.css.


    Nun erstellen wir uns ein neues PHP-Dokument und füllen diese mit den nötigen Informationen:

    PHP
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Eine Testmap</title>
    <link href="css/default.css" rel="stylesheet" type="text/css" />
    <link href="css/demo1.css" rel="stylesheet" type="text/css" />
    <script src="js/jquery.js" type="text/javascript"></script>
    <script src="js/craftmap.js" type="text/javascript"></script>
    <script src="js/init.js" type="text/javascript"></script>
    </head>


    Nun kommt es ganz auf eure Tabellenstruktur an, und welche Daten ihr überhaupt aus der Datenbank auslesen wollt. Ein Beispiel wäre:
    Tabllenname: vehicles
    id | model | owner | x | y | z | angle | color1 | color2 | numplate | km | tank


    Als Erstes müsst ihr nun die Grundstruktur des Plugins "einhalten":



    Erklärung:
    Den Bodytag sollte ich euch nicht erklären müssen. Die Klasse wurde hier von der Demonstration übernommen. Als Imagesource müsst ihr nun eure Map angeben. In der oberen Division werden die Koordinaten und Daten zu diesen eingefügt. Unten kommen später die Verweise rein, um auch vernünftig zwischen den einzelnen Fahrzeugen(Oder was nun gewählt wurde) zu navigieren.



    Um nun überhaupt Daten aus der Datenbank zu lesen, müssen wir uns verbinden:


    Nun müssen wir ein entsprehcendes Query "erstellen":

    SQL
    SELECT * FROM `vehicles` WHERE (`owner`='1')


    Selbsterklärend, dennoch: Selektiert alle Spalten von der Tabelle "vehicles", welche dem Besitzer(Owner) mit der ID 1 gehört(Die ID z.B. in einer players Tabelle gespeichert).



    Erklärung:
    Folgt direkt nach der Verbindunsaufnahme zur Datenbank. Die Werte, welche mittels Query aus der Tabelle gelesen werden, werden ins Array $row gespeichert. Ich habe zur Vereinfachung die Werte nochmals in eine nächste Variable gespeichert, um sie später besser verwenden zu können. Als zweiter Schritt wird quasi ein Koordinatensystem über der Bild "aufgespannt" (-x-y,-x+y,+x+y,+x-y). Die Koordinaten werden in Pixel umgerechnet und entsprechend plaziert(2000er Werte - Bei dieser Karte sollte eigentlich alles 3000 sein, da ich aber ein anderes Marker-Image genommen habe, musst ich diese Werte ein wenig anpassen).


    Unten werden noch die Verweise geschrieben, welche mittels des Nummernschildes "unterschieden" werden können.


    Pastebin:
    Init.js
    index.php


    Credits:
    Marcin Dziewulsk - jQuery-Plugin CraftMap
    IanAlbert.com - San-Andreas Karte


    Virusscan:
    Tutorial.zip


    Abschluss:
    Ich hoffe ich konnte einigen von euch mit diesem Tutorial weiterhelfen, bei Fragen bitte hier in den Thread. Ich antworte auf keine PN's oder Nachrichten via IM.

  • Gefällt mir.
    Ist es auch möglich andere Iconklassen einzufügen?

    Ja, einfach im CSS eine weitere Klasse einfügen. (Gegebenenfalls kannst du dies auch anhand einer bereits bestehenden machen)

    Hätte man vom Aufbau (Mysqlverbindung auslagern, etc) noch etwas übersichtlicher gestalten können,
    aber für Personen die das gebrauchen können reicht es sicherlich.

    Sicherlich, jedoch ist der Weg, welches dieses Tutorial verfolgt, aus meiner Sicht ausreichend ersichtlich.

  • Ja, einfach im CSS eine weitere Klasse einfügen. (Gegebenenfalls kannst du dies auch anhand einer bereits bestehenden machen)

    Das habe ich gemacht. Jedoch werden diese nicht als Marker auf der Karte angezeigt.
    Stattdessen werden diese links der Karte angezeigt und der Kartenhintergrund an sich wird nach unten verschoben.