Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Google Map des Einsatzortes #98

Open
jhbriese opened this issue Jun 20, 2015 · 18 comments
Open

Google Map des Einsatzortes #98

jhbriese opened this issue Jun 20, 2015 · 18 comments
Labels
Type: Enhancement New feature or request

Comments

@jhbriese
Copy link

Moin,

erstelle gerade eine Seite für unsere FF und fand dein Plug-In sehr gelungen und hilfreich.
Einzig die Anzeige einer Map mit dem Einsatzort hat mir noch gefehlt.

Ich habe das ganze mal getestet und mit einer extra Funktion eingepflegt. Kannst du gerne Verwenden, wenn du magst:

/**
 * Erzeugt den Kopf eines Einsatzberichts
 *
 * @param WP_Post $post Das Post-Objekt
 * @param bool $may_contain_links True, wenn Links generiert werden dürfen
 * @param bool $showArchiveLinks Bestimmt, ob Links zu Archivseiten generiert werden dürfen
 *
 * @return string Auflistung der Einsatzdetails
 */
public function getEinsatzberichtHeader($post, $may_contain_links = true, $showArchiveLinks = true)
{
    if (get_post_type($post) == "einsatz") {
        $make_links = $may_contain_links;

        $alarmierungsarten = Data::getAlarmierungsart($post->ID);
        $alarm_string = self::getAlarmierungsartString($alarmierungsarten);

        $duration = Data::getDauer($post->ID);
        $dauerstring = ($duration === false ? '' : Utilities::getDurationString($duration));

        $einsatzart = Data::getEinsatzart($post->ID);
        $showEinsatzartArchiveLink = $showArchiveLinks && Options::isShowEinsatzartArchive();
        $art = self::getEinsatzartString($einsatzart, $make_links, $showEinsatzartArchiveLink);

        $fehlalarm = Data::getFehlalarm($post->ID);
        if (empty($fehlalarm)) {
            $fehlalarm = 0;
        }
        if ($fehlalarm == 1) {
            $art = (empty($art) ? 'Fehlalarm' : $art.' (Fehlalarm)');
        }

        $einsatzort = Data::getEinsatzort($post->ID);
        $einsatzleiter = Data::getEinsatzleiter($post->ID);
        $mannschaft = Data::getMannschaftsstaerke($post->ID);

        $fahrzeuge = Data::getFahrzeuge($post->ID);
        $fzg_string = self::getFahrzeugeString($fahrzeuge, $make_links, $showArchiveLinks);

        $exteinsatzmittel = Data::getWeitereKraefte($post->ID);
        $ext_string = self::getWeitereKraefteString($exteinsatzmittel, $make_links, $showArchiveLinks);

        $alarmzeit = Data::getAlarmzeit($post->ID);
        $alarm_timestamp = strtotime($alarmzeit);
        $datumsformat = Options::getDateFormat();
        $zeitformat = Options::getTimeFormat();
        $einsatz_datum = ($alarm_timestamp ? date_i18n($datumsformat, $alarm_timestamp) : '-');
        $einsatz_zeit = ($alarm_timestamp ? date_i18n($zeitformat, $alarm_timestamp).' Uhr' : '-');

        $headerstring = "<strong>Datum:</strong> ".$einsatz_datum."<br>";
        $headerstring .= "<strong>Alarmzeit:</strong> ".$einsatz_zeit."<br>";
        $headerstring .= $this->getDetailString('Alarmierungsart:', $alarm_string);
        $headerstring .= $this->getDetailString('Dauer:', $dauerstring);
        $headerstring .= $this->getDetailString('Art:', $art);
        $headerstring .= $this->getDetailString('Einsatzort:', $einsatzort);
        $headerstring .= $this->getDetailString('Einsatzleiter:', $einsatzleiter);
        $headerstring .= $this->getDetailString('Mannschaftsst&auml;rke:', $mannschaft);
        $headerstring .= $this->getDetailString('Fahrzeuge:', $fzg_string);
        $headerstring .= $this->getDetailString('Weitere Kr&auml;fte:', $ext_string);

        //MODIFICATION TO DISPLAY GOOGLE MAP
        return "<p>$headerstring</p>" . $this->getEinsatzberichtMap($einsatzort);
    }
    return "";
}

/**
 * Erzeugt eine Google Map des Einsatzortes
 * 
 * @author Jan-Hendrik Briese, www.janbriese.de
 *
 * @param WP_Post $post Das Post-Objekt
 * @param bool $may_contain_links True, wenn Links generiert werden dürfen
 * @param bool $showArchiveLinks Bestimmt, ob Links zu Archivseiten generiert werden dürfen
 *
 * @return string Code zum Erzeugen der Google-Map mit Markierten einsatzort
 */
public function getEinsatzberichtMap($einsatzort)
{
if($einsatzort)
{   
  $mapstring = "<style>html, body, #map-canvas {height: 300px; width: 500px margin: 0px; padding: 0px }</style>\n";
      $mapstring .= "<script>\n";
      $mapstring .= "var geocoder;\n";
      $mapstring .= "var map;\n";
      $mapstring .= "function initialize() {\n";
      $mapstring .= "  geocoder = new google.maps.Geocoder();\n";
      $mapstring .= "  var latlng = new google.maps.LatLng(53.523463, 9.482329);\n";
      $mapstring .= "  var mapOptions = {\n";
      $mapstring .= "    zoom: 13,\n";
      $mapstring .= "    center: latlng\n";
      $mapstring .= "  }\n";
      $mapstring .= "  map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); \n";
      $mapstring .= "  var address = '" . $einsatzort . "';\n";
      $mapstring .= "  geocoder.geocode( { 'address': address}, function(results, status) {\n";
      $mapstring .= "    if (status == google.maps.GeocoderStatus.OK) {\n";
      $mapstring .= "      map.setCenter(results[0].geometry.location);\n";
      $mapstring .= "      var marker = new google.maps.Marker({\n";
      $mapstring .= "          map: map,\n";
      $mapstring .= "          position: results[0].geometry.location\n";
      $mapstring .= "      });\n";
      $mapstring .= "    } else {\n";
      $mapstring .= "      map.setCenter(new google.maps.LatLng(53.523463, 9.482329));\n";
      $mapstring .= "    }\n";
      $mapstring .= "  });\n";
      $mapstring .= "}\n";
      $mapstring .= "google.maps.event.addDomListener(window, 'load', initialize);\n";
      $mapstring .= "</script>\n";
      $mapstring .= "<p id='map-canvas'></p>\n";

      return $mapstring;
}
else
{
  return "";
}
}

Hoffe ich konnte etwas beisteuern ;)

Gruß Jan

@abrain
Copy link
Owner

abrain commented Jun 23, 2015

Super, danke :)
Das Feature wird in der Tat immer häufiger angefragt, wird also auch noch seinen Weg in das Plugin finden. Ob es allerdings Google Maps wird, oder doch OpenStreetMap muss ich noch sehen.

@sebastianroming
Copy link

@abrain Vorschlag: warum nicht den User selbst auswählen lassen? Ich persönlich nutze z.B. nur Google Maps, kein OSM. Biete dem User eine Möglichkeit, einen API Key für Google Maps zu hinterlegen - dann sollte das kein Problem sein :-)

@abrain
Copy link
Owner

abrain commented Jun 25, 2015

Stimmt, der API Key ist immer der springende Punkt bei Open Source Software. Aber richtig, das kann der User bei Bedarf dann selbst entscheiden. Danke!

@sebastianroming
Copy link

@abrain Sofern "Implementationsunterstützung" besteht - einfach Bescheid geben. Ich bastel schon ziemlich lang' mit Google Maps.

@SebastianSchultz
Copy link

Hallo zusammen,

ich habe soeben den obigen Code mal bei mir eingefügt, da ich die Funktion auch gern verwenden wollte, allerdings wird bei mir nur eine freie Fläche und keine Karte angezeigt?!

Hat jemand ne Idee, woran das liegt?

@jhbriese
Copy link
Author

Habs gerade erst gesehen,
könnte am Theme liegen. Hab gestern eine neue Version via Pull Request eingestellt. Hab es selber aber auch nur mitt unserem Theme gestestet, sollte aber normalerweise nichts besonderes dran sein. Eventuell fehlt auch einfach das API Script, ist im Pull Request jetzt registriert.

@HeikoBornholdt
Copy link
Contributor

Moin,

gibt es schon was Neues zu diesem Thema?

Ich würde mich über eine Google Maps-Integration freuen.

@jhbriese
Copy link
Author

Moin wie sieht es mit der Integration von PR #114 aus? Soll ich ggf noch etwas anpassen?

@abrain
Copy link
Owner

abrain commented Jun 6, 2017

Siehe #114 (comment)

@podogu
Copy link

podogu commented Jul 6, 2017

Könnte man eventuell auch eine Karte generieren, die für ein Jahr alle Einsätze anzeigt?
Und wo muss der Code eingefügt werden?

@Markkuuss
Copy link
Contributor

Das Thema war ja schon relativ weit. Wie sieht's denn aus? Kann man demnächst mit der Integration der Karte rechnen?

@abrain
Copy link
Owner

abrain commented Sep 20, 2018

Eine ganz grundsätzliche Frage, die mir bei diesem Issue durch den Kopf geht: Eine einfache Karte ist nur dann sinnvoll, wenn ich darauf einen Ort markiere. Das wäre in diesem Kontext der Einsatzort. Ich hoffe allerdings, dass wir uns an der Stelle einig sind, dass genaue Adressen von Einsatzorten nicht Teil des Einsatzberichts auf der Webseite sein sollten.

Die Angabe des Einsatzortes nur auf den Straßennamen zu beschränken wird die Markierung auf einen beliebigen Punkt in der Straße setzen (i.d.R. die Mitte). Hier ist die Angabe der Markierung sogar irreführend, weil davon ausgegangen wird, dass ein exakter Ort markiert werden soll.

Mein Vorschlag wäre daher folgender:
Das Freitextfeld für den EInsatzort bleibt in seiner jetzigen Form bestehen. Das bietet allen Benutzern die gleiche Flexibilität, egal ob die Karte verwendet wird, oder nicht. Die Eingabemaske für Einsatzberichte erhält zusätzlich eine Möglichkeit, eine (möglicherweise exakte) Adresse anzugeben. Diese wir aber nicht gespeichert, sondern nur einmalig zur Auflösung der Koordinate verwendet. Alternativ kann die Koordinate auch direkt angegeben werden. Zu dieser Koordinate wird in einem ausreichend groben Gitter eine Zelle herausgesucht. Nur die Zugehörigkeit zu dieser Zelle wird dann mit dem Einsatzbericht gespeichert.

Dieses Konzept kann man sich beispielsweise auf der Karte von luftdaten.info ansehen. Hierbei werden die exakten Standorte der Messtationen, die bei Privatleuten aufgestellt sind, verschleiert. Zum Einsatz kommt dafür d3-hexbin.

Die Farbe der Sechsecke gibt hierbei über den Durchschnitt der Messwerte in diesem Bereich Auskunft. Messwerte in diesem Sinn entstehen bei Einsätzen nicht, es wäre aber denkbar die Einfärbung zur Erstellung einer Heatmap zu verwenden. Damit könnte die Häufigkeit von Einsätzen in bestimmten Bereichen sichbar gemacht werden.

@jhbriese
Copy link
Author

Moin so wie ich es in meinem Vorschlag implementiert habe kann die Karte (de)aktiviert werden. Neben dem Adressfeld befindet sich ein Button zum auflösen der Koordinate welche in einem extra Geld gespeichert wird. Der Marker kann nun noch mit der Maus versetzt werden

@abrain
Copy link
Owner

abrain commented Sep 22, 2018

Korrekt, damit ist auch ersteinmal nichts verkehrt. Das ist aber nicht der Punkt, den ich oben ansprechen wollte. Es geht darum, dass genaue Adressen und/oder Koordinaten nicht gespeichert werden sollen.

Ich sehe aktuell keinen Grund, die exakte Koordinate anzuzeigen bzw. überhaupt zu speichern. Das wird alleine schon rechtlich nicht in Ordnung sein. Mich würde dazu interessieren, ob das jemand anders sieht.

@jhbriese
Copy link
Author

Da stimme ich mit dir vollkommen überein. Wir handhaben das so, dass wir maximal die Straße angeben, bzw bei VU auch mal die Kreuzung. Deshalb die Funktion, die eingegebene Adresse (Straße) von Google auflösen zu lassen und anschließend den Marker verschieben zu können. Wir gehen immer nur etwa in die Region des Einsatzes. Das sehe ich nicht als kritisch. Oftmals orientieren wir uns auch an den Presseberichten unserer lokalen Zeitung da diese in der Regel mit der POL abgestimmt sind.

@Markkuuss
Copy link
Contributor

Ich sehe aktuell keinen Grund, die exakte Koordinate anzuzeigen bzw. überhaupt zu speichern. Das wird alleine schon rechtlich nicht in Ordnung sein. Mich würde dazu interessieren, ob das jemand anders sieht.

Ich sehe das genauso. Wir speichern auch keine Hausnummern, sondern lediglich Straßennamen ab. Derzeit verwenden wir zwar auch eine Karte, aber das Problem ist einfach: Wo setzt man den Marker hin? Man interpretiert natürlich immer, dass der Einsatzort genau dort ist, wo der Marker gesetzt wurde, selbst wenn der Marker in der Mitte der Straße platziert wurde. Von dieser Lösung wollen wir längst weg. Die Lösung mit d3-hexbin Overlay finde ich sehr gut.

Wir planen derzeit die Umstellung auf Wordpress. Das Plugin mit dieser Overlay-Lösung würde dann keine Wünsche mehr offen lassen.

@HeikoBornholdt
Copy link
Contributor

@abrain abrain added Type: Enhancement New feature or request and removed new feature labels Sep 21, 2019
@oiooio
Copy link

oiooio commented Sep 2, 2022

@abrain Ist dieses Feature in Planung? Eventuell auch mit Openstreetmap-Kartenlayer anstatt Google Maps. Da gibts ja z.B. mit Leaflet was ganz brauchbares.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Type: Enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

8 participants