# GHA_2_area.properties 
# This file contains area values for GHANA
# /*********************************************************************************************
# * 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 = GHA

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

# Generated using GeoPolygon Raster Scan (PolygonAreaFinder)
# August 20, 2009.

GH-AA-G050001 = 314.4
GH-AA-G050002 = 949.2
GH-AA-G050003 = 837.1
GH-AA-G050004 = 784.6
GH-AA-G050005 = 512.4
GH-AA-G050006 = 176.7
GH-AH-G010001 = 559.3
GH-AH-G010002 = 2103.2
GH-AH-G010003 = 458.2
GH-AH-G010004 = 1205.3
GH-AH-G010005 = 379.7
GH-AH-G010006 = 1541.7
GH-AH-G010007 = 445.6
GH-AH-G010008 = 1259.0
GH-AH-G010009 = 349.8
GH-AH-G010010 = 237.5
GH-AH-G010011 = 203.2
GH-AH-G010012 = 261.5
GH-AH-G010013 = 1298.9
GH-AH-G010014 = 537.9
GH-AH-G010015 = 918.4
GH-AH-G010016 = 155.2
GH-AH-G010017 = 178.5
GH-AH-G010018 = 211.1
GH-AH-G010019 = 402.2
GH-AH-G010020 = 672.1
GH-AH-G010021 = 703.1
GH-AH-G010022 = 468.8
GH-AH-G010023 = 2009.0
GH-AH-G010024 = 100.9
GH-AH-G010025 = 848.6
GH-AH-G010026 = 1589.7
GH-AH-G010027 = 4326.5
GH-AH-G010028 = 676.5
GH-BA-G020001 = 1444.2
GH-BA-G020002 = 6153.2
GH-BA-G020003 = 540.5
GH-BA-G020004 = 1264.1
GH-BA-G020005 = 2372.3
GH-BA-G020006 = 752.5
GH-BA-G020007 = 1464.8
GH-BA-G020008 = 2148.1
GH-BA-G020009 = 954.3
GH-BA-G020010 = 7223.3
GH-BA-G020011 = 6078.7
GH-BA-G020012 = 887.4
GH-BA-G020013 = 1096.2
GH-BA-G020014 = 7923.7
GH-CP-G030001 = 282.1
GH-CP-G030002 = 473.1
GH-CP-G030003 = 175.3
GH-CP-G030004 = 1127.6
GH-CP-G030005 = 131.7
GH-CP-G030006 = 2433.2
GH-CP-G030007 = 432.5
GH-CP-G030008 = 109.2
GH-CP-G030009 = 957.0
GH-CP-G030010 = 247.0
GH-CP-G030011 = 386.5
GH-CP-G030012 = 895.3
GH-CP-G030013 = 432.5
GH-CP-G030014 = 294.9
GH-CP-G030015 = 202.6
GH-CP-G030016 = 37.4
GH-CP-G030017 = 1571.8
GH-CP-G030018 = 94.7
GH-EP-G040001 = 1659.5
GH-EP-G040002 = 893.8
GH-EP-G040003 = 784.5
GH-EP-G040004 = 4974.6
GH-EP-G040005 = 603.3
GH-EP-G040006 = 727.3
GH-EP-G040007 = 973.4
GH-EP-G040008 = 1164.0
GH-EP-G040009 = 1030.7
GH-EP-G040010 = 1190.3
GH-EP-G040011 = 23.0
GH-EP-G040012 = 1008.3
GH-EP-G040013 = 1321.6
GH-EP-G040014 = 528.9
GH-EP-G040015 = 397.3
GH-EP-G040016 = 434.7
GH-EP-G040017 = 704.0
GH-EP-G040018 = 957.6
GH-NP-G060001 = 3731.7
GH-NP-G060002 = 9845.7
GH-NP-G060003 = 18318.6
GH-NP-G060004 = 6311.7
GH-NP-G060005 = 5994.4
GH-NP-G060006 = 3776.5
GH-NP-G060007 = 9243.9
GH-NP-G060008 = 3380.5
GH-NP-G060009 = 240.6
GH-NP-G060010 = 1339.4
GH-NP-G060011 = 3870.7
GH-NP-G060012 = 4066.1
GH-TV-G090001 = 1148.5
GH-TV-G090002 = 1057.6
GH-TV-G090003 = 655.4
GH-TV-G090004 = 648.4
GH-TV-G090005 = 647.7
GH-TV-G090006 = 668.8
GH-TV-G090007 = 358.4
GH-TV-G090008 = 809.7
GH-TV-G090009 = 833.0
GH-TV-G090010 = 530.1
GH-TV-G090011 = 629.9
GH-TV-G090012 = 299.6
GH-TV-G090013 = 266.2
GH-TV-G090014 = 7883.9
GH-TV-G090015 = 330.7
GH-TV-G090016 = 149.1
GH-TV-G090017 = 2299.1
GH-TV-G090018 = 371.1
GH-UE-G070001 = 762.3
GH-UE-G070002 = 1198.8
GH-UE-G070003 = 614.5
GH-UE-G070004 = 993.3
GH-UE-G070005 = 954.0
GH-UE-G070006 = 903.2
GH-UE-G070007 = 371.9
GH-UE-G070008 = 1914.0
GH-UE-G070009 = 935.9
GH-UNK-G000001 = 764.7
GH-UNK-G000002 = 4804.8
GH-UNK-G000003 = 3104.0
GH-UNK-G000004 = 2238.1
GH-UNK-G000005 = 833.2
GH-UNK-G000006 = 1374.3
GH-UNK-G000007 = 4945.8
GH-UNK-G000008 = 3814.3
GH-UNK-G000009 = 971.2
GH-UNK-G000010 = 220.8
GH-UNK-G000011 = 227.5
GH-UNK-G000012 = 133.4
GH-UNK-G000013 = 1761.6
GH-UW-G080001 = 969.6
GH-UW-G080002 = 1931.7
GH-UW-G080003 = 3997.4
GH-UW-G080004 = 7480.8
GH-UW-G080005 = 4358.0
GH-WP-G000001 = 23921.0
