/
Global Administrative Areas

Global Administrative Areas

http://gadm.org/ (Gadm) contains world wide administrative areas down to 2 or 3 levels under countries. For iKartan, municipalities for the whole world is downloaded.

Gadm database

The gadm database is created by the Geokettle script CreateGadmDB.kjb, basically just a SQL script

Create gadm schema SQL script
create schema gadm;

CREATE TABLE gadm.gadm
(
  objectid integer NOT NULL,
  id_0 integer,
  iso character varying(5),
  name_0 character varying(50),
  id_1 integer,
  name_1 character varying(50),
  type_1 character varying(50),
  id_2 integer,
  name_2 character varying(70),
  type_2 character varying(50),
  id_3 integer,
  name_3 character varying(70),
  the_geom geometry,
  CONSTRAINT gadm7_pkey PRIMARY KEY (objectid ),
  CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2),
  CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 4326)
);

Name_0 is the country, Name_1 is the first order administrative areas etc.

ISO is a three letter country code

Getting the data

The Geokettle job GetGadmFromTheWeb.kjb is used to get the data from the web, unpack and store it to the database. The data is replaced

Weave configuration

Database

Includes configuration for entity, data, search and index. Data definitions for lookup lists for countries, codes and index is included. 

The configuration is using two ACL : acl.entity.globalmap.gadm to allow index search and acl.data.globalmap.gadm to search and list data.

Two user attributes is used to filter data: 

  1. user.customers.globalmap.gadm.name_0 is used to filter countries.
  2. user.customers.globalmap.gadm.name_1 is used to filter first order administrative areas.

Examples

The whole world:

  • user.customers.globalmap.gadm.name_0 = %
  • user.customers.globalmap.gadm.name_1 = %

Australia:

  • user.customers.globalmap.gadm.name_0 = Australia
  • user.customers.globalmap.gadm.name_1 = %

Stockholm and Helsinki

  • user.customers.globalmap.gadm.name_0 = Sweden
  • user.customers.globalmap.gadm.name_0 = Finland
  • user.customers.globalmap.gadm.name_1 = Stockholm
  • user.customers.globalmap.gadm.name_1 = Helsinki
globalmap_gadm.xml
<?xml version="1.0" encoding="UTF-8"?>

<config xmlns=          "urn:com.cohga.server.config#1.0"
    xmlns:dmsstorage="urn:com.cohga.dms.storage.document.db#1.0"
	xmlns:cache=    "urn:com.cohga.server.cache#1.0"
	xmlns:acl=      "urn:com.cohga.server.acl#1.0"
	xmlns:pool=     "urn:com.cohga.server.pool#1.0"
	xmlns:options=  "urn:com.cohga.server.options#1.0"
	xmlns:parameter="urn:com.cohga.server.parameter#1.0"
	xmlns:search=   "urn:com.cohga.server.search.database#1.0"
	xmlns:birt=     "urn:com.cohga.server.report.birt#1.0"
	xmlns:data=     "urn:com.cohga.server.data.database#1.0"
	xmlns:entity=   "urn:com.cohga.server.entity#1.0"
	xmlns:jdbc=     "urn:com.cohga.server.datasource.jdbc#1.0"
	xmlns:arcgisws= "urn:com.cohga.server.map.arcgis.ws#1.0"
	xmlns:arcims=   "urn:com.cohga.server.map.arcims#1.0"
	xmlns:mapper=   "urn:com.cohga.server.spatial.mapper#1.0"
	xmlns:spatial=  "urn:com.cohga.server.spatial.geotools#1.0"
	xmlns:index=    "urn:com.cohga.server.index#1.0"
	xmlns:toc=      "urn:com.cohga.server.map.toc#1.0"
	xmlns:client=   "urn:com.cohga.html.client#1.0"
	xmlns:xsi=      "http://www.w3.org/2001/XMLSchema-instance"
	xmlns:xsd=      "http://www.w3.org/2001/XMLSchema"
	xmlns:wms =     "urn:com.cohga.server.map.wms#1.0"
	xmlns:edit=     "urn:com.cohga.spatial.edit#1.0" 
	xmlns:editor="urn:com.cohga.server.editor#1.0">


<!--  Global map  -->
  <entity:entity id="entity.globalmap.gadm" label = "%globalmap.gadm.entity" acl="acl.entity.globalmap.gadm" />
  
   	<mapper:mapper id="mapper.globalmap.gadm">
		<spatialEngine>spatialengine.globalmap_gadm</spatialEngine>
		<acl>acl.data.globalmap.gadm</acl>
		<mapping>
			<entity>entity.globalmap.gadm</entity>
			<table>gadm</table>
			<key>objectid</key>
			<filter>name_0 like'${user.customers.globalmap.gadm.name_0}'</filter>
			<filter>name_1 like'${user.customers.globalmap.gadm.name_1}'</filter>
			<dynamic/>
			<cache disable="true" />
		</mapping>	
	</mapper:mapper>

<data:data id="d.globalmap.gadm" label="%globalmap.gadm.entity" entity="entity.globalmap.gadm" datadefinition="dd.globalmap.gadm" acl="acl.data.globalmap.gadm"  />
<data:datadefinition id='dd.globalmap.gadm'>
	<datasourcedataconnection key='objectid' table='gadm.gadm' datasource='ds.globalmap'>
<!--
		<parameter name='objectid' label='Objectid' column='objectid' type='int'/>        
		<parameter name='id_0'     label='Id 0'     column='id_0'     type='int'/>        
		<parameter name='iso'      label='Iso'      column='iso'/>                        
		<parameter name='id_1'     label='Id 1'     column='id_1'     type='int'/>        
		<parameter name='type_1'   label='Type 1'   column='type_1'/>                     
		<parameter name='id_2'     label='Id 2'     column='id_2'     type='int'/>        
		<parameter name='type_2'   label='Type 2'   column='type_2'/>                     
		<parameter name='id_3'     label='Id 3'     column='id_3'     type='int'/>        
-->
		<parameter name='name_0'   label='%globalmap.gadm.name_0'   column='name_0'/>                     
		<parameter name='name_1'   label='%globalmap.gadm.name_1'   column='name_1'/>                     
		<parameter name='name_2'   label='%globalmap.gadm.name_2'   column='name_2'/>                     
		<parameter name='name_3'   label='%globalmap.gadm.name_3'   column='name_3'/>                     
		<parameter name='area_km2' label='%globalmap.gadm.area_km2'   column="ST_Area(the_geom::geography)::bigint/1000000"/>                     
	</datasourcedataconnection>
</data:datadefinition>

  <data:data id="d_gadm_group_total" label="%globalmap.gadm.total_area" entity="entity.globalmap.gadm" datadefinition="dd_gadm_group_total" acl="acl.data.globalmap.gadm" />
  <data:datadefinition id="dd_gadm_group_total">
	  <groupdataconnection datadefinition="dd.globalmap.gadm">
		<parameter  name="count" label="%globalmap.gadm.number_of" column ="count(name_3)" />	
		<parameter  name="sum_area" label="%globalmap.gadm.area_km2" column ="sum(area_km2)" />
	  </groupdataconnection>
 </data:datadefinition>	

  <data:data id="d_gadm_group_country" label="%globalmap.gadm.area_per_country" entity="entity.globalmap.gadm" datadefinition="dd_gadm_group_country" acl="acl.data.globalmap.gadm" />
  <data:datadefinition id="dd_gadm_group_country">
	  <groupdataconnection datadefinition="dd.globalmap.gadm">
		<parameter  name="name_0"  label="%globalmap.gadm.name_0" column ="name_0" />   		
		<parameter  name="count" label="%globalmap.gadm.number_of" column ="count(name_3)" />	
		<parameter  name="sum_area" label="%globalmap.gadm.area_km2" column ="sum(area_km2)" />
	    <group column="name_0"/>
	  </groupdataconnection>
 </data:datadefinition>	

  <data:data id="d_gadm_group_name_1" label="Area per name_1" entity="entity.globalmap.gadm" datadefinition="dd_gadm_group_name_1" acl="acl.data.globalmap.gadm" />
  <data:datadefinition id="dd_gadm_group_name_1">
	  <groupdataconnection datadefinition="dd.globalmap.gadm">
		<parameter  name="name_0"  label="%globalmap.gadm.name_0" column ="name_0" />   		
		<parameter  name="name_1"  label="%globalmap.gadm.name_1" column ="name_1" />   		
		<parameter  name="count" label="%globalmap.gadm.number_of" column ="count(name_3)" />	
		<parameter  name="sum_area" label="%globalmap.gadm.area_km2" column ="sum(area_km2)" />
	    <group column="name_1"/>
	  </groupdataconnection>
 </data:datadefinition>	

<data:datadefinition id='dd_list.globalmap.gadm'>
	<datasourcedataconnection  table='gadm.gadm' datasource='ds.globalmap' prefix="distinct">
		<where clause="name_0 like'${user.customers.globalmap.gadm.name_0}'"/>
		<where clause="name_1 like'${user.customers.globalmap.gadm.name_1}'" />
		<parameter name='name_0'     column='name_0'/>                     
		<parameter name='name_1'     column='name_1'/>                     
		<parameter name='name_2'     column='name_2'/>                     
		<parameter name='name_3'     column='name_3'/>                     
	</datasourcedataconnection>
</data:datadefinition>


   <search:attribute id="sa.globalmap.gadm">
		<acl>acl.data.globalmap.gadm</acl>
		<entity>entity.globalmap.gadm</entity>
		<description>%globalmap.gadm.search</description>
		
		<displayName>%globalmap.gadm.search</displayName>
		<dataSource>ds.globalmap</dataSource>
		<table>gadm.gadm</table>
		<key>objectid</key>
		<where clause="name_0 like'${user.customers.globalmap.gadm.name_0}'"/>
		<where clause="name_1 like'${user.customers.globalmap.gadm.name_1}'" />

	  <parameter id="Country_subnames" >
		  <dataset>dd_list.globalmap.gadm</dataset>
		   <parameter id ="name_0">
				<promptText>%globalmap.gadm.name_0</promptText>
				<controltype>listbox</controltype>
				<column>name_0</column>
				<valuecolumn>name_0</valuecolumn>
				<labelcolumn>name_0</labelcolumn>
				<dataType>string</dataType> 		 
				<allowblank>false</allowblank>		 
		  </parameter>
		   <parameter id ="name_1">
				<promptText>%globalmap.gadm.name_1</promptText>
				<controltype>listbox</controltype>
				<column>name_1</column>
				<valuecolumn>name_1</valuecolumn>
				<labelcolumn>name_1</labelcolumn>
				<dataType>string</dataType> 		 
				<allowblank>true</allowblank>		 
		  </parameter>
		   <parameter id ="name_2">
				<promptText>%globalmap.gadm.name_2</promptText>
				<controltype>listbox</controltype>
				<column>name_2</column>
				<valuecolumn>name_2</valuecolumn>
				<labelcolumn>name_2</labelcolumn>
				<dataType>string</dataType> 		 
				<allowblank>true</allowblank>		 
	 </parameter>
 		   <parameter id ="name_3">
				<promptText>%globalmap.gadm.name_3</promptText>
				<controltype>listbox</controltype>
				<column>name_3</column>
				<valuecolumn>name_3</valuecolumn>
				<labelcolumn>name_3</labelcolumn>
				<dataType>string</dataType> 		 
				<allowblank>true</allowblank>	
			</parameter>
		</parameter>	 
     <cache disable="true"/>
   </search:attribute>   


<data:datadefinition id='dd.index.globalmap.gadm'>
	<datasourcedataconnection key='objectid' table='gadm.gadm' datasource='ds.globalmap'>
		<parameter name='name_0_lower'                              column='lower(name_0)'/>                     
		<parameter name='name_1_lower'                              column='lower(name_1)'/>                     
		<parameter name='name_0'   label='%globalmap.gadm.name_0'   column='name_0'/>                     
		<parameter name='name_1'   label='%globalmap.gadm.name_1'   column='name_1'/>                     
		<parameter name='name_2'   label='%globalmap.gadm.name_2'   column='name_2'/>                     
		<parameter name='name_3'   label='%globalmap.gadm.name_3'   column='name_3'/>                     
	</datasourcedataconnection>
</data:datadefinition>


	<index:entity id="index.globalmap.gadm"> 
		<entity>entity.globalmap.gadm</entity>
		<fields>
		  <datadefinition>dd.index.globalmap.gadm</datadefinition>
		  <field name="customers.globalmap.gadm.name_0" value="name_0_lower"/>
		  <field name="customers.globalmap.gadm.name_1" value="name_1_lower"/>
		</fields>
		<weight>2</weight> 
		<display>
			<datadefinition>dd.index.globalmap.gadm</datadefinition>
			<level1><![CDATA[
				<div>
					<img src="custom/resources/icons/world_tool.png" style=" float: left; padding-right:10px; height:16px;   margin-left: -5px;   padding-bottom: 1px;"></img>
					<div>
						<div style="display: inline-block; font-size:14px;font-weight: normal;">${name_3} ${name_2} </div>
						<div style="display: inline-block; font-size:12px;font-weight: normal;color:gray;"> ${name_1} ${name_0}</div>
					</div>
				</div>
				]]></level1>
		</display>
		<keywords>
			<datadefinition>dd.index.globalmap.gadm</datadefinition>
			<level1>${name_2}</level1>
			<level2>${name_1}</level2>
			<level3>${name_0}</level3>
			<level4>${name_3}</level4>
		</keywords>
<!--
		<schedule>0 0 06 1</schedule>
-->
		<schedule>0 0 26 3</schedule>
	</index:entity>

</config>

Desktop client

In the client_desktop.xml under weave.entitySelectorView   the line  <entity acl="acl.data.globalmap.gadm">entity.globalmap.gadm</entity> is insterted.

iKartan Admin

Contract group is "Open data worldwide"

Product "administrative areas: Quick search" is connected to ACL acl.entity.globalmap.gadm

Product "administrative areas: Analyze" is connected to ACL acl.entity.globalmap.gadm and acl.data.globalmap.gadm

The GADM part of the data definition created for Weave looks like:

part of datadefinitions.xml
<!--    acl.entity.globalmap.gadm    -->
    <acl:acl id="acl.entity.globalmap.gadm"> 
     <entry type="allow">geoadm_analyze</entry>
     <entry type="allow">geoadm_quicksearch</entry>
     <entry type="deny">*</entry>
    </acl:acl> 

<!--    acl.data.globalmap.gadm    -->
    <acl:acl id="acl.data.globalmap.gadm"> 
     <entry type="allow">geoadm_analyze</entry>
     <entry type="deny">*</entry>
    </acl:acl> 


 

Related content

Spatial Redigering API
Spatial Redigering API
Read with this
Open global data
Open global data
More like this
Gävle iKartan
Gävle iKartan
More like this
Omvänd geokodning för spatial redigering
Omvänd geokodning för spatial redigering
More like this
Omvänd geokodning för Spatial Redigering
Omvänd geokodning för Spatial Redigering
More like this
Metadata om IKartans data och appliktioner
Metadata om IKartans data och appliktioner
More like this