| 13 | | * WKT column if we have polygon info (or Lat Lon for Points, if not) |
| 14 | | * For L1, we need these columns: ADM0_NAME, ADM1_NAME (& WKT) |
| 15 | | * For L2, we need these columns: ADM1_NAME, ADM2_NAME (& WKT) [ADM0_NAME can also be used to help separate duplicates] |
| 16 | | * For L3, we need these columns: ADM2_NAME, ADM3_NAME (& WKT) [ADM1_NAME can also be used to help separate duplicates] |
| 17 | | * CODE column is read, if-present |
| 18 | | * POPULATION column is read, if-present |
| | 17 | * WKT column if we have polygon info (or Lat and Lon for Points, if not) |
| | 18 | * For L1, we need these columns: Country, ADM1_NAME (& WKT) |
| | 19 | * For L2, we need these columns: ADM1_NAME, ADM2_NAME (& WKT) [Country can also be used to help separate duplicates] |
| | 20 | * For L3, we need these columns: ADM2_NAME, ADM3_NAME (& WKT) [ADM1_NAME and Country can also be used to help separate duplicates] |
| | 21 | * For L4, we need these columns: ADM3_NAME, ADM4_NAME (& WKT) [ADM2_NAME, ADM1_NAME and Country can also be used to help separate duplicates] |
| | 22 | * For specific lcoations, we need these columns: ADMx_NAME (for appropiate parent level of hierarchy) Name (& Lat/Lon) [ADM2_NAME, ADM1_NAME and Country can also be used to help separate duplicates] |
| | 23 | * Code columns are used, if-present |
| | 24 | * ADM1_CODE, ADM1_CODE2, ADM2_CODE, ADM2_CODE2, ADM3_CODE, ADM3_CODE2, ADM4_CODE, ADM4_CODE2, Code, Code2 |
| | 25 | * Population & Elevation columns are read, if-present |
| 27 | | For the Polygon data, it is normal to get this from Shapefiles (see below). |
| 28 | | |
| 29 | | Example for Pakistan: |
| 30 | | {{{ |
| 31 | | tablename = "gis_location" |
| 32 | | table = db[tablename] |
| 33 | | db.executesql("DROP INDEX name__idx on %s;" % tablename) |
| 34 | | # L0 |
| 35 | | import csv |
| 36 | | csv.field_size_limit(2**20 * 10) # 10 megs |
| 37 | | db.import_from_csv_file(open("L0.csv", "rb")) |
| 38 | | db.commit() |
| 39 | | # L1 |
| 40 | | gis.import_csv("pak_adm1.csv", check_duplicates=False) |
| 41 | | db.commit() |
| 42 | | # L2 |
| 43 | | db(table.name == "Baluchistan").update(name="Balochistan") |
| 44 | | db(table.name == "Northern Areas").update(name="Gilgit Baltistan") |
| 45 | | db(table.name == "N.W.F.P.").update(name="Khyber Pakhtunkhwa") |
| 46 | | db(table.name == "F.A.T.A.").update(name="FATA") |
| 47 | | db(table.name == "F.C.T.").update(name="Islamabad") |
| 48 | | db(table.name == "Azad Kashmir").update(name="AJK") |
| 49 | | gis.import_csv("pak_adm2.csv", check_duplicates=False) |
| 50 | | db(table.name == "Sind").update(name="Sindh") |
| 51 | | db(table.name == "AJK").update(name="Pakistan Administered Kashmir") |
| 52 | | db(table.name == "FATA").update(name="Federally Administered Tribal Areas") |
| 53 | | db((table.name == "Islamabad") & (table.level == "L1")).update(name="Federal Capital Territory") |
| 54 | | db.commit() |
| 55 | | # L3 |
| 56 | | db(table.name == "Jaccobabad").update(name="Jacobabad") |
| 57 | | db(table.name == "Tando Allahyar").update(name="Tando Allah Yar") |
| 58 | | db(table.name == "Qambar Shahdad kot").update(name="Qambar Shahdadkot") |
| 59 | | gis.import_csv("pak_adm3.csv", check_duplicates=False) |
| 60 | | db(table.name == "Islamabad").update(name="Islamabad Capital Territory") |
| 61 | | db(table.name == "Tando Allah Yar").update(name="Tando Allahyar") |
| 62 | | db(table.name == "Qambar Shahdadkot").update(name="Qambar Shahdad Kot") |
| 63 | | db(table.name == "Leiah").update(name="Layyah") |
| 64 | | db(table.name == "Leiah Tehsil").update(name="Layyah Tehsil") |
| 65 | | db(table.name == "Kalur Kot Tehsil").update(name="Kallur Kot Tehsil") |
| 66 | | db(table.name == "De-excluded Area").update(name="Tribal Area") |
| 67 | | db(table.name == "De-excluded Area D.g Khan").update(name="Tribal Area") |
| 68 | | db.commit() |
| 69 | | # L4 |
| 70 | | db(table.name == "Noorpur Tehsil").update(name="Noorpur Thal Tehsil") |
| 71 | | jhang = db((table.name == "Jhang") & (table.level==L2)).select(table.id, limitby=(0, 1)).first().id |
| 72 | | table.insert(name="Ahmadpur Sial", parent=jhang, level="L3", url="http://en.wikipedia.org/wiki/Ahmedpur_Sial_Tehsil") |
| 73 | | gis.import_csv("punjab_l4.csv", check_duplicates=False) |
| 74 | | db.commit() |
| 75 | | db(table.name == "Mirwah Taluka").update(name="Thari Mirwah Taluka") |
| 76 | | db(table.name == "Shah Bunder Taluka").update(name="Shah Bandar Taluka") |
| 77 | | badin = db((table.name == "Badin") & (table.level==L2)).select(table.id, limitby=(0, 1)).first().id |
| 78 | | table.insert(name="Talhar", parent=badin, level="L3", url="http://en.wikipedia.org/wiki/Talhar") |
| 79 | | jamshoro = db((table.name == "Jamshoro") & (table.level==L2)).select(table.id, limitby=(0, 1)).first().id |
| 80 | | table.insert(name="Manjhand Taluka", parent=jamshoro, level="L3", url="http://en.wikipedia.org/wiki/Jamshoro_District") |
| 81 | | gis.import_csv("sindh_l4.csv", check_duplicates=False) |
| 82 | | db.commit() |
| 83 | | db(table.name == "F.r Kala Dhaka").update(name="F.R. Kala Dhaka") |
| 84 | | db(table.name == "Martoong Tehsil").update(name="Martung Tehsil") |
| 85 | | db(table.name == "Takhat Nasrati Tehsil").update(name="Takht-e-Nasrati Tehsil") |
| 86 | | dikhan = db((table.name == "D. I. Khan") & (table.level == "L2")).select(table.id, limitby=(0, 1)).first().id |
| 87 | | table.insert(name="Daraban Tehsil", parent=dikhan, level="L3") |
| 88 | | table.insert(name="Paroa Tehsil", parent=dikhan, level="L3") |
| 89 | | lowerdir = db((table.name == "Lower Dir") & (table.level == "L2")).select(table.id, limitby=(0, 1)).first().id |
| 90 | | table.insert(name="Adenzai", parent=lowerdir, level="L3") |
| 91 | | table.insert(name="Balambat", parent=lowerdir, level="L3") |
| 92 | | table.insert(name="Khal", parent=lowerdir, level="L3") |
| 93 | | table.insert(name="Lal Qila", parent=lowerdir, level="L3") |
| 94 | | table.insert(name="Munda", parent=lowerdir, level="L3") |
| 95 | | table.insert(name="Samar Bagh", parent=lowerdir, level="L3") |
| 96 | | table.insert(name="Tazagram", parent=lowerdir, level="L3") |
| 97 | | table.insert(name="Timargara", parent=lowerdir, level="L3") |
| 98 | | upperdir = db((table.name == "Upper Dir") & (table.level == "L2")).select(table.id, limitby=(0, 1)).first().id |
| 99 | | table.insert(name="Barawal Tehsil", parent=upperdir, level="L3") |
| 100 | | table.insert(name="Chapar Tehsil", parent=upperdir, level="L3") |
| 101 | | table.insert(name="Dir Tehsil", parent=upperdir, level="L3") |
| 102 | | table.insert(name="Khal Tehsil", parent=upperdir, level="L3") |
| 103 | | table.insert(name="Kalkot Tehsil", parent=upperdir, level="L3") |
| 104 | | table.insert(name="Wari Tehsil", parent=upperdir, level="L3") |
| 105 | | gis.import_csv("khyber_l4.csv", check_duplicates=False) |
| 106 | | db.commit() |
| 107 | | # L5 |
| 108 | | gis.import_csv("punjab_l5.csv", check_duplicates=False) |
| 109 | | gis.import_csv("sindh_l5.csv", check_duplicates=False) |
| 110 | | gis.import_csv("khyber_l5.csv", check_duplicates=False) |
| 111 | | db.commit() |
| 112 | | field = "name" |
| 113 | | db.executesql("CREATE INDEX %s__idx on %s(%s);" % (field, tablename, field)) |
| 114 | | }}} |
| 115 | | |
| | 34 | For the Polygon data, it is normal to get this from Shapefiles, such as GADM or UN CODS. |