Commit 35fbb4cb authored by Tobias Zeumer's avatar Tobias Zeumer

Initial (and probably last) commit

parent 70489627
json/*
.~lock*
# TUHH uMap
Der Campus (und mehr): [TUHH uMap](https://umap.openstreetmap.fr/de/map/tuhh_238303).
## Über
Interessante Orte an der TUHH für OpenStreetMap bzw. [uMap](http://umap.openstreetmap.fr/de/) erzeugen.
Absoluter Quick & Dirty-Ansatz. Da uMap auch Remote Data (URLs) unterstützt, wären Daten auf dem lokalen Server oder ggf. auch via Wikidata und/oder [http://openrefine.org/|OpenRefine] netter. Auch angepasste Icons sind möglich. Bei Remote Data wird außerdem eine "From/To Zoom Level" unterstützt.
## Verwendung
### Import
1. csv/einrichtungen.csv für eigenen Bedarf anpassen (z.B. mit LibreCalc). Die Spalte Layer erzeugt getrennte GeoJson-Dateien (Vorteil gegenüber CSV-Varianten: Umbrüche möglich).
2. Dateien mit index.php erzeugen
3. Editiermodus der jeweiligen uMap aufrufen
Dort dann
1. "Import Data" aufrufen
2. "Choose Layer to import in" wählen (Am besten immer "Replace layer content" anhaken.)
3. "Choose file" - Datei aus ./json/ für den Layer auswählen und "Import" klicken.
### Tipps
* Für die Layer lassen sich die Default-Icons für Mapmarker definiere (unter "Shape Properties"). Die "Icon Shape"-Variante "Drop" sieht schicker als die Voreinstellung aus.
* Genauere Positionierung: Einfach einen Marker erstellen, an die gewünschte Stelle schieben. Dann den Marker bearbeiten und die "Coordinates" kopieren (sehr viel exakter als z.B. bei Google Maps).
### Überlegung / Todo
* Sehr viele Einzelelemente (z.B. die 80 Institute der TUHH) lassen sich praktisch nicht separat darstellen. Die Filterliste ist eine (derzeit gewählte) Möglichkeit. Alternativ könnte man *einen* Layer pro Gebäude machen, die Institute dort einfügen und die tabellarische Ansicht wählen (Layer > Interaction Options > Popup style).
* Bilder wären noch schön. Ggf. kleine für die Description oder größere als Orientierungsmöglichkeit.
# Quellen TUHH
## Wikidata
Die Institute kommen aus Wikidata [Link zum Query](https://query.wikidata.org/#SELECT%20DISTINCT%20%3FDekanatLabel%20%3FInstitut%20%3FInstitut_de%20%3FInstitut_en%20%3FKurz%20%3FStrasseNo%20%3FPLZ%20%3FStadtLabel%20%3FWeb%20%3FMail%20%3FLeitung%20%3FLeitungLabel%20%3FLage%20%3FGoogleMapsCID%20WHERE%20%7B%0A%20%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22%5BAUTO_LANGUAGE%5D%2Cen%2Cde%22.%20%7D%0A%20%20%23%20FILTERS%0A%20%20%3FDekanat%20wdt%3AP361%20wd%3AQ1060.%0A%20%20%3FDekanat%20wdt%3AP31%20wd%3AQ180958.%0A%20%20%23%20SHOW%0A%20%20%3FDekanat%20wdt%3AP527%20%3FInstitut.%0A%20%20%23%20Get%20english%20and%20german%20name%20%28label%29%20of%20institute%0A%20%20%3FInstitut%20rdfs%3Alabel%20%3FInstitut_de%20.%20FILTER%28lang%28%3FInstitut_de%29%3D%27de%27%29%0A%20%20%3FInstitut%20rdfs%3Alabel%20%3FInstitut_en%20.%20FILTER%28lang%28%3FInstitut_en%29%3D%27en%27%29%20%20%20%20%0A%20%20%23%20BAD%3A%20Get%20%22ID%22%20-%20https%3A%2F%2Fwww.wikidata.org%2Fwiki%2FWikidata%3AProperty_proposal%2Forganizational_unit_id%0A%20%20%23%20BAD%3A%20BIND%28SUBSTR%28%3FInstitut_de%2C%2010%2C4%29%20AS%20%3FLeitzeichen%29.%0A%20%20%23%20BAD%3A%20BIND%28REPLACE%28%3FLeitzeichen%2C%20%22%3A%22%2C%20%22%22%29%20AS%20%3FLeitzeichen%29.%0A%20%20%23%20Fetch%20Properties%0A%20%20OPTIONAL%20%7B%20%3FInstitut%20wdt%3AP1813%20%3FKurz.%20FILTER%28lang%28%3FKurz%29%3D%27de%27%29%20%7D%0A%20%20OPTIONAL%20%7B%20%3FInstitut%20wdt%3AP856%20%3FWeb.%20%7D%0A%20%20OPTIONAL%20%7B%20%3FInstitut%20wdt%3AP968%20%3FMail.%20%7D%0A%20%20OPTIONAL%20%7B%20%3FInstitut%20wdt%3AP488%20%3FLeitung.%20%7D%0A%20%20OPTIONAL%20%7B%20%3FInstitut%20wdt%3AP625%20%3FLage.%20%7D%0A%20%20OPTIONAL%20%7B%20%3FInstitut%20wdt%3AP3749%20%3FGoogleMapsCID.%20%7D%0A%20%20%23%20Fetch%20Properties%20with%20Qualifiers%0A%20%20%23%20This%20works%20if%20no%20qualifiers%20are%20required%3A%20%20OPTIONAL%20%7B%20%3FInstitut%20wdt%3AP969%20%3FStrasse.%20%7D%0A%20%20OPTIONAL%20%7B%0A%20%20%3FInstitut%20p%3AP969%20%3Fstatement_street.%0A%20%20%20%20%20%3Fstatement_street%20pq%3AP669%20%3FStrasse.%0A%20%20%20%20%20%20%20%3FStrasse%20rdfs%3Alabel%20%3FStrasseMyLabel.%0A%20%20%20%20%20%3Fstatement_street%20pq%3AP670%20%3FNo.%0A%20%20%20%20%20%3Fstatement_street%20pq%3AP281%20%3FPLZ.%0A%20%20%20%20%20%3Fstatement_street%20pq%3AP131%20%3FStadt.%0A%20%20%20%20%20%23%20Concat%20street%20and%20street%20number%0A%20%20%20%20BIND%28CONCAT%28%3FStrasseMyLabel%2C%20%22%20%22%2C%20%3FNo%29%20AS%20%3FStrasseNo%29.%0A%20%20%7D%0A%7D%0Aorder%20by%20%3FInstitut%0ALIMIT%20100). Telefonnummern hab ich dort leider nicht eingetragen.
## RZ-POIs + TUHH-Website
Übernahme nach einer alten Liste des RZ's: https://tissy.tuhh.de/pois/show/, sowie teilweise nach der TU-Website.
### Eingetragen
* Drucker: OSM (Lageplan)
** Ja und angepasst
* Gastronomie: OSM (Lageplan)
** Ja und ergänzt
* Gebaeude: OSM (Lageplan)
** Ja
* Geldautomat: OSM (Lageplan)
** Ja und ergänzt
* HVV: OSM (Lageplan)
** Ja, aber bissel weggelassen
* Hoersaal: OSM (Lageplan)
** Ja
Sonstiges: OSM (Lageplan)
* Ja (als Hilfe, Unterstützung und Beratung)
### Ausgelassen (später vielleicht)
* Kunst: OSM (Lageplan)
** eigentlich nett
* Lernraum: OSM (Lageplan)
** Uff...
* Poolraum: OSM (Lageplan)
** Uff...
* Seminarraum: OSM (Lageplan)
** Ufff...
* StudentischeEinrichtung: OSM (Lageplan)
** Schwer überhaupt die POIs zu erwischen
* ZentraleEinrichtung: OSM (Lageplan)
** Unvollständig - Teilweise als "Einrichtung", teilweise als "Hilfe, Unterstützung und Beratung")
### Ausgelassen (und egal)
* Eingang: OSM (Lageplan)
** Umm, neee
* Konferenzraum: OSM (Lageplan)
** Nichts angegeben
*Parken: OSM (Lageplan)
** Eigentlich deutlich genug durch die P's und Navis führen eh hin...
* WC: OSM (Lageplan)
** Wer ernsthaft den Plan für die Suche nach einem WC aufruft...
* ZeitlichBefristet: OSM (Lageplan)
** Nix
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
DekanatLabel,Institut,Institut_de,Institut_en,Kurz,StrasseNo,PLZ,StadtLabel,Web,Mail,Leitung,LeitungLabel,Lage,GoogleMapsCID
Department B: Civil Engineering,http://www.wikidata.org/entity/Q55803576,Institut B-5: Geotechnik und Baubetrieb,Institute B-5: Geotechnical Engineering and Construction Management,GB,Harbuger Schloßstraße 20 (HS20),21079,Hamburg,https://www.tuhh.de/gbt/,mailto:prahl@tuhh.de,,,Point(9.983426944 53.464986944),
"Department E: Electrical Engineering, Computer Science and Mathematics",http://www.wikidata.org/entity/Q55804362,Institut E-2: Bildverarbeitungssysteme,Institute E-2: Vision Systems,BVS,Harbuger Schloßstraße 20 (HS20),21079,Hamburg,https://www.tuhh.de/alt/bvs/institut/,mailto:grigat@tuhh.de,,,Point(9.983427 53.464987),
"Department E: Electrical Engineering, Computer Science and Mathematics",http://www.wikidata.org/entity/Q55804887,Institut E-5: Biomedizinische Bildgebung,Institute E-5: Biomedical Imaging,IBI,Lottestraße 55,22529,Hamburg,https://www.tuhh.de/ibi/,mailto:a.tauche@uke.de,,,Point(9.97363 53.597043),
"Department E: Electrical Engineering, Computer Science and Mathematics",http://www.wikidata.org/entity/Q55804914,Institut E-6: Elektrische Energietechnik,Institute E-6: Electrical Power and Energy Technology (ieet),IEET,Harbuger Schloßstraße 20 (HS20),21079,Hamburg,https://www.tuhh.de/ieet/,mailto:ieet@tuhh.de,,,Point(9.983427 53.464987),
"Department E: Electrical Engineering, Computer Science and Mathematics",http://www.wikidata.org/entity/Q55805829,Institut E-15: Sicherheit in verteilten Anwendungen,Institute E-15: Security in Distributed Applications,SVA,Harbuger Schloßstraße 20 (HS20),21079,Hamburg,https://www.tuhh.de/sva/,mailto:florian.gondesen@tuhh.de,http://www.wikidata.org/entity/Q21898103,Dieter Gollmann,Point(9.983427 53.464987),
"Department E: Electrical Engineering, Computer Science and Mathematics",http://www.wikidata.org/entity/Q55806124,Institut E-18: Theoretische Elektrotechnik,Institute E-18: Electromagnetic Theory,TET,Harbuger Schloßstraße 20 (HS20),21079,Hamburg,http://www.tet.tuhh.de/,mailto:schuster@tuhh.de,,,Point(9.983427 53.464987),
Department G: Vocational Subject Education,http://www.wikidata.org/entity/Q55806687,Institut G-2: Laser- und Anlagensystemtechnik,Institute G-2: Laser and System Technologies,iLAS,Am Schleusengraben 14,21029,Hamburg,https://www.tuhh.de/ilas/,mailto:ilas@tuhh.de,,,Point(10.202388888 53.476694444),
Department M: Mechanical Engineering,http://www.wikidata.org/entity/Q55806856,Institut M-7: Flugzeug-Systemtechnik,Institute M-7: Aircraft Systems Engineering,FST,Nesspriel 5 (NP5),21129,Hamburg,https://www.fst.tuhh.de,mailto:monika.wittke@tuhh.de,,,Point(9.851605 53.537907),
Department M: Mechanical Engineering,http://www.wikidata.org/entity/Q55806903,Institut M-14: Strukturdynamik,Institute M-14: Structural Dynamics,DYN,Schloßmühlendamm 30,21073,Hamburg,https://www.tuhh.de/dyn,mailto:dynamics.group@tuhh.de,,,Point(9.982106 53.462978),
Department M: Mechanical Engineering,http://www.wikidata.org/entity/Q55806912,Institut M-25: Flugzeug-Kabinensysteme,Institute M-25: Aircraft Cabin Systems,FKS,Nesspriel 5 (NP5),21129,Hamburg,https://www.tuhh.de/fks/,mailto:info-fks@tuhh.de,,,Point(9.851605 53.537907),
Department M: Mechanical Engineering,http://www.wikidata.org/entity/Q55806914,Institut M-28: Lufttransportsysteme,Institute M-28: Air Transportation Systems,ILT,Blohmstraße 20,21079,Hamburg,https://www.tuhh.de/ilt/,mailto:volker.gollnick@tuhh.de,,,Point(9.980972222 53.466277777),
Department M: Mechanical Engineering,http://www.wikidata.org/entity/Q55806916,Institut M-EXK2: Molekulardynamische Simulation weicher Materie (Exzellenzkolleg Juniorprofessur),Institute M-EXK2: Molekulardynamische Simulation weicher Materie,,,,,,,,,,
Department W: Management Sciences and Technology,http://www.wikidata.org/entity/Q55807333,Institut W-6: Technische Logistik,Institute W-6: Technical Logistics,ITL,Theodor-Yorck-Straße 8,21079,Hamburg,https://www.tuhh.de/itl/,mailto:itl@tuhh.de,,,Point(9.98775 53.463111111),
<?php
// Campus
$name = 'wikidata_institute-Campus';
$data = csv_to_array(file_get_contents("csv/$name.csv"), "\n");
createGeoJsonInstitute($data, $name);
// Off Campus
$name = 'wikidata_institute-offCampus';
$data = csv_to_array(file_get_contents("csv/$name.csv"), "\n");
createGeoJsonInstitute($data, $name);
// Other
$data = csv_to_array(file_get_contents("csv/einrichtungen.csv"), "\n");
createGeoJson($data);
/*
*simple star for italic*
**double star for bold**
# one hash for main heading
## two hashes for second heading
### three hashes for third heading
Simple link: [[http://example.com]]
Link with text: [[http://example.com|text of the link]]
Image: {{http://image.url.com}}
Image with custom width (in px): {{http://image.url.com|width}}
Iframe: {{{http://iframe.url.com}}}
Iframe with custom height (in px): {{{http://iframe.url.com|height}}}
Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}
--- for an horizontal rule
*/
function createGeoJson($fields) {
//Layer Name_de Name_en Kurz Straße PLZ Stadt Homepage Twitter Mail Lage Image Beschreibung
foreach ($fields as $entry) {
$layer = $entry['Layer'];
if (!$entry['Lage']) {
echo "Keine Geokoordinate: ".$entry['Name_de']."<br />";
continue;
} elseif ($layer == 'IGNORE') {
continue;
}
$coord = explode(', ', $entry['Lage']);
$lat = $coord[0];
$lon = $coord[1];
$name = $entry['Name_de'];
if ($entry['Kurz']) $name .= ' ('.$entry['Kurz'].')';
$description = '';
if ($entry['Name_en']) $description = '*'.$entry['Name_en'].'*\n\n**Kontakt**\n';
$description .= $entry['Straße'].'\n'.$entry['PLZ'].' '.$entry['Stadt'].'\n';
if ($entry['Homepage']) $description .= '[['.$entry['Homepage'].'|Website]]';
if ($entry['Mail']) $description .= ' | [[mailto:'.$entry['Mail'].'|'.$entry['Mail'].']]';
if ($entry['Telefon']) $description .= ' | [[tel:'.$entry['Telefon'].'|'.$entry['Telefon'].']]';
if ($entry['Twitter']) $description .= ' | [[https://twitter.com/'.str_replace('@', '', $entry['Twitter']).'|'.$entry['Twitter'].']]';
if ($entry['Beschreibung']) $description .= '\n\n**Infos & Links**\n'.$entry['Beschreibung'];
// Links
$links = array();
if ($entry['Google CID']) $links[] = '[[https://maps.google.com/?cid='.$entry['Google CID'].'|Google Maps (Kommentare)]]';
if ($entry['Wikipedia']) $links[] = '[['.$entry['Wikipedia'].'|Wikipedia]]';
if ($entry['Wikidata']) $links[] = '[['.$entry['Wikidata'].'|Wikidata]]';
if (count($links) > 0) {
$description .= '\n\n**Externe Links**\n';
$description .= implode(' | ', $links);
}
// name + description are uMap default for popups. Own templates possible via Layer > Edit > Interactive Options > Popup Content Template (but without conditions)
$json_entries[$layer][] = '
{
"type": "Feature",
"properties": {
"name": "'.$name.'",
"description": "'.$description.'",
"name_en": "'.$entry['Name_en'].'",
"street": "'.$entry['Straße'].'",
"zip": "'.$entry['PLZ'].'",
"town": "'.$entry['Stadt'].'",
"email": "'.$entry['Mail'].'",
"phone": "'.$entry['Telefon'].'",
"twitter": "'.$entry['Twitter'].'",
"googleMapsCid": "'.$entry['Google CID'].'",
"wikidata": "'.$entry['Wikidata'].'",
"wikipedia": "'.$entry['Wikipedia'].'"
},
"geometry": {
"type": "Point",
"coordinates": [
'.$lon.',
'.$lat.'
]
}
}';
}
// Create files
foreach ($json_entries as $layer => $entries) {
$json = '
{
"type": "FeatureCollection",
"features": [
'.implode(",\n", $entries).'
]
}';
file_put_contents('json/'.$layer.'.geojson.json', $json);
}
}
// Data from Wikidata - see Readme.md
function createGeoJsonInstitute($fields, $save) {
//DekanatLabel,Institut,Institut_de,Institut_en,Kurz,,Leitung,LeitungLabel,Lage
foreach ($fields as $entry) {
if (!$entry['Lage']) {
echo "Keine Geokoordinate: ".$entry['Institut_de']."<br />";
continue;
}
$coord = str_replace('Point(', '', $entry['Lage']);
$coord = str_replace(')', '', $coord);
$coord = explode(' ', $coord);
$lon = $coord[0];
$lat = $coord[1];
$name = $entry['Institut_de'];
if ($entry['Kurz']) $name .= ' ('.$entry['Kurz'].')';
$description = '*'.$entry['Institut_en'].'*\n\n**Kontakt**\n';
$description .= $entry['StrasseNo'].'\n'.$entry['PLZ'].' '.$entry['StadtLabel'].'\n';
if ($entry['Web']) $description .= '[['.$entry['Web'].'|Website]]';
if ($entry['Mail']) $description .= ' | [['.$entry['Mail'].'|'.str_replace('mailto:', '', $entry['Mail']).']]';
// Links
$links = array();
if ($entry['GoogleMapsCID']) $links[] = '[[https://maps.google.com/?cid='.$entry['GoogleMapsCID'].'|Google Maps (Kommentare)]]';
if ($entry['Institut']) $links[] = '[['.$entry['Institut'].'|Wikidata]]';
if (count($links) > 0) {
$description .= '\n\n**Externe Links**\n';
$description .= implode(' | ', $links);
}
$json_entries[] = '
{
"type": "Feature",
"properties": {
"name": "'.$name.'",
"description": "'.$description.'",
"name_en": "'.$entry['Institut_en'].'",
"street": "'.$entry['StrasseNo'].'",
"zip": "'.$entry['PLZ'].'",
"town": "'.$entry['StadtLabel'].'",
"email": "'.str_replace('mailto:', '', $entry['Mail']).'",
"phone": "",
"twitter": "",
"wikidata": "",
"wikipedia": ""
},
"geometry": {
"type": "Point",
"coordinates": [
'.$lon.',
'.$lat.'
]
}
}';
}
$json = '
{
"type": "FeatureCollection",
"features": [
'.implode(",\n", $json_entries).'
]
}';
file_put_contents('json/'.$save.'.geojson.json', $json);
}
function csv_to_array($string='', $row_delimiter=PHP_EOL, $delimiter = "," , $enclosure = '"' , $escape = "\\" ) {
$rows = array_filter(explode($row_delimiter, $string));
$header = NULL;
$data = array();
foreach($rows as $row) {
$row = str_getcsv ($row, $delimiter, $enclosure , $escape);
$row = array_map('trim', $row);
if(!$header) {
$header = $row;
} else {
$data[] = array_combine($header, $row);
}
}
return $data;
}
?>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment