PROG0360 - Volcanoes

no tags 

Most people probably have the same image in their heads when you say the word volcano. Nevertheless, there are different types of volcanoes. Technically, a volcano is an opening in the earth's surface where molten rock, gas and fragments of bedrock come out. Around such openings a mountain is often formed.

Volcanoes are often found in areas on adjacent tectonic plates, so the areas where earthquakes occur. Exceptions are hotspots. These are areas where hot material from the mantle comes up through the crust.

In this exercise, we will create a file in Keyhole Markup Language (KML). KML is an XML-based standard markup language for geographical data, with the following structure.

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>

<Placemark>
    <name>name</name>
    <Point><coordinates>longitude,latitude,0</coordinates></Point>
    <description><![CDATA[description]]></description>
</Placemark>

</Document>
</kml>

Furthermore, we also use CSV files with data on volcanoes. These files will always start with a header and contain the following columns (in this order):

  • name
  • country
  • state
  • latitude
  • hemisphere (N of S)
  • longitude
  • hemisphere (E of W)
  • height
  • type

Assignment

Write a function makeVolcanoKml that has two obligatory and three optional argument.

The first obligatory argument indicates the file name of the CSV file from which the data is to be retrieved. The second obligatory argument indicates the file name of the KML file that has to be written away. Your function should produce a KML file according to the template that was presented above. The part from <Placemark> to </Placemark> should be repeated for every volcano. The red parts are to be replaced by the data of the volcano:

  • name replaces the name of the volcano;
  • longitude replaces the degrees of longitude of the volcano (the eastern hemisphere has positive degrees and in the western hemisphere has negative degrees);
  • latitude replaces the degrees of latitude of the volcano (the northern hemisphere has positive degrees and the southern hemisphere has negative degrees);
  • description replaces with the following text: "Volcano or type type with state state" where you fill in the italicized fragments with the corresponding values ​​for that volcano.

The remaining three arguments allow you to determine which volcanoes are written to the KML file. These three arguments are respectively called country, state and volcanicType. For each of these arguments applies that, if they are given, only volcanoes with the given value in the corresponding column are written to the KML file. These comparisons are always made case sensitive.

Extra

You can see a KML file using Google Maps. To do this, the file must be online. Try to place this file on your webspace from the university. More information can be found on the helpdesk. If the file is online, go to Google Maps and enter the address of the KML file into the search field.

If you have a Google account, it can be even easier:

  • Go to http://maps.google.com and click on 'My places'.
  • Log in if required
  • Click on the red button 'Create map'.
  • Click on the link 'import' and select the KML file.

Example

The following examples use the file volcanoes.csv

>>> makeVolcanoKml('volcanoes.csv', 'greece.kml', country='Greece')
>>> print(open('greece.kml', 'r').read())
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<Placemark>
    <name>Methana</name>
    <Point><coordinates>23.34,37.615,0</coordinates></Point>
    <description><![CDATA[volcano of type Lava dome with state Historical]]></description>
</Placemark>
<Placemark>
    <name>Mí­los</name>
    <Point><coordinates>24.44,36.699,0</coordinates></Point>
    <description><![CDATA[volcano of type Stratovolcano with state Radiocarbon]]></description>
</Placemark>
<Placemark>
    <name>Santorini</name>
    <Point><coordinates>25.40,36.404,0</coordinates></Point>
    <description><![CDATA[volcano of type Shield volcano with state Historical]]></description>
</Placemark>
<Placemark>
    <name>Yali</name>
    <Point><coordinates>27.14,36.671,0</coordinates></Point>
    <description><![CDATA[volcano of type Lava dome with state Holocene]]></description>
</Placemark>
<Placemark>
    <name>Nisyros</name>
    <Point><coordinates>27.16,36.586,0</coordinates></Point>
    <description><![CDATA[volcano of type Stratovolcano with state Historical]]></description>
</Placemark>
<Placemark>
    <name>Kos</name>
    <Point><coordinates>27.25,36.852,0</coordinates></Point>
    <description><![CDATA[volcano of type Caldera with state Pleistocene-Fumarolic]]></description>
</Placemark>

</Document>
</kml>

De meeste mensen hebben waarschijnlijk hetzelfde beeld in hun hoofd als je het woord vulkaan zegt. Toch zijn er verschillende types van vulkanen. Technisch gezien is een vulkaan een opening in het aardoppervlak waar gesmolten gesteente, gas en brokstukken van vast gesteente door naar buiten komen. Rond zulke openingen wordt vaak een berg gevormd.

Vulkanen worden vooral aangetroffen in gebieden waar tektonische platen aan elkaar grenzen, dus de plaatsen waar ook aardbevingen voorkomen. Een uitzondering hierop vormen hotspots. Dit zijn gebieden waar heet materiaal uit de mantel door de aardkorst heen naar boven komt.

In deze oefening gaan we een bestand in Keyhole Markup Language (KML) aanmaken. KML is een op XML gebaseerde standaard opmaaktaal voor geografische data, met de volgende structuur.

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>

<Placemark>
    <name>naam</name>
    <Point><coordinates>lengte,breedte,0</coordinates></Point>
    <description><![CDATA[beschrijving]]></description>
</Placemark>

</Document>
</kml>

Verder maken we ook gebruik van CSV-bestanden met gegevens over vulkanen. Deze bestanden zullen steeds beginnen met een hoofding en bevatten de volgende kolommen (in deze volgorde):

  • naam
  • land
  • status
  • breedte
  • halfrond (N of S)
  • lengte
  • halfrond (E of W)
  • hoogte
  • type

Opgave

Schrijf een functie maakVulkaanKml die twee verplichte en drie optionele argumenten heeft.

Het eerste verplichte argument geeft de bestandsnaam aan van het CSV-bestand waaruit de data moet gehaald worden. Het tweede verplichte argument geeft de bestandsnaam aan van het KML-bestand dat weggeschreven moet worden. Je functie moet een KML-bestand aanmaken volgens het sjabloon dat hierboven wordt weergegeven. Hierbij moet je het stuk vanaf <Placemark> tot en met </Placemark> herhalen voor elke vulkaan. Je vervangt de rode stukken dan door de gegevens voor die vulkaan:

  • naam vervang je door de naam van de vulkaan;
  • lengte vervang je door de lengtegraad van de vulkaan (het oostelijk halfrond heeft positieve graden en het westelijk halfrond heeft negatieve graden);
  • breedte vervang je door de breedtegraad van de vulkaan (het noordelijk halfrond heeft positieve graden en het zuidelijk halfrond heeft negatieve graden);
  • beschrijving vervang je door de volgende tekst: 'volcano of type type with status status' waarbij je de cursieve fragmenten invult met de corresponderende waarden voor die vulkaan.

De overige drie argumenten laten je toe om te bepalen welke vulkanen weggeschreven worden naar het KML-bestand. Deze drie argumenten hebben respectievelijk de naam land, status en vulkaanType. Voor elk van deze argumenten geldt dat, als ze meegegeven worden, enkel vulkanen met de meegegeven waarde in de corresponderende kolom worden weggeschreven naar het KML-bestand. Deze vergelijkingen gebeuren steeds hoofdlettergevoelig.

Extra

Je kan een KML-bestand bekijken via Google Maps. Hiervoor moet dit bestand wel online staan. Probeer dit bestand eens online te plaatsen op je webruimte van de universiteit. Meer informatie hierover vind je terug op de helpdesk. Als het bestand online staat, ga je naar Google Maps en vul je het adres van het KML-bestand in in het zoekveld.

Als je over een Google-account beschikt, kan het nog gemakkelijker:

  • Ga naar http://maps.google.com en klik op 'Mijn plaatsen'.
  • Meld je aan indien dit gevraagd wordt.
  • Klik op de rode knop 'Kaart maken'.
  • Klik op de link 'importeren' en selecteer het KML-bestand.

Voorbeeld

De onderstaande voorbeelden maken gebruik van het bestand vulkanen.csv

>>> maakVulkaanKml('vulkanen.csv', 'griekenland.kml', land='Greece')
>>> print(open('griekenland.kml', 'r').read())
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<Placemark>
    <name>Methana</name>
    <Point><coordinates>23.34,37.615,0</coordinates></Point>
    <description><![CDATA[volcano of type Lava dome with status Historical]]></description>
</Placemark>
<Placemark>
    <name>Mí­los</name>
    <Point><coordinates>24.44,36.699,0</coordinates></Point>
    <description><![CDATA[volcano of type Stratovolcano with status Radiocarbon]]></description>
</Placemark>
<Placemark>
    <name>Santorini</name>
    <Point><coordinates>25.40,36.404,0</coordinates></Point>
    <description><![CDATA[volcano of type Shield volcano with status Historical]]></description>
</Placemark>
<Placemark>
    <name>Yali</name>
    <Point><coordinates>27.14,36.671,0</coordinates></Point>
    <description><![CDATA[volcano of type Lava dome with status Holocene]]></description>
</Placemark>
<Placemark>
    <name>Nisyros</name>
    <Point><coordinates>27.16,36.586,0</coordinates></Point>
    <description><![CDATA[volcano of type Stratovolcano with status Historical]]></description>
</Placemark>
<Placemark>
    <name>Kos</name>
    <Point><coordinates>27.25,36.852,0</coordinates></Point>
    <description><![CDATA[volcano of type Caldera with status Pleistocene-Fumarolic]]></description>
</Placemark>

</Document>
</kml>


Added by:Peter Dawyndt
Date:2013-04-01
Time limit:10s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:PY_NBC
Resource:None