# SAU_1_area.properties 
# This file contains area values for SAUDI ARABIA
# /*********************************************************************************************
# * 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 = SAU

# The administration level of the area 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;

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

SA-0 = 378821.1
SA-02 = 138563.2
SA-03 = 144684.4
SA-04 = 560577.2
SA-05 = 54538.9
SA-06 = 121449.8
SA-07 = 99080.2
SA-08 = 123124.8
SA-09 = 15010.3
SA-10 = 10348.7
SA-12 = 111604.0
SA-2 = 65687.8
SA-4 = 77491.1
SA-NEU = 6894.4
SA-QAY = 51524.1

