# ARE_2_area.properties 
# This file contains area values for UNITEDARABEMIRATES
# /*********************************************************************************************
# * Copyright (c) 2006 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.CountryAreaLabelPropertyFileSpecification

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

# The administration level of the area data
ADMIN_LEVEL = 2

# 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;

# This is the source of the data
SOURCE = https://www.cia.gov/library/publications/the-world-factbook/
# SOURCE = https://www.cia.gov/library/publications/the-world-factbook/

# Level 1 (admin 1 = e.g., state)
# Level 2 (admin 2 = e.g., county)

# Generated using GeoPolgyon Raster Scan (PolygonAreaFinder)
# 8/20/2009

AE-AJ-G020001 = 4.0
AE-AJ-G020002 = 141.3
AE-AJ-G020003 = 17.1
AE-AZ-G010001 = 4.0
AE-AZ-G010002 = 0.3
AE-AZ-G010003 = 2.8
AE-AZ-G010004 = 11.4
AE-AZ-G010005 = 8.2
AE-AZ-G010006 = 5.9
AE-AZ-G010007 = 16.7
AE-AZ-G010008 = 5.1
AE-AZ-G010009 = 0.5
AE-AZ-G010010 = 29.8
AE-AZ-G010011 = 2.1
AE-AZ-G010012 = 2.6
AE-AZ-G010013 = 61.6
AE-AZ-G010014 = 2.7
AE-AZ-G010015 = 1.5
AE-AZ-G010016 = 1.2
AE-AZ-G010017 = 4.3
AE-AZ-G010018 = 1.4
AE-AZ-G010019 = 1.0
AE-AZ-G010020 = 1.8
AE-AZ-G010021 = 11.5
AE-AZ-G010022 = 4.4
AE-AZ-G010023 = 3.4
AE-AZ-G010024 = 0.7
AE-AZ-G010025 = 0.5
AE-AZ-G010026 = 20.7
AE-AZ-G010027 = 17.1
AE-AZ-G010028 = 0.5
AE-AZ-G010029 = 0.9
AE-AZ-G010030 = 1.0
AE-AZ-G010031 = 68.9
AE-AZ-G010032 = 2.5
AE-AZ-G010033 = 66.6
AE-AZ-G010034 = 1.8
AE-AZ-G010035 = 4.7
AE-AZ-G010036 = 7.1
AE-AZ-G010037 = 30.4
AE-AZ-G010038 = 3.4
AE-AZ-G010039 = 8.7
AE-AZ-G010040 = 5.4
AE-AZ-G010041 = 3.0
AE-AZ-G010042 = 306.2
AE-AZ-G010043 = 65969.3
AE-AZ-G010044 = 2.9
AE-AZ-G010045 = 10.6
AE-AZ-G010046 = 1.1
AE-AZ-G010047 = 10.7
AE-AZ-G010048 = 7.6
AE-AZ-G010049 = 5.7
AE-AZ-G010050 = 1.4
AE-AZ-G010051 = 16.0
AE-AZ-G010052 = 4.9
AE-AZ-G010053 = 1.2
AE-AZ-G010054 = 1.3
AE-AZ-G010055 = 1.5
AE-AZ-G010056 = 1.6
AE-AZ-G010057 = 4.7
AE-AZ-G010058 = 2.8
AE-AZ-G010059 = 7.7
AE-AZ-G010060 = 1.1
AE-AZ-G010061 = 5.7
AE-DU-G040001 = 3856.2
AE-DU-G040002 = 84.6
AE-FU-G030001 = 1153.9
AE-FU-G030002 = 542.1
AE-NEU-G050001 = 86.2
AE-NEU-G050002 = 44.5
AE-RK-G060001 = 1586.4
AE-RK-G060002 = 0.7
AE-RK-G060003 = 5.0
AE-RK-G060004 = 1.9
AE-RK-G060005 = 1104.2
AE-SH-G070001 = 2350.6
AE-SH-G070002 = 202.4
AE-UQ-G080001 = 13.0
AE-UQ-G080002 = 754.3
AE-UQ-G080003 = 11.2
AE-UQ-G080004 = 0.5
AE-UQ-G080005 = 0.7
AE-UQ-G080006 = 0.6
AE-UQ-G080007 = 0.7
AE-UQ-G080008 = 1.1

