Karten der Teilnehmer der Synode von Konstantinopel und der Synode von Aquileia 381

In zwei heute auf Patmos befindlichen griechischen Handschriften (172 und 173) sowie in syrischer (in den Handschriften BL Add. 14,528 und Borg. sir. 82 sowie in Mardin, Orth. 309) als auch lateinischer (in den Canones-Sammlungen der Prisca und der Dionysiana altera) Übersetzung liegt eine ungefähr 150 Namen umfassende Liste der Teilnehmer der Synode von Konstantinopel vor, in der neben dem Namen des Bischofs (bzw. des/der ihn vertretenden Klerikers) auch der Bischofsort angegeben ist und die nach Provinzen sortiert ist. Im Zuge der Edition in den »Dokumenten zur Geschichte des arianischen Streites« habe ich eine Karte dieser Teilnehmerliste erstellt, um mit ihrer Hilfe überlieferungstechnische und vor allem inhaltliche, die Kommentierung der Liste betreffende Fragen klären zu können.

Die fertige Karte befindet sich jetzt auf der Homepage des Athanasius Werke-Projektes: Karte der Teilnehmer an der Synode von Konstantinopel 381

Im Folgenden möchte ich kurz darstellen, wie ich die Karte erstellt habe:

In einem ersten Schritt habe ich dazu die Orte mit Hilfe der Pleiades-Datenbank (und gelegentlich weiterer Hilfsmittel) identifiziert und aus dieser sowohl die ID als auch die geographischen Koordinaten entnommen, so daß ich für jede Person ein Dateneintrag im geojson-Format anlegen konnte:

		{ 
			"type": "Feature", 
			"properties": {
			"name": "(1) Νεκτάριος Κωνσταντινουπόλεως", 
			    "uri": "http://pleiades.stoa.org/places/520998",
			    "province": "Europa"
			}, 
			"geometry": {
				"type": "Point", 
				"coordinates": [28.979938000000001, 41.008547999999998] 
				}
			}

Einige Bischofsorte waren (natürlich) nicht zu identifizieren, so daß die Kartendarstellung die Liste nicht ganz vollständig wiedergibt.

Diese geojson-Datei wird nun mit Hilfe der JavaScript-Bibliothek Leaflet verarbeitet und die Orte mit je nach zugehöriger Provinz unterschiedlicher Farbe dargstellt, um leicht zusammengehörige Gruppen und Zahlenverhältnisse ausmachen zu können. Dazu wurde eine html-Datei erstellt, die Leaflet einbindet. Neben dem Digital Atlas of the Roman Empire, der vor allem wegen der Darstellung der Ortnamen und der Straßen hilfreich ist, ist es möglich auch die Tiles des Ancient World Mapping Centers zu nutzen, die eine physische Karte bieten; die Wahl zwischen beiden Karten wird durch ein Menü ermöglicht.

Da die Teilnehmerliste nach den Provinzen gegliedert ist, schien es sinnvoll, nicht nur die Orte, sondern auch die Provinzgrenzen anzuzeigen, wobei sich hier größere Schwierigkeiten ergaben:

Die Daten für Provinzen sind in der Pleiades-Datenbank nicht vollständig (und mit exakten Daten versehen) enthalten. Ich habe daher auf die Datei https://github.com/pelagios/gazetteer-data/tree/master/magis-pleiades-regions zurückgegriffen (und als pleiades-regions.js eingebunden), die aber auch nicht für alle Provinzen die nötigen Daten enthielt. In der Karte ist sie dennoch als Layer unter »Provinzen (Pleiades)« auswählbar.

Bessere Daten der Provinzgrenzen stellt der Digital Atlas of Roman and Medieval Civilizations (DAMRC) der Universität Harvard zur Verfügung, wobei die Daten auf Talbert, Richard J. A. (ed.) 2000, Barrington Atlas of the Greek and Roman World, Princeton basieren. Allerdings werden hier nur Daten nur für den Zeitrahmen 303–324 bzw. um das Jahr 500 (und damit nur für den Osten) geboten, so daß also der für meine Karte benötigte Stand des Provinzenzuschnitts nicht genug abgedeckt ist. Die Daten liegen auch nicht im geojson-Format, sondern im Esri-Format vor, so daß noch die JavaScript-Bibliothek esri-leaflet.js eingebunden werden mußt, damit die Provinzgrenzen als Layer »Provinzen (ca. a. 303–324!)« und »Provinzen (ca. a. 500!)« dargestellt werden konnten.

Die vollständige Datei, die mit Hilfe eines Browsers interaktiv dargstellt werden kann, sieht dann folgendermaßen aus, wobei die Personendaten als Datei bichops.js eingebunden wird:

<!DOCTYPE html>
<html>
<head>
    <title>Synode von Konstantinopel 381</title>
    <meta content=
    "Map of the participants at the synod of Constantinople in 381" name=
    "description">
    <meta content="Map,Synod,Constantinople,381" name="keywords">
    <meta content="Annette von Stockhausen" name="author">
    <meta charset="utf-8">
    <meta content="width=device-width, initial-scale=1.0" name="viewport">
    <style type="text/css">
    p {font-family: sans-serif;}
    h1 {font-family: sans-serif;
        font-size: 150%;}
    .info {
        padding: 6px 8px;
        font: 10px/12px "Helvetica Neue", Arial, Helvetica, sans-serif;
    font-weight: bold;
        background: white;
        background: rgba(255,255,255,0.8);
        box-shadow: 0 0 15px rgba(0,0,0,0.2);
        border-radius: 5px;
        }
    .info h4 {
        margin: 0 0 5px;
    font-size: 120%; 
        color: #777;
        }
    .legend {
        line-height: 14px;
        color: #555;
        }
    .legend i {
        width: 18px;
        height: 18px;
        float: left;
        margin-right: 8px;
        opacity: 0.7;
    }
    .leaflet-label {
    background: rgb(235, 235, 235);
    background: rgba(235, 235, 235, 0.81);
    display: block;
    font: 10px/12px "Helvetica Neue", Arial, Helvetica, sans-serif;
    font-weight: bold;
    color: #555;
    padding: 1px 3px;
    position: absolute;
    -webkit-user-select: none;
       -moz-user-select: none;
        -ms-user-select: none;
            user-select: none;
    pointer-events: none;
    white-space: nowrap;
    z-index: 6;
    }
    </style>
    <link href="http://cdn.leafletjs.com/leaflet/v0.7.7/leaflet.css" rel=
    "stylesheet">
</head>
<body>
    <h1>Teilnehmer der Synode von Konstantinopel 381</h1>
    <div id="map" style="height: 550px"></div>
    <script src="bishops.js" type="text/javascript">
    </script>
    <script src="pleiades-regions.js" type="text/javascript">
    </script> 
    <script src="http://cdn.leafletjs.com/leaflet/v0.7.7/leaflet.js">
    </script> 
    <script src="https://cdn.jsdelivr.net/leaflet.esri/1.0.0/esri-leaflet.js">
    </script> 
    <script src="http://leaflet.github.io/Leaflet.label/leaflet.label.js">
    </script> 
    <script>
        var geojsonMarkerOptions1 = {
                 radius: 5,
                 fillColor: "white",
                 color: "#000",
                 weight: 1,
                 opacity: 1,
                 fillOpacity: 0.8
                   };
		   
        var macedonians = L.geoJson(macedonians, {
            style: function (feature) {
                return feature.properties && feature.properties.style;
            },

            onEachFeature: onEachFeature,

            pointToLayer: function (feature, latlng) {
                return L.circleMarker(latlng,geojsonMarkerOptions1).bindLabel(feature.properties.name, {noHide: false, direction: 'auto', offset: [6,-6]});
            }
        });

        var bishops = L.geoJson(bishops, {
            style: function (feature) {
                return feature.properties && feature.properties.style;
            },

            onEachFeature: onEachFeature,

            pointToLayer: function (feature, latlng) {
                return L.circleMarker(latlng, geojsonMarkerOptions1).bindLabel(feature.properties.name + " (" + feature.properties.province + ")", {noHide: false, direction: 'auto', offset: [6,-6]});
                 },
	        style:getColor
        });

        var others = L.geoJson(others, {
            style: function (feature) {
                return feature.properties && feature.properties.style;
            },

            onEachFeature: onEachFeature,

            pointToLayer: function (feature, latlng) {
                return L.circleMarker(latlng,geojsonMarkerOptions1).bindLabel(feature.properties.name, {noHide: false, direction: 'auto', offset: [6,-6]});
            }
        });
	
         function getColor (feature) {
                    switch (feature.properties.province) {
                        case 'Europa' : return {fillColor: "#330000"};
                        case 'Aegyptus' : return {fillColor: "#FFCC00"};
                        case 'Palaestina': return {fillColor: "#006600"};
                        case 'Phoenice' : return {fillColor: "#FF3300"};
                        case 'Syria' : return {fillColor: "#99CCFF"};
                        case 'Arabia': return {fillColor: "#33FF00"}; 	
                        case 'Osrhoene' : return {fillColor: "#66FF00"};
                        case 'Mesopotamia' : return {fillColor: "#FFFF00"};
                        case 'Augustoeuphratesia': return {fillColor: "#FF0000"}; 
                        case 'Cilicia' : return {fillColor: "#CCFFCC"};
                        case 'Cappadocia' : return {fillColor: "#663300"};
                        case 'Armenia minor': return {fillColor: "#33CCFF"}; 
                        case 'Isauria' : return {fillColor: "#33CC00"};
                        case 'Cyprus' : return {fillColor: "#339900"};
                        case 'Pamphylia': return {fillColor: "#FF6600"}; 
                        case 'Lycaonia' : return {fillColor: "#CC33FF"};
                        case 'Pisidia' : return {fillColor: "#669900"};
                        case 'Lycia': return {fillColor: "#66CC00"}; 
                        case 'Phrygia Salutaria' : return {fillColor: "#CC99FF"};
                        case 'Phrygia Pacatiane' : return {fillColor: "#0066FF"};
                        case 'Caria': return {fillColor: "#660000"}; 
                        case 'Bithynia' : return {fillColor: "#333300"};
                        case 'Pontus Amasiae' : return {fillColor: "#9933FF"};
                        case 'Moesia': return {fillColor: "#FF9900"}; 
                        case 'Scythia' : return {fillColor: "#0000FF"};
                        case 'Haemimontus' : return {fillColor: "#666600"};
                        case 'Pontus Polemoniacus' : return {fillColor: "#FF0066"};
        }
             };

	
        function onEachFeature(feature, layer) {
            var popupContent = "<a href=" + feature.properties.uri + " target=\"_blank\">Ort in Pleiades-Datenbank<\/a>";

            layer.bindPopup(popupContent);
        }

          var provinces3 = L.geoJson(pleiades, {
	  color: "transparent", opacity: 0.5, weight: 1,
	  style: function(feature) {
          switch (feature.properties.name) {
	                case 'Europa' : return {color: "#330000"};
                        case 'Aegyptus' : return {color: "#FFCC00"};
                        case 'Palaestina': return {color: "#006600"};
                        case 'Phoenice' : return {color: "#FF3300"};
                        case 'Syria Coele' : return {color: "#99CCFF"};
                        case 'Arabia': return {color: "#33FF00"}; 	
                        case 'Osrhoene' : return {color: "#66FF00"};
                        case 'Mesopotamia' : return {color: "#FFFF00"};
                        case 'Augustoeuphratesia': return {color: "#FF0000"}; 
                        case 'Cilicia' : return {color: "#CCFFCC"};
                        case 'Cappadocia' : return {color: "#663300"};
                        case 'Armenia minor': return {color: "#33CCFF"}; 
                        case 'Isauria' : return {color: "#33CC00"};
                        case 'Cyprus' : return {color: "#339900"};
                        case 'Pamphylia': return {color: "#FF6600"}; 
                        case 'Lycaonia' : return {color: "#CC33FF"};
                        case 'Pisidia' : return {color: "#669900"};
                        case 'Lycia': return {color: "#66CC00"}; 
                        case 'Phrygia Salutaria' : return {color: "#CC99FF"};
                        case 'Phrygia Pacatiane' : return {color: "#0066FF"};
                        case 'Caria': return {color: "#660000"}; 
                        case 'Bithynia' : return {color: "#333300"};
                        case 'Pontus Amasiae' : return {color: "#9933FF"};
                        case 'Moesia': return {color: "#FF9900"}; 
                        case 'Scythia' : return {color: "#0000FF"};
                        case 'Haemimontus' : return {color: "#666600"};
                        case 'Pontus Polemoniacus' : return {color: "#FF0066"};
        }
	  }
}); 
	  
        var dare= L.tileLayer('http://pelagios.org/tilesets/imperium/{z}/{x}/{y}.png', {
        attribution: 'Tiles: <a href="http://dare.ht.lu.se">DARE 2014<\/a> (CC-BY-SA) | Provinces: <a href="http://darmc.harvard.edu/">DARMC</a> (CC-BY-NC) | Data: <a href="http://www.vonstockhausen.eu">A. v. Stockhausen</a> with help of <a href="http://pleiades.stoa.org">Pleiades</a> (CC-BY)'  +     ' | Source: <a href="http://www.athanasius.theologie.uni-erlangen.de/aw-III-6.html">AW III 6, Dok. 92.5</a>',
        minZoom:3,
        maxZoom:11
        });
        
        var awmc = L.tileLayer('http://a.tiles.mapbox.com/v3/isawnyu.map-knmctlkh/{z}/{x}/{y}.png', {
        attribution: 'Tiles: <a href="http://www.awmc.unc.edu" target="_blank">AWMC<\/a> (CC-BY-NC)' + 
                ' | Provinces: <a href="http://darmc.harvard.edu/">DARMC</a> (CC-BY-NC) | Data: <a href="http://www.vonstockhausen.eu">A. v. Stockhausen</a> with help of <a href="http://pleiades.stoa.org">Pleiades</a> (CC-BY)' +
                ' | Source: <a href="http://www.athanasius.theologie.uni-erlangen.de/aw-III-6.html">AW III 6, Dok. 92.5</a>'});

       var provinces1 = L.esri.dynamicMapLayer({
        url: "http://cga-app01.cadm.harvard.edu/arcgis/rest/services/darmc/roman/MapServer/",
        layers: [74],
        opacity: 0.5,
        position: 'back'
          });
		  
	var provinces2 = L.esri.dynamicMapLayer({
        url: "http://cga-app01.cadm.harvard.edu/arcgis/rest/services/darmc/roman/MapServer/",
        layers: [75],
        opacity: 0.5,
        position: 'back'
          });
          
        var map = L.map('map', {
        center: [36.008547999999998, 30.979938000000001],
        zoom: 5,
        layers: [dare,bishops,others]
        });
        
        var baseMaps = {
            "Digital Atlas of the Roman Empire": dare,
            "Ancient World Mapping Center": awmc
        };

        var overlayMaps = {
		  "Teilnehmer entsprechend der Liste": bishops,
		  "Sonstige Teilnehmer": others, 
		  "Makedonianer": macedonians,
		  "Provinzen (ca. a. 303–324!)": provinces1,		  
		  "Provinzen (ca. a. 500!)": provinces2,
		  "Provinzen (Pleiades)": provinces3
        };
        
        L.control.layers(baseMaps, overlayMaps, {
        collapsed: false
        }).addTo(map);
        
        L.control.scale({position: 'bottomright'}).addTo(map);
		  
        var marker = L.marker([41.008547999999998, 28.979938000000001]).addTo(map).bindLabel("Konstantinopel", {noHide: false, direction: 'auto', offset: [-40,-55]})
        .showLabel();
    </script>
</body>
</html>

Diesem Modell folgend habe ich außerdem eine Karte der Teilnehmer an der Synode von Aquileia 381 erstellt und auch die in Athanasius Werke III 4 abgedruckte Karte der Teilnehmer an der Synode von Serdika 342 konvertiert.