# DEU_1_node.properties 
# /*********************************************************************************************
# * Copyright (c) 2007 IBM Corporation and others.
# * All rights reserved. This program and the accompanying materials
# * are made available under the terms of the Eclipse Public License v1.0
# * which accompanies this distribution, and is available at
# * http://www.eclipse.org/legal/epl-v10.html
# *
# * Contributors:
# *     IBM Corporation - initial API and implementation
# ***********************************************************************************************/

# /**********************************************************************************************
# * Key Format: 
# * 
# * 	 For level 1 data, the key is the ISO3166-2 code. An ISO3166-2 code is composed as follows: 
# * a two letter country code followed by up to three alphanumeric characters for the level 1 administration.
# *
# * 	 For level 2 data, the key is the ISO3166-2 code followed by six digits. The leftmost two digits indicate
# * the level 1 container of a level 2 administration (i.e. California is a level 1 container for Orange County
# * which is a level 2 administration).  The two digits were taken from a lexicographic sorting of all the
# * level 1 administrations within a country. Similarly, the four leftmost digits indicate a level 2 administration.
# * Again, these four digits are an index into the lexicographic sorting of all level 2 administrations within 
# * a level 1 administration. 
# ************************************************************************************************/

# This is the name of the class that will interpret the rest of the file's contents
RECORD_CLASSNAME = org.eclipse.stem.internal.data.geography.specifications.CountryNodePropertyFileSpecification

# The ISO-3166-1 alpha3 code for the country
ISOKEY = DEU

# The administration level of the node data
ADMIN_LEVEL = 1

# This is the date range for which the area values in this file are valid 
# See http://purl.org/dc/terms/1.1/valid
VALID = start=1900-01-01;

# /*********************************************************************************************
# * The Data source for Europe is "UNESCO (1987) through UNEP/GRID-Europe."
# * For more details please visit : http://www.grid.unep.ch/data/policy.php
# ***********************************************************************************************/

# This is the source of the data
SOURCE = http://www.iso.org/iso/home.htm
# SOURCE = http://www.iso.org/iso/home.htm

# The file that contains the latitude/longitude data for the node 
SPATIAL_URI = platform:/plugin/org.eclipse.stem.data.geography/resources/data/geo/country/DEU/DEU_1_MAP.xml

DE-DEUNK1 = DE-UNK-1, 00, UNK
DE-NI = NIEDERBAYERN, 25, NI
DE-MU = MUENSTER, 24, MU
DE-MT = MITTELFRANKEN, 23, MT
DE-SH = SCHLESWIG-HOLSTEIN, 00, UNK
DE-HA = HANNOVER, 15, HA
DE-CM = CHEMNITZ, 07, CM
DE-DA = DARMSTADT, 00, UNK
DE-ST = STUTTGART, 34, ST
DE-OB = OBERFRANKEN, 28, OB
DE-AR = ARNSBERG, 01, AR
DE-KO = KOELN, 18, KO
DE-SH2 = SCHWABEN, 33, SH
DE-UT = UNTERFRANKEN, 38, UT
DE-GI = GIESSEN, 13, GI
DE-KA = KASSEL, 17, KA
DE-DU = DUESSELDORF, 11, DU
DE-OB2 = OBERPFALZ, 00, UNK
DE-TI = TRIER, 36, TI
DE-TH = THURINGEN, 35, TH
DE-LU = LUENEBURG, 20, LU
DE-MV = MECKLENBURG-VORPOMMERN, 22, MV
DE-HB = BREMEN, 06, HB
DE-DR = DRESDEN, 10, DR
DE-SL = SAARLAND, 31, SL
DE-DA2 = DESSAU, 08, DA
DE-DT = DETMOLD, 09, DT
DE-KO2 = KOBLENZ, 00, UNK
DE-FR = FREIBURG, 12, FR
DE-BE = BERLIN, 03, BE
DE-RP = RHEINHESSEN-PFALZ, 30, RP
DE-MA = MAGDEBURG, 21, MA
DE-WE = WESER-EMS, 40, WE
DE-KA2 = KARLSRUHE, 00, UNK
DE-TU = TUEBINGEN, 37, TU
DE-BY = OBERBAYERN, 27, BY
DE-HH = HAMBURG, 14, HH
DE-LP = LEIPZIG, 19, LP
DE-BR = BRAUNSCHWEIG, 05, BR
DE-BB = BRANDENBURG, 04, BB
DE-HA2 = HALLE, 00, UNK
