ラベル 国土数値地図 の投稿を表示しています。 すべての投稿を表示
ラベル 国土数値地図 の投稿を表示しています。 すべての投稿を表示

2009年9月29日火曜日

OpenLayers で東京都の地図表示 6 再投影のテスト

レイヤの緯度経度の単位が度数のデータは、単位が度数の地図上で表示します。
レイヤと基本地図の単位(投影法)が違う場合は再投影をします。
投影法の設定がないときはどうなるか試してみました。

1 tokyo_bmi_pgis_img.html をコピーして tokyo_bmi_pgis_img02.html を作成します。
2 layer2 と layer3 だけ表示するようにします。
3 マップファイルの "wms_srs" をコメントアウトします。

tokyo_bmi_pgis_img02.html

---
<script type="text/javascript">
var map, layer2, layer3; //layer1, layer4 <-2
function init(){
map = new OpenLayers.Map('map', {
projection: new OpenLayers.Projection("EPSG:2456"),
displayProjection: new OpenLayers.Projection("EPSG:4326"),
maxResolution: 'auto',
units: 'meters',
maxExtent: new OpenLayers.Bounds(-279000,1054000,-185000,1104000)
});

/*layer1 = new OpenLayers.Layer.WMS( "Tokyo Height WMS", //<-2
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/tokyo_bmi_pgis_img.map',
layers: 'height',
format: 'image/png'
});
*/
layer2 = new OpenLayers.Layer.WMS( "Tokyo Kukaku Sen WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/tokyo_bmi_pgis_img.map',
layers: 'kukaku',
transparent: true,
format: 'image/png'
});

layer3 = new OpenLayers.Layer.WMS( "Tokyo Gyoseikai mlit WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/tokyo_pf_pgis.map',
layers: 'gyoseikai',
transparent: true,
format: 'image/png'
});

/*layer4 = new OpenLayers.Layer.WMS( "Tokyo Public Facilities WMS", //<-2
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/tokyo_pf_pgis.map',
layers: 'pf_tokyo',
transparent: true,
format: 'image/png'
});
*/
map.addLayers([layer2, layer3]); //<-2
//map.addLayers([layer1, layer2, layer3, layer4]); //<-2
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.addControl(new OpenLayers.Control.MousePosition());
map.zoomToMaxExtent()

}
</script>
---

tokyo_pf_pgis_map

MAP
NAME tokyo_pf_pgis_map
---
PROJECTION # 投影法 (OpenLayers のため追加)
"init=epsg:4326" #
END #

WEB
IMAGEPATH "/home/nob61/ka-map/htdocs/tmp/kacache/"
IMAGEURL "/ka-map/tmp/kacache/"
METADATA
"wms_title" "Tokyo mlit Map WFS Server" # WMS サーバ設定
# "wms_srs" "EPSG:2456 EPSG:4326" #<-3
END
END
---

tokyo_bmi_pgis_img.map

MAP
NAME tokyo_bmi_pgis_img_map
---
WEB
IMAGEPATH "/home/user/ka-map/htdocs/tmp/kacache/"
IMAGEURL "/ka-map/tmp/kacache/"
METADATA
"wms_title" "Tokyo Map WMS Server" # WMS サーバ設定
# "wms_srs" "EPSG:2456 EPSG:4326" #<-3
END
END
---

tokyo_bmi_pgis_img02.html の地図を表示すると、layer2 だけ表示されて、layer3 はエラーが表示されます。



layer3 に projection を追加しても同様に表示されません。

---
layer3 = new OpenLayers.Layer.WMS( "Tokyo Gyoseikai mlit WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/tokyo_pf_pgis.map',
layers: 'gyoseikai',
transparent: true,
format: 'image/png'
},{
projection: 'EPSG:4326'
});
---

tokyo_bmi_pgis_img02.html の map オプションの projection を EPSG:4326 にすると layer2 が表示されません。
(layer3 は元に戻しておきます。)

---
<script type="text/javascript">
var map, layer2, layer3; //layer1, layer4
function init(){
map = new OpenLayers.Map('map', {
projection: new OpenLayers.Projection("EPSG:4326"),
// displayProjection: new OpenLayers.Projection("EPSG:4326"),
maxResolution: 'auto',
units: 'dd',
maxExtent: new OpenLayers.Bounds(138.85,35.4,140,35.975)
});
---
layer3 = new OpenLayers.Layer.WMS( "Tokyo Gyoseikai mlit WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/tokyo_pf_pgis.map',
layers: 'gyoseikai',
transparent: true,
format: 'image/png'
});
---

2009年9月28日月曜日

OpenLayers で東京都の地図表示 5d 東京都の公共施設を追加4

tokyo_pf_pgis.html に tokyo_bmi_pgis_img.map の height レイヤをベースマップに kukaku レイヤをオーバーレイしてみます。
これにより、tokyo_bmi_pgis_img.map の height レイヤ(layer1)kukaku レイヤ(layer2) が再投影されます。

地図を拡大するため、コントロールパネルの "+" を3回クリックすると、公共施設の位置が表示されました。


1 tokyo_bmi_pgis_img.map の WEB オブジェクトの "wms_srs" に EPSG:4326 を追加します。
2 layer1 と layer2 を追加。もとの layer1 と layer2 は layer3 と layer4 にします。
3 この地図の投影(projection:プロジェクション)。


tokyo_bmi_pgis_img.map

MAP
NAME tokyo_bmi_pgis_img_map
---
WEB
IMAGEPATH "/home/user/ka-map/htdocs/tmp/kacache/"
IMAGEURL "/ka-map/tmp/kacache/"
METADATA
"wms_title" "Tokyo Map WMS Server" # WMS サーバ設定
"wms_srs" "EPSG:2456 EPSG:4326" #<-1
END
END
---

tokyo_pf_pgis.html

---
<script type="text/javascript">
var lon = 139.5;
var lat = 35.7;
var zoom = 9;
var map, layer1, layer2, layer3, layer4;
function init(){
map = new OpenLayers.Map('map');

layer1 = new OpenLayers.Layer.WMS( "Tokyo Height WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/tokyo_bmi_pgis_img.map',
layers: 'height',
format: 'image/png'
});

layer2 = new OpenLayers.Layer.WMS( "Tokyo Kukaku Sen WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/tokyo_bmi_pgis_img.map',
layers: 'kukaku',
transparent: true,
format: 'image/png'
});

layer3 = new OpenLayers.Layer.WMS( "Tokyo Gyoseikai mlit WMS",
---



maxExtent で設定すると画像サイズに合った地図が最初から表示されます。

tokyo_pf_pgis.html

<script type="text/javascript">
/*var lon = 139.5;
var lat = 35.7;
var zoom = 9;
*/
var map, layer1, layer2, layer3, layer4;
function init(){
map = new OpenLayers.Map('map', {
units: 'dd',
maxResolution: 'auto',
maxExtent: new OpenLayers.Bounds(138.85,35.4,140,35.975)
});
---
map.zoomToMaxExtent()
}
</script>
---

2009年9月27日日曜日

OpenLayers で東京都の地図表示 5c 東京都の公共施設を追加3

tokyo_bmi_pgis_img.html に tokyo_pf_pgis.map の pf_tokyo レイヤをオーバーレイしてみます。
これにより、tokyo_pf_pgis.map の gyoseikai レイヤ(layer3)pf_tokyo レイヤ(layer4) が再投影されます。

地図を拡大するため、コントロールパネルの "+" を3回クリックすると、公共施設の位置が表示されました。

1 layer3 と layer4 を追加。
2 この地図の投影(projection:プロジェクション)。
3 マウスの位置(MousePosition)を度数表示にするための設定。(できませんでした。)

---
<script type="text/javascript">
var map, layer1, layer2, layer3, layer4;
function init(){
map = new OpenLayers.Map('map', {
projection: new OpenLayers.Projection("EPSG:2456"), //<-2
displayProjection: new OpenLayers.Projection("EPSG:4326"), //<-3
maxResolution: 'auto',
units: 'meters',
maxExtent: new OpenLayers.Bounds(-279000,1054000,-185000,1104000)
});

layer1 = new OpenLayers.Layer.WMS( "Tokyo Height WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/tokyo_bmi_pgis_img.map',
layers: 'height',
format: 'image/png'
});

layer2 = new OpenLayers.Layer.WMS( "Tokyo Kukaku Sen WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/tokyo_bmi_pgis_img.map',
layers: 'kukaku',
transparent: true,
format: 'image/png'
});

layer3 = new OpenLayers.Layer.WMS( "Tokyo Gyoseikai mlit WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/tokyo_pf_pgis.map',
layers: 'gyoseikai',
transparent: true,
format: 'image/png'
});

layer4 = new OpenLayers.Layer.WMS( "Tokyo Public Facilities WMS", //<-1
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/tokyo_pf_pgis.map',
layers: 'pf_tokyo',
transparent: true,
format: 'image/png'
});

map.addLayers([layer1, layer2, layer3, layer4]); //<-1
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.addControl(new OpenLayers.Control.MousePosition()); //<-3
map.zoomToMaxExtent()

}
</script>
---


2009年9月26日土曜日

OpenLayers で東京都の地図表示 5b penLayers に東京都の公共施設を追加2

「OpenLayers 7units metersのWMS」を参考に 確認のため OpenLayers で東京都の国土数値地図を表示します。


Eclipse を起動して Example フォルダ内の tokyo_bmi_pgis_img.html をコピーして tokyo_pf_pgis.html ファイルを作成します。
0 tokyo_bmi_pgis_img.htmlをダブルクリックして開きます。
1 プロジェクトビューのopenlayersTokyoprojフォルダを右クリックして、新規->HTMLファイルをクリックします。
2 HTMLファイルウィンドウでファイル名をtokyo_pf_pgis.htmlと入力し、完了ボタンをクリックします。
3 エディタのタブをエディタビュー内の下へドラッグすると2段になってみやすくなります。
4 charsetをUTF-8にして、<title>をTokyo Public Facilities Pgis Mapにします。
5 tokyo_bmi_pgis_img.html の内容ををコピーしてtokyo_pf_pgis.html ファイルに貼り付けます。
6 javascriptの一部を次のように修正します。
style.cssとOpenLayers.jsのパスを変えます。
緯度、経度、倍率の宣言をします。
OpenLayers.Map のオプションを削除します。

---
<link rel="stylesheet" href="./theme/default/style.css" type="text/css" />
<link rel="stylesheet" href="./examples/style.css" type="text/css" /><!-- ここを追加 -->
<script src="./lib/OpenLayers.js"></script>
<script type="text/javascript">
var lon = 139.5;
var lat = 35.7;
var zoom = 9;
var map, layer1, layer2;
function init(){
map = new OpenLayers.Map('map');

layer1 = new OpenLayers.Layer.WMS( "Tokyo Gyoseikai mlit WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/tokyo_pf_pgis.map',
layers: 'gyoseikai',
format: 'image/png'
});

layer2 = new OpenLayers.Layer.WMS( "Tokyo Public Facilities WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/tokyo_pf_pgis.map',
layers: 'pf_tokyo',
transparent: true,
format: 'image/png'
});

map.addLayers([layer1, layer2]);
map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
map.addControl(new OpenLayers.Control.LayerSwitcher());
}
</script>
---



地図を拡大するため、コントロールパネルの "+" を5回クリックすると、公共施設の位置が表示されました。

表示された地図の投影法は正距円筒図法で、縦方向が少しつぶれたようになっています。

2009年9月24日木曜日

OpenLayers で東京都の地図表示 5a OpenLayers に東京都の公共施設を追加1

「OpenLayers 10a-d unitsがddとmeterのレイヤ」を参考に、
tokyo_pf_pgis.map に WMS サーバの設定をします。

1 OpenLayers では地図を表示するのに、マップファイルに MAP オブジェクトの PROJECTION オブジェクトが必要です。
epsg:4326(PROJECTION オブジェクトでは epsg を小文字で設定)は、X/Yの値で扱われるれる緯度と経度で地図を説明する一般的な識別子です。
これは、MapServer と OpenLayers のデフォルトの投影法である正距円筒図法ですが、必ず設定します。

2 WMS サーバ機能を設定するのに、WEB オブジェクトの METADATA オブジェクトに、 "wms_title" と "wms_srs" を設定します。
"wms_srs" に、基盤地図情報のに合わせて "EPSG:2456" も設定します。
これによって、"wms_srs" の識別子が WMS を利用できるすべてのレイヤに設定されます。
3 レイヤを WMS で利用できるように、同じように、METADATA オブジェクトに、 "wms_title" を設定します。
レイヤを別の投影法で利用したいときは、個別に "wms_srs" を設定します。
MAP
 NAME tokyo_pf_pgis_map
---
 PROJECTION         # 投影法 (OpenLayers のため追加)<-1
   "init=epsg:4326" #
 END                #

 WEB
   IMAGEPATH "/home/nob61/ka-map/htdocs/tmp/kacache/"
   IMAGEURL "/ka-map/tmp/kacache/"
   METADATA
     "wms_title" "Tokyo mlit Map WMS Server" # WMS サーバ設定<-2
     "wms_srs" "EPSG:2456 EPSG:4326"         #
   END
 END
---
 LAYER
  NAME gyoseikai
---
  METADATA
    "group_title" "行政界"
    "queryable" "true"
    "searchfield" "cn2"
    "fields" "con:郡政令,cn2:市区町村"
    "wms_title" "Gyoseikai Tokyo mlit Map WMS Layer" # 追加<-3
  END
---
 LAYER
  NAME pf_tokyo
---
  METADATA
   "group_title" "公共施設"
   "searchfield" "na0"
   "fields" "na0:公共施設,ads:住所"
   "wms_title" "Public Facilities Tokyo mlit Map WMS Layer" # 追加<-3
#   "wms_srs" "EPSG:2456 EPSG:4326"                         #
  END
---

GetCapabilities で WMS の情報を取得できます。
警告(<!-- WARNING:...)がありますが、今回は地図の表示に影響ありません。

wget -O tokyo_pf_pgis.xml "http://localhost/cgi-bin/mapserv?map=/home/nob61/mapfile/tokyo_pf_pgis.map&service=WMS&version=1.1.1&request=GetCapabilities"

nob61@debian:~/xml$ vim tokyo_pf_pgis.xml
---
  <Layer>
    <Name>tokyo_pf_pgis_map</Name>
    <Title>Tokyo mlit Map WMS Server</Title>
    <SRS>EPSG:2456</SRS>
    <SRS>EPSG:4326</SRS>
    <LatLonBoundingBox minx="138.85" miny="35.4" maxx="140" maxy="35.975" />
    <BoundingBox SRS="EPSG:4326"
                minx="138.85" miny="35.4" maxx="140" maxy="35.975" />
    <Layer queryable="1" opaque="0" cascaded="0">
        <Name>gyoseikai</Name>
        <Title>Gyoseikai Tokyo mlit Map WMS Layer</Title>
<!-- WARNING: Mandatory mapfile parameter '(at least one of) MAP.PROJECTION, LAYER.PROJECTION or wms_srs metadata' was missing in this context. -->
        <LatLonBoundingBox minx="-2.5e+07" miny="-2.5e+07" maxx="2.5e+07" maxy="2.5e+07" />
        <BoundingBox SRS="EPSG:4326"
                    minx="-2.5e+07" miny="-2.5e+07" maxx="2.5e+07" maxy="2.5e+07" />
        <Style>
          <Name>default</Name>
          <Title>default</Title>
          <LegendURL width="20" height="10">
             <Format>image/png</Format>
             <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://localhost/cgi-bin/mapserv?map=/home/nob61/mapfile/tokyo_pf_pgis.map&version=1.1.1&service=WMS&request=GetLegendGraphic&layer=gyoseikai&format=image/png"/>
          </LegendURL>
        </Style>
    </Layer>
    <Layer>

---
    <Layer>
      <Name>pf_tokyo</Name>
<!-- WARNING: Mandatory metadata '..._GROUP_TITLE' was missing in this context. -->
      <Title>pf_tokyo</Title>
      <Abstract>pf_tokyo</Abstract>
      <Layer queryable="1" opaque="0" cascaded="0">
        <Name>pf_tokyo</Name>
        <Title>Public Facilities Tokyo mlit Map WMS Layer</Title>
<!-- WARNING: Mandatory mapfile parameter '(at least one of) MAP.PROJECTION, LAYER.PROJECTION or wms_srs metadata' was missing in this context. -->
        <LatLonBoundingBox minx="-2.5e+07" miny="-2.5e+07" maxx="2.5e+07" maxy="2.5e+07" />
        <BoundingBox SRS="EPSG:4326"
                    minx="-2.5e+07" miny="-2.5e+07" maxx="2.5e+07" maxy="2.5e+07" />
        <Style>
          <Name>default</Name>
          <Title>default</Title>
          <LegendURL width="20" height="10">
             <Format>image/png</Format>
             <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://localhost/cgi-bin/mapserv?map=/home/nob61/mapfile/tokyo_pf_pgis.map&version=1.1.1&service=WMS&request=GetLegendGraphic&layer=pf_tokyo&format=image/png"/>
          </LegendURL>
        </Style>
        <ScaleHint min="0" max="124.725712107409" />
      </Layer>
    </Layer>
  </Layer>
</Capability>
</WMT_MS_Capabilities>

2009年9月21日月曜日

OpenLayers で東京都の地図表示 3 東京都の公共施設のマップファイル

tokyo_pgis.map をコピーしてファイル名を tokyo_pf_pgis.map にしてレイヤを次のように追加します。

ka-Map で表示するための設定になっています。

MAP
NAME tokyo_pf_pgis_map
---
SYMBOL
NAME 'circle'
TYPE ELLIPSE
FILLED TRUE
POINTS
1 1
END
END
---
LAYER
NAME pf_tokyo
GROUP pf_tokyo
TYPE POINT
STATUS ON
CONNECTIONTYPE POSTGIS
CONNECTION "dbname=tokyo host=localhost user=nob61 password=balanced"
DATA "the_geom from pf_tokyo"
MAXSCALEDENOM 250000 # ka-Mapで表示するときはなぜか表示したい一つ上の倍率
LABELITEM "na0"
METADATA
"group_title" "公共施設" # ka-Map 用
"searchfield" "na0" #
"fields" "na0:公共施設,ads:住所" #
END
CLASS
NAME "公共施設"
STYLE
SYMBOL 'circle'
COLOR 102 255 102
SIZE 5
END
LABEL
MINFEATURESIZE 40
TYPE TRUETYPE
FONT vl-gothic
ENCODING UTF8
SIZE 8
POSITION uc
END
END
TEMPLATE temp_pf_tokyo_pgis.html # 検索文字列表示用
END

END # END OF MAPFILE

temp_pf_tokyo_pgis.html の内容

<html>
<head>
<title>Pubilic Facilities Tokyo pgis Template</title>
</head>
<body>
<li>[na0]
<li>[ads]
</body>
</html>

2009年9月20日日曜日

OpenLayers で東京都の地図表示 2 東京都の公共施設をデータベースに登録

shp2pgsqlコマンドを使ってシェイプファイルをデータベースに登録します。
一般ユーザでシェイプファイルのあるディレクトリに移動して、次のように入力します。

user@debian:~$ cd download/pf_tokyo_shp/
user@debian:~/download/pf_tokyo_shp$ shp2pgsql -W sjis P02-06_13_FB01.shp pf_tokyo > pf_tokyo.sql
Shapefile type: Point
Postgis type: POINT[2]
user@debian:~/download/pf_tokyo_shp$ psql -d tokyo -f pf_tokyo.sql
user@debian:~/download/pf_tokyo_shp$ psql tokyo
Welcome to psql 8.3.7, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

tokyo=> \dt
List of relations
Schema | Name | Type | Owner
--------+------------------+-------+-------
public | geometry_columns | table | user
public | gyoseikai | table | user
public | pf_tokyo | table | user
public | population | table | user
public | spatial_ref_sys | table | user
(5 rows)

pf_tokyoテーブル内のカラムとその他の一覧を表示してみます。

tokyo=> \d pf_tokyo
Table "public.pf_tokyo"
Column | Type | Modifiers
----------+-----------------------+--------------------------------------------------------
gid | integer | not null default nextval('pf_tokyo_gid_seq'::regclass)
aac | character varying(5) |
ren | character varying(1) |
com | character varying(1) |
cls | character varying(1) |
pca | character varying(2) |
pci | character varying(5) |
na8 | character varying(1) |
na0 | character varying(82) |
ads | character varying(63) |
apf | character varying(1) |
ad6 | character varying(1) |
ys3 | character varying(1) |
oy2 | character varying(1) |
rcn | character varying(12) |
the_geom | geometry |
Indexes:
"pf_tokyo_pkey" PRIMARY KEY, btree (gid)
Check constraints:
"enforce_dims_the_geom" CHECK (ndims(the_geom) = 2)
"enforce_geotype_the_geom" CHECK (geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL)
"enforce_srid_the_geom" CHECK (srid(the_geom) = (-1))

tokyo=> \q

2009年7月26日日曜日

東京都の地図 円積図(平成20年版)

東京都の地図 円積図(平成20年版)

人口を円積図で表します。人口によって円の大きさを変えて表示します。

レイヤ部分を記述します。
階級区分のマップファイルのうち、SYMBOLオブジェクトを追加し、gyoseikai2のレイヤを削除、totalpopレイヤを次のように修正します。

MAP
NAME tokyo_pgis_circle.map
---
SCALEBAR
TRANSPARENT TRUE
END

SYMBOL
NAME 'circle'
TYPE ELLIPSE
FILLED TRUE
POINTS
1 1
END
END
---
LAYER
NAME totalpop
GROUP totalpop
TYPE ANNOTATION
STATUS ON
CONNECTIONTYPE POSTGIS
CONNECTION "dbname=tokyo host=localhost user=user password=password"
DATA "the_geom FROM (
SELECT gyoseikai.gid AS gid,
gyoseikai.con AS con,
gyoseikai.cn2 AS cn2,
gyoseikai.aac AS aac,
gyoseikai.the_geom AS the_geom,
population.total AS total,
population.male AS male,
population.female AS female,
population.foreigner AS foreigner
FROM gyoseikai LEFT OUTER JOIN population ON gyoseikai.aac = population.aac)
AS gyosei_pop USING UNIQUE gid USING SRID=-1"
LABELITEM "total"
CLASSITEM "total"
METADATA
"group_title" "人口"
END
CLASS
NAME "50万人以上"
EXPRESSION ([total] >= 500000)
LABEL
SIZE tiny
COLOR 255 204 204
OUTLINECOLOR 102 51 51
POSITION ul
END
STYLE
SYMBOL 'circle'
COLOR 255 0 0
SIZE 20
END
END
CLASS
NAME "40万-50万人"
EXPRESSION ([total] < 500000 AND [total] >= 400000)
LABEL
SIZE tiny
COLOR 255 204 204
OUTLINECOLOR 102 51 51
POSITION ul
END
STYLE
SYMBOL 'circle'
COLOR 255 0 0
SIZE 17
END
END
CLASS
NAME "30万-40万人"
EXPRESSION ([total] < 400000 AND [total] >= 300000)
LABEL
SIZE tiny
COLOR 255 204 204
OUTLINECOLOR 102 51 51
POSITION ul
END
STYLE
SYMBOL 'circle'
COLOR 255 0 0
SIZE 14
END
END
CLASS
NAME "20万-30万人"
EXPRESSION ([total] < 300000 AND [total] >= 200000)
LABEL
SIZE tiny
COLOR 255 204 204
OUTLINECOLOR 102 51 51
POSITION ul
END
STYLE
SYMBOL 'circle'
COLOR 255 0 0
SIZE 11
END
END
CLASS
NAME "10万-20万人"
EXPRESSION ([total] < 200000 AND [total] >= 100000)
LABEL
SIZE tiny
COLOR 255 204 204
OUTLINECOLOR 102 51 51
POSITION ul
END
STYLE
SYMBOL 'circle'
COLOR 255 0 0
SIZE 8
END
END
CLASS
NAME "10万人以下"
EXPRESSION ([total] < 100000)
LABEL
SIZE tiny
COLOR 255 204 204
OUTLINECOLOR 102 51 51
POSITION ul
END
STYLE
SYMBOL 'circle'
COLOR 255 0 0
SIZE 5
END
END
END
---

東京都の地図 グラフ
奥多摩町のグラフも正常に表示されました。
totalpop レイヤを次のように修正しました。

MAP
NAME tokyo_pgis_graph.map
---
SCALEBAR
TRANSPARENT TRUE
END

# SYMBOL
# NAME 'circle'
# TYPE ELLIPSE
# FILLED TRUE
# POINTS
# 1 1
# END
# END
---
LAYER
NAME totalpop
GROUP totalpop
TYPE chart
STATUS ON
CONNECTIONTYPE POSTGIS
CONNECTION "dbname=tokyo host=localhost user=nob61 password=balanced"
DATA "the_geom from (
SELECT gyoseikai.gid AS gid,
gyoseikai.con AS con,
gyoseikai.cn2 AS cn2,
gyoseikai.aac AS aac,
gyoseikai.the_geom AS the_geom,
population.total AS total,
population.male AS male,
population.female AS female,
population.foreigner AS foreigner
FROM gyoseikai LEFT OUTER JOIN population ON gyoseikai.aac = population.aac
)
AS gyosei_pop USING UNIQUE gid USING SRID=-1"
LABELITEM "total"
CLASSITEM "total"
METADATA
"group_title" "人口"
END
CLASS
NAME "男"
STYLE
SIZE [male]
COLOR 51 51 255
END
END
CLASS
NAME "女"
STYLE
SIZE [female]
COLOR 255 51 51
END
END
CLASS
NAME "外国人"
STYLE
SIZE [foreigner]
COLOR 51 255 51
END
END
END
---

東京都のマップファイルと地図(平成20年版)

東京都の人口を階級区分して色分けする例です。

tokyo_shp2.mapをコピーしてtokyo_pgis_color.mapを作成します。
マップファイルのレイヤ部分を記述します。

MAP
NAME tokyo_pgis_color_map
---
LAYER
NAME gyoseikai
GROUP gyoseikai
TYPE POLYGON
STATUS ON
CONNECTIONTYPE POSTGIS
CONNECTION "dbname=tokyo host=localhost user=user password=password"
DATA "the_geom FROM (
SELECT gyoseikai.gid AS gid,
gyoseikai.con AS con,
gyoseikai.cn2 AS cn2,
gyoseikai.aac AS aac,
gyoseikai.the_geom AS the_geom,
population.total AS total,
population.male AS male,
population.female AS female,
population.foreigner AS foreigner
FROM gyoseikai LEFT OUTER JOIN population ON gyoseikai.aac = population.aac)
AS gyosei_pop USING UNIQUE gid USING SRID=-1"
LABELITEM "cn2"
METADATA
"group_title" "行政界"
"queryable" "true"
"searchfield" "cn2"
"fields" "con:郡政令,cn2:市区町村,total:人口"
END
CLASS
NAME "行政界"
STYLE
OUTLINECOLOR 153 153 153
END
LABEL
MINFEATURESIZE 40
TYPE TRUETYPE
FONT vl-gothic
ENCODING UTF-8
SIZE 8
END
END
TEMPLATE temp_tokyo_pgis.html #ここを修正
END

LAYER #ダミーのレイヤ
NAME gyoseikai2
GROUP totalpop
TYPE POLYGON
STATUS ON
CONNECTIONTYPE POSTGIS
CONNECTION "dbname=tokyo host=localhost user=user password=password"
DATA "the_geom FROM (
SELECT gyoseikai.gid AS gid,
gyoseikai.con AS con,
gyoseikai.cn2 AS cn2,
gyoseikai.aac AS aac,
gyoseikai.the_geom AS the_geom,
population.total AS total,
population.male AS male,
population.female AS female,
population.foreigner AS foreigner
FROM gyoseikai LEFT OUTER JOIN population ON gyoseikai.aac = population.aac)
AS gyosei_pop USING UNIQUE gid USING SRID=-1"
LABELITEM "cn2"
METADATA
"group_title" "人口"
END
CLASS
NAME "行政界"
STYLE
OUTLINECOLOR 153 153 153
END
LABEL
MINFEATURESIZE 40
TYPE TRUETYPE
FONT vl-gothic
ENCODING UTF-8
SIZE 8
END
END
END

LAYER #このレイヤを追加
NAME totalpop
GROUP totalpop
TYPE POLYGON
STATUS ON
CONNECTIONTYPE POSTGIS
CONNECTION "dbname=tokyo host=localhost user=user password=password"
DATA "the_geom FROM (
SELECT gyoseikai.gid AS gid,
gyoseikai.con AS con,
gyoseikai.cn2 AS cn2,
gyoseikai.aac AS aac,
gyoseikai.the_geom AS the_geom,
population.total AS total,
population.male AS male,
population.female AS female,
population.foreigner AS foreigner
FROM gyoseikai LEFT OUTER JOIN population ON gyoseikai.aac = population.aac)
AS gyosei_pop USING UNIQUE gid USING SRID=-1"
OPACITY 50
CLASSITEM "total"
METADATA
"group_title" "人口"
END
CLASS
NAME "50万人以上"
EXPRESSION ([total] >= 500000)
COLOR 255 0 0
END
CLASS
NAME "40万-50万人"
EXPRESSION ([total] < 500000 AND [total] >= 400000)
COLOR 255 51 51
END
CLASS
NAME "30万-40万人"
EXPRESSION ([total] < 400000 AND [total] >= 300000)
COLOR 255 102 102
END
CLASS
NAME "20万-30万人"
EXPRESSION ([total] < 300000 AND [total] >= 200000)
COLOR 255 153 153
END
CLASS
NAME "10万人-20万人"
EXPRESSION ([total] < 200000 AND [total] >= 100000)
COLOR 255 204 204
END
END

LAYER
NAME gun_seirei
GROUP gun_seirei
TYPE ANNOTATION
STATUS ON
CONNECTIONTYPE POSTGIS
CONNECTION "dbname=tokyo host=localhost user=user password=password"
DATA "the_geom FROM (
SELECT gyoseikai.gid AS gid,
gyoseikai.con AS con,
gyoseikai.cn2 AS cn2,
gyoseikai.aac AS aac,
gyoseikai.the_geom AS the_geom,
population.total AS total,
population.male AS male,
population.female AS female,
population.foreigner AS foreigner
FROM gyoseikai LEFT OUTER JOIN population ON gyoseikai.aac = population.aac)
AS gyosei_pop USING UNIQUE gid USING SRID=-1"
LABELITEM "con"
METADATA
"group_title" "郡政令"
"searchfield" "con"
"fields" "con:郡政令,cn2:市区町村,total:人口"
END
CLASS
NAME "郡政令"
LABEL
MINFEATURESIZE 40
TYPE TRUETYPE
FONT vl-gothic
ENCODING UTF-8
SIZE 8
POSITION uc
END
END
TEMPLATE temp_tokyo_pgis.html #ここを修正
END

END #MAP END


temp_tokyo_pgis.htmlを作成します。
temp_tokyo_shp.htmlをコピーしてファイル名を変えます。
内容を次のように修正します。

<html>
<head>
<title>Tokyo pgis Template</title> #ここを修正
</head>
<body>
<li>[con]
<li>[cn2]
<li>[total] #ここを追加
</body>
</html>

config.phpの内容をつぎのように修正します。

$aszTokyo = array (
'title' => 'Tokyo',
'path' => '/home/nob61/mapfile/tokyo_pgis_color.map',
'scales' => array( 500000, 250000, 100000 ),
'format' =>'PNG'
);

東京都の人口データ(平成20年)の準備とテーブルの作成

東京都の人口データ(平成20年)の準備

住民基本台帳による世帯と人口
http://www.toukei.metro.tokyo.jp/juukim/jm-index.htm

平成20年6月のデータをダウンロードしました。
これを人口総数(A+B)、男、女、外国人登録人口に行政コードを追加した単純な表にします。

例えば、
0 OpenOffice.org Calc でダウンロードしたファイルを開く
1 データをコピーし、別のファイルに
編集->形式を選択して張り付け->「テキスト、数」だけチェックして「OK」
2 列のタイトルは1行にする
3 市区町村の行以外を削除する(空行や合計行など)
4 市区町村名、人口総数(A+B)、男、女、外国人登録人口以外の列を削除する
5 行政コードを追加する (行政コード、市区町村名、人口総数(A+B)、男、女、外国人登録人口の順にしました。)
6 タイトル行を削除する
7 CSVファイルとして出力

行政コードは、インターネットで探すか、次のようにマップデータから作成します。

Eclipseを起動して tokyo データベースに接続します。
データベース構造(Database Structure) ウィンドウの

public -> テーブル(table) -> gyoseikai

をクリックを右クリックし、 Selectステートメントの生成 をクリックします。
SQLエディタ に次のように入力して実行します。

select distinct con, cn2, aac from "public"."gyoseikai"

表示された結果を右クリックして、 エクスポート->export to .csv をクリックします。
include column header をチェックし、宛先 ボタンをクリックして保存先とファイル名を指定し、OK ボタンをクリックします。

csvファイルを開き aac で「並べ替え」した後、aac (行政コード)をコピーし、加工した人口データに貼り付けます。


*コマンドでCSVファイルに出力

user@debian:~$ psql -F ',' -A -t -c 'SELECT DISTINCT con, cn2, aac from gyoseikai' tokyo > gyosei_code.csv


参考

user@debian:~$ psql tokyo
Welcome to psql 8.1.11, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

tokyo=> \o gyosei_aac.txt
tokyo=> SELECT DISTINCT con, cn2, aac from gyoseikai;
tokyo=> \!less gyosei_aac.txt
tokyo=> \o
tokyo=> \q

バージョン8.3なら次も可能

tokyo=> \COPY (SELECT DISTINCT con, cn2, aac from gyoseikai) TO 'aac2.csv' WITH DELIMITER ','

ファイルの内容

葛飾区,\N,13122
江戸川区,\N,13123
江東区,\N,13108
---


東京都の人口テーブルの作成

データベースtokyoに次のようにテーブルを作成します。

Eclipseの場合(2009.7.22現在、実行が完了してもテーブルが生成できないか、エラーが表示されました。)
データベース構造(Database Structure) ウィンドウの

public -> テーブル(table) -> gyoseikai

をクリックを右クリックし、 Create Table スクリプト をクリックします。
SQL エディタ を次のように修正して実行します。


CREATE TABLE "public"."population"(
aac varchar(5),
shikuchoso varchar(14),
total int4,
male int4,
female int4,
foreigner int4);


データベース構造(Database Structure) ウィンドウのテーブル(table)を右クリックし、更新 をクリックすると population テーブルが表示されます。

*コマンドで population テーブルを作成(2009.7.22現在、こちらでテーブルを作成しました。)

user@debian:~$ psql tokyo
Welcome to psql 8.3.7, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

tokyo=> CREATE TABLE population (
tokyo(> aac varchar(5),
tokyo(> shikuchoso varchar(14),
tokyo(> total int4,
tokyo(> male int4,
tokyo(> female int4,
tokyo(> foreigner int4);
NOTICE: CREATE TABLE will create implicit sequence "population_aac_seq" for serial column "population.aac"
CREATE TABLE
tokyo=> \q

tokyo_population.csv の内容を population テーブルに追加します。
スーパユーザー(postgres)で

nob61@debian:~$ su - postgres
パスワード:
postgres@debian:~$ psql tokyo
Welcome to psql 8.3.7, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

tokyo=# COPY population FROM '/home/nob61/download/tokyo_population/tokyo_population.csv' CSV;
COPY 62
tokyo=# \q

tokyo_pgis.mapの DATA の部分を次のように修正します。

DATA "the_geom from (
SELECT gyoseikai.gid AS gid,
gyoseikai.con AS con,
gyoseikai.cn2 AS cn2,
gyoseikai.aac AS aac,
gyoseikai.the_geom AS the_geom,
population.total AS total,
population.male AS male,
population.female AS female,
population.foreigner AS foreigner
FROM gyoseikai LEFT OUTER JOIN population ON gyoseikai.aac = population.aac
)
AS gyosei_pop USING UNIQUE gid USING SRID=-1"

東京(平成20年)の国土数値地図を PostGIS で

Synapticパッケージマネージャで次のパッケージをインストールします。
リポジトリの変更はありません。
現在の安定版 "lenny" では次のバージョンがインストールされます。

postgresql-8.3-postgis

データベースの作成は、
PostGISホームページ
http://postgis.refractions.net/

のDocumentation(html)の

PostGIS Manual
http://postgis.refractions.net/documentation/

の左サイドバーの Documentation: Stable Releases ●1.3 [html] (v1.3.6) をクリックして、

Chapter 2. Installation
http://postgis.refractions.net/documentation/manual-1.3/ch02.html

の2.2. PostGIS Compile from Source and Installの7,8,9,10を参考に前回使用した東京都のデータを使用したデータベースを作成します。
これには4つのステップがあります。

1:PostgreSQLのpl/pgsql言語サポートの有効化
2:lwpostgis.sqlの読み込み
3:spatial_ref_sys.sqlの読み込み
4:postgis_comments.sqlの読み込み(ver.1.3.3にはありませんでした)

です。
pl/pgsqlはデータベース内に組み込むことができる内部的なプログラミング言語をサポートします。
lwpostgis.sqlはPostGISの機能で、pl/pgsqlが有効になって読み込むことができます。
spatial_ref_sys.sqlは投影法に関する情報です。
postgis_comments.sqlは postgis が持つ機能についてのヘルプ文章です。

次に、2.2.1. Creating PostGIS spatially-enabled databases from an in-built template を参考にテンプレートを作成してデータベースを作成します。

nob61@debian:~/mapdata/tokyo$ psql tokyo
Welcome to psql 8.3.7, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

tokyo=> \dt
List of relations
Schema | Name | Type | Owner
--------+------------------+-------+-------
public | geometry_columns | table | nob61
public | gyoseikai | table | nob61
public | spatial_ref_sys | table | nob61
(3 rows)

tokyo=> \d gyoseikai
Table "public.gyoseikai"
Column | Type | Modifiers
----------+-----------------------+---------------------------------------------------------
gid | integer | not null default nextval('gyoseikai_gid_seq'::regclass)
prn | character varying(6) |
sun | character varying(1) |
con | character varying(8) |
cn2 | character varying(10) |
aac | character varying(5) |
the_geom | geometry |
Indexes:
"gyoseikai_pkey" PRIMARY KEY, btree (gid)
Check constraints:
"enforce_dims_the_geom" CHECK (ndims(the_geom) = 2)
"enforce_geotype_the_geom" CHECK (geometrytype(the_geom) = 'MULTIPOLYGON'::text OR the_geom IS NULL)
"enforce_srid_the_geom" CHECK (srid(the_geom) = (-1))


*Galileoの場合
1 メニューバーの ヘルプ->新規ソフトウェアのインストール をクリックします。
2 使用可能なソフトウェアが表示されたら 追加 ボタンをクリックします。
3 サイトの追加 ポップアップウィンドウの 名前に SQL Explorer ロケーション に次のURLを入力して OK ボタンをクリックします。
http://eclipsesql.sourceforge.net/
4 使用可能なソフトウェア ポップアップウィンドウ表示されたら、追加されたsqlexplorer のアップデートサイトのチェックボックスをクリックしてチェックし、次へ ボタンをクリックします。
(項目をカテゴリー別にグループ化 のチェックを外してください。)
5 インストール詳細 ポップアップウィンドウ表示されたら 次へ ボタンをクリックします。
6 ライセンスのビュー が表示されたら 使用条項の条件に同意します をクリックし 完了 ボタンをクリックします。
7 インストールが終了したら ソフトウェア更新 ポップアップウィンドウ表示されるので はい ボタンをクリックし、eclipseを再起動します。


メニューバーの ウィンドウ->パースペクティブを開く->その他 で パースペクティブを開く ポップアップウィンドウ表示されるので SQL Explorer をクリックし OK ボタンをクリックします。
ウインドウ->設定 をクリックします。
設定ポップアップウィンドウの SQL Explorer->JDBC ドライバー をクリックします。
PostgreSQL を選択して 編集 ボタンをクリックします。
Change Driverポップアップウィンドウの 追加クラス・パス タブをクリックし、新規 ボタンをクリックします。
ポップアップウィンドウで /usr/share/java/postgresql-jdbc3-8.2.jar を選んで OK ボタンをクリックします。
(ない場合は、Synapticパッケージマネージャで libpg-java をインストールしてください。)
Change Driverポップアップウィンドウで postgresql-jdbc3-8.2.jar を選んで ドライバーをリス をボタンをクリックし、ドライバクラス名 が表示されたら OK ボタンをクリックします。
設定 ポップアップウィンドウの OK ボタンをクリックします。

接続 ウィンドウ上で右クリックし、新規接続プロファイル をクリックします。
新規接続プロファイル作成 ポップアップで次のように入力します。

Name:tokyo
Drivers:PostgreSQL
URL:jdbc:postgresql:[[:<5432>/]]
->jdbc:postgresql://localhost:5432/tokyo
User Name:user
Password:*******
Auto Logon:チェック(お好みで)

OK ボタンをクリックします。
接続 ウィンドウ上の tokyo の user を右クリックし 接続 をクリックします。
データベース構造(Database Structure) ウィンドウの

public -> テーブル(table) -> gyoseikai

をクリックし データベース詳細(Database Detail) ウィンドウの プレビュー(Preview) タブをクリックすると gyoseikaiテーブル のデータ内容が表示されます。

tokyo_pgis.map

MAP
NAME tokyo_pgis_map # 名前を変更
---
LAYER
NAME gyoseikai
TYPE POLYGON
STATUS ON
# DATA "../mapdata/tokyo/N03-090320_13_EC01.shp" # 削除
CONNECTIONTYPE POSTGIS # 追加
CONNECTION "dbname=tokyo host=localhost user=nob61 password=balanced" # 追加
DATA "the_geom from gyoseikai" # 追加
LABELITEM cn2 # PostGISでは大文字小文字を区別します
METADATA
"group_title" "行政界"
# "layer_encoding" "SJIS" # 削除
"queryable" "true"
"searchfield" "cn2" # PostGISでは大文字小文字を区別します
"fields" "con:郡政令,cn2:市区町村" # PostGISでは大文字小文字を区別します
END
CLASS
# NAME "City Boundaries"
NAME "行政界"
STYLE
OUTLINECOLOR 153 153 153
END
LABEL
MINFEATURESIZE 40
TYPE TRUETYPE
FONT vl-gothic
ENCODING UTF-8
SIZE 8
END
END
TEMPLATE temp_tokyo_shp.html
END

LAYER
NAME gun_seirei
GROUP gun_seirei
TYPE ANNOTATION
STATUS ON
# DATA "../mapdata/tokyo/N03-090320_13_EC01.shp" # 削除
CONNECTIONTYPE POSTGIS # 追加
CONNECTION "dbname=tokyo host=localhost user=nob61 password=balanced" # 追加
DATA "the_geom from gyoseikai" # 追加
LABELITEM con # PostGISでは大文字小文字を区別します
METADATA
"group_title" "郡政令"
# "layer_encoding" "SJIS" # 削除
"searchfield" "con" # PostGISでは大文字小文字を区別します
"fields" "con:郡政令,cn2:市区町村" # PostGISでは大文字小文字を区別します
END
CLASS
NAME "Gun Seirei Label"
LABEL
MINFEATURESIZE 40
TYPE TRUETYPE
FONT vl-gothic
ENCODING UTF-8
SIZE 8
POSITION uc
END
END
TEMPLATE temp_tokyo_shp.html
END

END # End of Mapfile

2009年7月21日火曜日

東京(平成20年)の国土数値地図

行政界の東京のデータはN03-090320_13(平成20年)です。
ダウンロードしたファイルは解凍するとXMLファイルになります。
ksjtoolでシェイプファイルに変換してください。
変換したシェイプファイルは、名前がtokyoのフォルダに入れておくとわかりやくなります。

シェイプファイルの内容は、

user@debian:~/mapdata$ ogrinfo tokyo
INFO: Open of `tokyo'
using driver `ESRI Shapefile' successful.
1: N03-090320_13_EC01 (Polygon)
user@debian:~/mapdata$ ogrinfo -summary tokyo N03-090320_13_EC01
INFO: Open of `tokyo'
using driver `ESRI Shapefile' successful.

Layer name: N03-090320_13_EC01
Geometry: Polygon
Feature Count: 3298
Extent: (136.069482, 20.425119) - (153.986900, 35.898424)
Layer SRS WKT:
(unknown)
PRN: String (6.0)
SUN: String (1.0)
CON: String (8.0)
CN2: String (10.0)
AAC: String (5.0)


東京都ではデータが次のようになっています。
このままデータを使用します。
マップファイルもこれを使って修正します。

PRN: 都道府県
SUN: ?
CON: 郡政令、23区名と西多摩郡
CN2: 市区町村、市町村名
AAC: 行政コード

マップファイルのレイヤの例(tokyo_shp.map)

---
LAYER
NAME gyoseikai
TYPE POLYGON
STATUS ON
DATA "../mapdata/tokyo/N03-090320_13_EC01.shp"
LABELITEM CN2
METADATA
"group_title" "行政界"
"layer_encoding" "SJIS"
"queryable" "true"
"searchfield" "CN2"
"fields" "CON:郡政令,CN2:市区町村"
END
CLASS
# NAME "City Boundaries"
NAME "行政界"
STYLE
OUTLINECOLOR 153 153 153
END
LABEL
MINFEATURESIZE 40
TYPE TRUETYPE
FONT vl-gothic
ENCODING SJIS
SIZE 8
END
END
TEMPLATE temp_tokyo_shp.html
END

LAYER
NAME gun_seirei
GROUP gun_seirei
TYPE ANNOTATION
STATUS ON
DATA "../mapdata/tokyo/N03-090320_13_EC01.shp"
LABELITEM CON
METADATA
"group_title" "郡政令"
"layer_encoding" "SJIS"
"searchfield" "CON"
"fields" "CON:郡政令,CN2:市区町村"
END
CLASS
NAME "Gun Seirei Label"
LABEL
MINFEATURESIZE 40
TYPE TRUETYPE
FONT vl-gothic
ENCODING SJIS
SIZE 8
POSITION uc
END
END
TEMPLATE temp_tokyo_shp.html
END

END # End of Mapfile

2008年9月9日火曜日

OpenLayers 8c国土数値地図でWFSを試す

Eclipse を起動して examples フォルダ内の wfs.html をコピーして wfs_kanagawamlit.html ファイルを作成します。
0 wfs.htmlをダブルクリックして開きます。
1 プロジェクトビューのOpenLayersprojフォルダを右クリックして、新規->HTMLファイルをクリックします。
2 HTMLファイルウィンドウでファイル名をwfs_kanagawamlit.htmlと入力し、終了ボタンをクリックします。
3 エディタのタブをエディタビュー内の下へドラッグすると2段になってみやすくなります。
4 charsetをUTF-8にして、<title>をWFS Kanagawa mlit Mapにします。
5 wfs.html の内容ををコピーしてwfs_kanagawamlit.html ファイルに貼り付けます。
6 javascriptの一部を次のように修正します。
style.cssとOpenLayers.jsのパスを変えます。

---
<link rel="stylesheet" href="./theme/default/style.css" type="text/css" />
---
<script src="./lib/OpenLayers.js"></script>
---
<script type="text/javascript">
var map, layer, layer2;

function init(){
OpenLayers.ProxyHost="/cgi-bin/proxy.cgi?url=";
map = new OpenLayers.Map('map');
layer = new OpenLayers.Layer.WMS( "Kanagawa mlit Gyoseikai WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/user/mapfile/kanagawa_mlit_shp.map',
layers: 'gyoseikai',
format: 'image/png'
},
{
projection: 'EPSG:2451'
}
);

layer2 = new OpenLayers.Layer.WFS( "Public Facilities Kanagawa WFS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/user/mapfile/kanagawa_mlit_shp.map',
typename: "public_facilities",
maxfeatures: 10
},
{
featureClass: OpenLayers.Feature.WFS,
projection: 'EPSG:2451'
}
);
map.addLayer(layer2);
map.addLayer(layer);
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.setCenter(new OpenLayers.LonLat(139.375, 35.4), 10);
}
</script>
---

maxFeatures パラメータは features(この場合は点)の数を制限します。

featureClass: OpenLayers.Feature.WFS は、古いタイプのマーカが作成されます。
この行を削除したら新しいマーカになります。ベージュの円ベクトルです。

7 example フォルダの proxy.cgi を開いて次のように allowedHosts に
'localhost', '127.0.0.1' を追加します。

---
allowedHosts = ['www.openlayers.org', 'openlayers.org',
'labs.metacarta.com', 'world.freemap.in',
'prototype.openmnnd.org', 'geo.openplans.org',
'www.openstreetmap.org', 'localhost', '127.0.0.1' ]
---

proxy.cgi を /usr/lib/cgi-bin にコピーします。

8 Webブラウザのアドレスバーに次のように入力して Enterキーを押します。
(HTMLエディタのデフォルトタブでは表示されません。)

http://localhost/openlayers/OpenLayersproj/wfs_kanagawamlit.html







画像が表示されないときは、次のように、WMSとWFSのリクエストをしてみてください。

WMS
http://localhost/cgi-bin/mapserv?map=/home/user/mapfile/kanagawa_mlit_shp.map&request=GetMap&service=WMS&version=1.1.1&srs=EPSG:2451&format=image/png&bbox=138.91,35.12,139.84, 35.68&width=500&height=500&layers=gyoseikai

WFS
http://localhost/cgi-bin/mapserv?map=/home/user/mapfile/kanagawa_mlit_shp.map&service=WFS&version=1.0.0&request=GetCapabilities

レイヤに対するWFS
http://localhost/cgi-bin/mapserv?map=/home/user/mapfile/kanagawa_mlit_shp.map&service=WFS&version=1.0.0&request=GetFeature&typename=public_facilities

OpenLayers 8b国土数値地図でWFSを試す

情報をもとに、マップファイルを作成します。

MAP
NAME kanagawa_mlit_shp_map
STATUS ON
SIZE 600 300
EXTENT 138.91 35.12 139.84 35.68
UNITS DD
IMAGECOLOR 255 255 255
IMAGETYPE png
PROJECTION
"init=epsg:4612" #修正 OpenLayers 10 参照
END

WEB
IMAGEPATH "/home/user/ka-map/htdocs/tmp/kacache/"
IMAGEURL "/ka-map/tmp/kacache/"
METADATA
"wms_title" "Kamakura mlit Map WMS Server"
"wms_srs" "EPSG:2451 EPSG:4612" #修正 OpenLayers 10 参照
"wfs_title" "Kamakura mlit Map WFS Server"
"wfs_srs" "EPSG:2451 EPSG:4612" #修正 OpenLayers 10 参照
END
END

LEGEND
TRANSPARENT TRUE
END

SCALEBAR
TRANSPARENT TRUE
END

SYMBOL
NAME 'circle'
TYPE ELLIPSE
FILLED TRUE
POINTS
1 1
END
END

LAYER
NAME gyoseikai
GROUP gyoseikai
TYPE POLYGON
STATUS ON
DATA "../mapdata/kanagawa_mlit/N03-071001_14_EC01.shp"
LABELITEM "CN2"
METADATA
"group_title" "行政界"
"wms_title" "Kanagawa mlit Map WMS Gyoseikai Layer"
"layer_encoding" "SJIS"
"searchfield" "CN2"
"fields" "CON:郡政令,CN2:市区町村"
END
CLASS
NAME "行政界"
STYLE
OUTLINECOLOR 153 153 153
END
LABEL
MINFEATURESIZE 40
TYPE TRUETYPE
FONT vl-gothic
ENCODING SJIS
SIZE 8
END
END
TEMPLATE temp_tokyo_shp.html
END

LAYER
NAME gun_seirei
GROUP gun_seirei
TYPE ANNOTATION
STATUS ON
DATA "../mapdata/kanagawa_mlit/N03-071001_14_EC01.shp"
LABELITEM "CON"
METADATA
"group_title" "郡政令"
"layer_encoding" "SJIS"
"queryable" "true"
"searchfield" "CON"
"fields" "CON:郡政令,CN2:市区町村"
END
CLASS
NAME "郡政令"
LABEL
MINFEATURESIZE 40
TYPE TRUETYPE
FONT vl-gothic
ENCODING SJIS
SIZE 8
POSITION uc
END
END
TEMPLATE temp_tokyo_shp.html
END

LAYER
NAME railroad
GROUP railroad
TYPE line
STATUS ON
DATA "../mapdata/railroad_mlit/N02-07_EB02.shp"
LABELITEM "LIN"
METADATA
"group_title" "鉄道"
"wfs_title" "Railroad Map WFS Layer"
"layer_encoding" "SJIS"
"searchfield" "LIN"
"fields" "LIN:鉄道,OPC:会社"
END
CLASS
NAME "鉄道"
STYLE
COLOR 102 204 204
END
LABEL
MINFEATURESIZE 40
TYPE TRUETYPE
FONT vl-gothic
ENCODING SJIS
SIZE 8
POSITION uc
END
END
TEMPLATE temp_railroad.html
END

LAYER
NAME public_facilities
GROUP public_facilities
TYPE POINT
STATUS ON
DATA "../mapdata/kanagawa_mlit/P02-06_14_FB01.shp"
MAXSCALEDENOM 100000
LABELITEM "NA0"
METADATA
"group_title" "公共施設"
"wfs_title" "Public Facilities Kanagawa mlit Map WFS Layer"
"layer_encoding" "SJIS"
"searchfield" "NA0"
"fields" "NA0:公共施設,ADS:住所"
END
CLASS
NAME "公共施設"
STYLE
SYMBOL 'circle'
COLOR 102 255 102
SIZE 5
END
LABEL
MINFEATURESIZE 40
TYPE TRUETYPE
FONT vl-gothic
ENCODING SJIS
SIZE 8
POSITION uc
END
END
TEMPLATE temp_facilities.html
END

END #MAP END

shp2imgで地図を確認します。

~/mapfile$shp2img -m kanagawa_mlit_shp.map -o kanagawa_mlit_shp.png

ka-Mapのconfig.phpに次のように追加します。

---
$aszKanagawamlit1 = array (
'title' => 'Kanagawamlit1',
'path' => '/home/user/mapfile/kanagawa_mlit_shp.map',
'scales' => array( 500000, 250000, 100000, 50000, 10000 ),
'format' =>'PNG'
);

$aszMapFiles = array( /* 'gmap' => $aszGMap */
---
'kanagawamlit1' => $aszKanagawamlit1

/* Add more elements to this array to offer multiple mapfiles */

);
---

ka-Mapを表示して、kanagawamlit1を選択します。


OpenLayers 8a国土数値地図でWFSを試す

最初に、国土数値地図から神奈川県の行政区域、公共施設、鉄道のデータを準備します。

国土交通省国土計画局GISのページへようこそ
http://www.mlit.go.jp/kokudokeikaku/gis/index.html

国土数値情報ダウンロードサービス
http://nlftp.mlit.go.jp/ksj/index.html

JPGIS準拠のデータのダウンロード
http://nlftp.mlit.go.jp/ksj/jpgis/jpgis_datalist.html

行政区域をクリックします。

データはXML形式なので、シェイプファイルにするためのデータ変換ツールが必要です。
このツールはWindowsで動作するので、Windowsにダウンロードします。
また、動作にはJava 2 Runtime Environment ver. 1.4以上も必要です。

1「XMLスキーマ等について」の「データ変換ツール」をクリックします。
2 データ変換ツールのダウンロードの「変換ツールはこちらからダウンロードできます。(ksjtool_v1.5.zip 約19MB)」をクリックします。
3 ディスクに保存してください。
4 ksjtool_v1.5.zipを解凍します。
(ksjtool_manual.pdfに詳しく書いてあるので読んでください。)
5 KsjToolInstaller.exeをダブルクリックします。
6 ksjtool_manual.pdf通りにインストールと操作をしてください。


神奈川の行政区域のデータをダウンロードします。

1 ダウンロードデータの選択で神奈川のチェックボックスをクリックしてチェックします。
2 選択ボタンをクリックします。
3 データのダウンロード(3.ファイルの選択)で最新のデータのチェックボックスをクリックしてチェックします。(2008-9-7現在 平成19年度10/01)
4 選択ボタンをクリックします。
5 データのダウンロード(4.国土数値情報利用約款)の内容を読み、同意するボタンをクリックします。
6 データのダウンロード(5.ダウンロード)でダウンロードボタンをクリックします。
ダイアログボックス---ダウンロードしますか?のOKボタンをクリックします。
7 mapdataという名前のフォルダに保存してください。
8 ダウンロードしたファイルを解凍すると、N03-071001_14というフォルダが作成されます。

KS-META-N03-071001_14.xml
N03-071001_14.xml

XMLファイルをシェイプファイルに変換します。

1 kanagawa_mlitという名前のフォルダを作成します。
2 ksjtools を起動します。
3 変換元の参照ボタンを押して、N03-071001_14フォルダを指定します。
4 変換先の参照ボタンを押して、kanagawa_mlitフォルダを指定します。
5 変換ボタンを押すと、ファイルが変換されます。
6 終了したら閉じるボタンをおします。

公共施設と鉄道も同じように準備します。


kanagawa_mlit フォルダを Debian の /home/user/mapdata にコピーしてください。


次に、マップデータN03-071001_14_EC01の情報を調べます。
管理ツール gdal-bin をインストールしておきます。
mapdataフォルダへ移動しtokyoフォルダ内の利用可能なレイヤ名を表示します。

~/mapdata$ ogrinfo kanagawa_mlit
INFO: Open of `kanagawa_mlit'
using driver `ESRI Shapefile' successful.
1: N03-071001_14_EC01 (Polygon)
2: P02-06_14_FB01 (Point)

次に、N03-071001_14レイヤのデータを表示します。

~/mapdata$ ogrinfo -summary tokyo N03-071001_13
INFO: Open of `tokyo'
using driver `ESRI Shapefile' successful.

Layer name: N03-071001_14_EC01
Geometry: Polygon
Feature Count: 610
Extent: (138.915767, 35.128496) - (139.835839, 35.672897)
Layer SRS WKT:
(unknown)
PRN: String (8.0)
SUN: String (1.0)
CON: String (8.0)
CN2: String (10.0)
AAC: String (5.0)

2008年8月9日土曜日

PostGISで地図を表示 10東京都の地図 グラフ

東京都の人口をグラフで表します。

レイヤ部分を記述します。
円積図のマップファイルのうち、IMAGETYPEを修正し、SYMBOLオブジェクトを削除、totalpopレイヤを次のように修正します。

MAP
NAME tokyo_pgis_graph_map
STATUS ON
SIZE 600 300
EXTENT 138.85 35.4 140 35.975
UNITS DD
IMAGECOLOR 255 255 255
IMAGETYPE png24 #ここを修正
FONTSET "fonts.txt"
---
LAYER
NAME totalpop
GROUP totalpop
TYPE chart
STATUS ON
CONNECTIONTYPE POSTGIS
CONNECTION "dbname=tokyo host=localhost user=user password=password"
DATA "the_geom FROM (
SELECT gyoseikai.gid AS gid,
gyoseikai.gun_seirei AS gun_seirei,
gyoseikai.shikuchoso AS shikuchoso,
gyoseikai.code AS code,
gyoseikai.the_geom AS the_geom,
population.total AS total,
population.male AS male,
population.female AS female,
population.foreigner AS foreigner
FROM gyoseikai LEFT OUTER JOIN population ON gyoseikai.code = population.code)
AS gyosei_pop USING UNIQUE gid USING SRID=-1"
PROCESSING "chart_type=pie"
PROCESSING "chart_size=20"
METADATA
"group_title" "人口"
END
CLASS
NAME "男"
STYLE
SIZE [male]
COLOR 51 51 255
END
END
CLASS
NAME "女"
STYLE
SIZE [female]
COLOR 255 51 51
END
END
CLASS
NAME "外国人"
STYLE
SIZE [foreigner]
COLOR 51 255 51
END
END
END
---

画像で奥多摩町が外国人100%になっていますが、原因は分かりません。
所属未定地は人口がありません。グラフは等分割されました。




gid | gun_seirei | shikuchoso | code | total | male | female | foreigner
------+------------+------------+-------+--------+--------+--------+-----------
39 | 千代田区 | | 13101 | 48712 | 22590 | 23414 | 2708
42 | 中央区 | | 13102 | 113935 | 52248 | 57098 | 4589
59 | 港区 | | 13103 | 218410 | 91805 | 104513 | 22092
58 | 港区 | | 13103 | 218410 | 91805 | 104513 | 22092
---
1 | 西多摩郡 | 奥多摩町 | 13308 | 6574 | 3196 | 3360 | 18
---
74 | | 所属未定地 | | | | |

2008年8月8日金曜日

PostGISで地図を表示 9東京都の地図 円積図

人口を円積図で表します。人口によって円の大きさを変えて表示します。

レイヤ部分を記述します。
階級区分のマップファイルのうち、SYMBOLオブジェクトを追加し、gyoseikai2のレイヤを削除、totalpopレイヤを次のように修正します。

MAP
NAME tokyo_pgis_circle.map
---
SCALEBAR
TRANSPARENT TRUE
END

SYMBOL
NAME 'circle'
TYPE ELLIPSE
FILLED TRUE
POINTS
1 1
END
END
---
LAYER
NAME totalpop
GROUP totalpop
TYPE ANNOTATION
STATUS ON
CONNECTIONTYPE POSTGIS
CONNECTION "dbname=tokyo host=localhost user=user password=password"
DATA "the_geom FROM (
SELECT gyoseikai.gid AS gid,
gyoseikai.gun_seirei AS gun_seirei,
gyoseikai.shikuchoso AS shikuchoso,
gyoseikai.code AS code,
gyoseikai.the_geom AS the_geom,
population.total AS total,
population.male AS male,
population.female AS female,
population.foreigner AS foreigner
FROM gyoseikai LEFT OUTER JOIN population ON gyoseikai.code = population.code)
AS gyosei_pop USING UNIQUE gid USING SRID=-1"
LABELITEM "total"
CLASSITEM "total"
METADATA
"group_title" "人口"
END
CLASS
NAME "50万人以上"
EXPRESSION ([total] >= 500000)
LABEL
SIZE tiny
COLOR 255 204 204
OUTLINECOLOR 102 51 51
POSITION ul
END
STYLE
SYMBOL 'circle'
COLOR 255 0 0
SIZE 20
END
END
CLASS
NAME "40万-50万人"
EXPRESSION ([total] < 500000 AND [total] >= 400000)
LABEL
SIZE tiny
COLOR 255 204 204
OUTLINECOLOR 102 51 51
POSITION ul
END
STYLE
SYMBOL 'circle'
COLOR 255 0 0
SIZE 17
END
END
CLASS
NAME "30万-40万人"
EXPRESSION ([total] < 400000 AND [total] >= 300000)
LABEL
SIZE tiny
COLOR 255 204 204
OUTLINECOLOR 102 51 51
POSITION ul
END
STYLE
SYMBOL 'circle'
COLOR 255 0 0
SIZE 14
END
END
CLASS
NAME "20万-30万人"
EXPRESSION ([total] < 300000 AND [total] >= 200000)
LABEL
SIZE tiny
COLOR 255 204 204
OUTLINECOLOR 102 51 51
POSITION ul
END
STYLE
SYMBOL 'circle'
COLOR 255 0 0
SIZE 11
END
END
CLASS
NAME "10万-20万人"
EXPRESSION ([total] < 200000 AND [total] >= 100000)
LABEL
SIZE tiny
COLOR 255 204 204
OUTLINECOLOR 102 51 51
POSITION ul
END
STYLE
SYMBOL 'circle'
COLOR 255 0 0
SIZE 8
END
END
CLASS
NAME "10万人以下"
EXPRESSION ([total] < 100000)
LABEL
SIZE tiny
COLOR 255 204 204
OUTLINECOLOR 102 51 51
POSITION ul
END
STYLE
SYMBOL 'circle'
COLOR 255 0 0
SIZE 5
END
END
END
---




Debian lenny バージョンで、アップデートにより地図表示が出きるようになりました。

2008年8月7日木曜日

PostGISで地図を表示 8東京都のマップファイルと地図

東京都の人口を階級区分して色分けして表示します。

tokyo_shp2.mapをコピーしてtokyo_pgis_color.mapを作成します。
マップファイルのレイヤ部分を記述します。

MAP
NAME tokyo_pgis_color_map
---
LAYER
NAME gyoseikai
GROUP gyoseikai
TYPE POLYGON
STATUS ON
CONNECTIONTYPE POSTGIS
CONNECTION "dbname=tokyo host=localhost user=user password=password"
DATA "the_geom FROM (
SELECT gyoseikai.gid AS gid, #PostGISは大文字小文字を区別します
gyoseikai.gun_seirei AS gun_seirei,
gyoseikai.shikuchoso AS shikuchoso,
gyoseikai.code AS code,
gyoseikai.the_geom AS the_geom,
population.total AS total,
population.male AS male,
population.female AS female,
population.foreigner AS foreigner
FROM gyoseikai LEFT OUTER JOIN population ON gyoseikai.code = population.code)
AS gyosei_pop USING UNIQUE gid USING SRID=-1"
LABELITEM "shikuchoso"
METADATA
"group_title" "行政界"
"queryable" "true"
"searchfield" "shikuchoso"
"fields" "gun_seirei:郡政令,shikuchoso:市区町村,total:人口" #ここを修正
END
CLASS
NAME "行政界"
STYLE
OUTLINECOLOR 153 153 153
END
LABEL
MINFEATURESIZE 40
TYPE TRUETYPE
FONT vl-gothic
ENCODING UTF-8
SIZE 8
END
END
TEMPLATE temp_tokyo_pgis.html #ここを修正
END

LAYER #ダミーのレイヤ
NAME gyoseikai2
GROUP totalpop
TYPE POLYGON
STATUS ON
CONNECTIONTYPE POSTGIS
CONNECTION "dbname=tokyo host=localhost user=user password=password"
DATA "the_geom FROM (
SELECT gyoseikai.gid AS gid,
gyoseikai.gun_seirei AS gun_seirei,
gyoseikai.shikuchoso AS shikuchoso,
gyoseikai.code AS code,
gyoseikai.the_geom AS the_geom,
population.total AS total,
population.male AS male,
population.female AS female,
population.foreigner AS foreigner
FROM gyoseikai LEFT OUTER JOIN population ON gyoseikai.code = population.code)
AS gyosei_pop USING UNIQUE gid USING SRID=-1"
LABELITEM "shikuchoso"
METADATA
"group_title" "人口"
END
CLASS
NAME "行政界"
STYLE
OUTLINECOLOR 153 153 153
END
LABEL
MINFEATURESIZE 40
TYPE TRUETYPE
FONT vl-gothic
ENCODING UTF-8
SIZE 8
END
END
END

LAYER #このレイヤを追加
NAME totalpop
GROUP totalpop
TYPE POLYGON
STATUS ON
CONNECTIONTYPE POSTGIS
CONNECTION "dbname=tokyo host=localhost user=user password=password"
DATA "the_geom FROM (
SELECT gyoseikai.gid AS gid,
gyoseikai.gun_seirei AS gun_seirei,
gyoseikai.shikuchoso AS shikuchoso,
gyoseikai.code AS code,
gyoseikai.the_geom AS the_geom,
population.total AS total,
population.male AS male,
population.female AS female,
population.foreigner AS foreigner
FROM gyoseikai LEFT OUTER JOIN population ON gyoseikai.code = population.code)
AS gyosei_pop USING UNIQUE gid USING SRID=-1"
OPACITY 50
CLASSITEM "total"
METADATA
"group_title" "人口"
END
CLASS
NAME "50万人以上"
EXPRESSION ([total] >= 500000)
COLOR 255 0 0
END
CLASS
NAME "40万-50万人"
EXPRESSION ([total] < 500000 AND [total] >= 400000)
COLOR 255 51 51
END
CLASS
NAME "30万-40万人"
EXPRESSION ([total] < 400000 AND [total] >= 300000)
COLOR 255 102 102
END
CLASS
NAME "20万-30万人"
EXPRESSION ([total] < 300000 AND [total] >= 200000)
COLOR 255 153 153
END
CLASS
NAME "10万人-20万人"
EXPRESSION ([total] < 200000 AND [total] >= 100000)
COLOR 255 204 204
END
END

LAYER
NAME gun_seirei
GROUP gun_seirei
TYPE ANNOTATION
STATUS ON
CONNECTIONTYPE POSTGIS
CONNECTION "dbname=tokyo host=localhost user=user password=password"
DATA "the_geom FROM (
SELECT gyoseikai.gid AS gid,
gyoseikai.gun_seirei AS gun_seirei,
gyoseikai.shikuchoso AS shikuchoso,
gyoseikai.code AS code,
gyoseikai.the_geom AS the_geom,
population.total AS total,
population.male AS male,
population.female AS female,
population.foreigner AS foreigner
FROM gyoseikai LEFT OUTER JOIN population ON gyoseikai.code = population.code)
AS gyosei_pop USING UNIQUE gid USING SRID=-1"
LABELITEM "gun_seirei"
METADATA
"group_title" "郡政令"
"searchfield" "gun_seirei"
"fields" "gun_seirei:郡政令,shikuchoso:市区町村,total:人口"
END
CLASS
NAME "郡政令"
LABEL
MINFEATURESIZE 40
TYPE TRUETYPE
FONT vl-gothic
ENCODING UTF-8
SIZE 8
POSITION uc
END
END
TEMPLATE temp_tokyo_pgis.html #ここを修正
END

END #MAP END

temp_tokyo_pgis.htmlを作成します。
temp_tokyo_shp.htmlをコピーしてファイル名を変えます。
内容を次のように修正します。

<html>
<head>
<title>Tokyo pgis Template</title> #ここを修正
</head>
<body>
<li>[gun_seirei]
<li>[shikuchoso]
<li>[total] #ここを追加
</body>
</html>

config.phpの内容をつぎのように修正します。

$aszTokyo = array (
'title' => 'Tokyo',
'path' => '/home/nob61/mapfile/tokyo_pgis_color.map',
'scales' => array( 500000, 250000, 100000 ),
'format' =>'PNG'
);


2008年8月2日土曜日

PostGISで地図を表示 7東京都の人口テーブルの作成

データベースtokyoに次のようにテーブルを作成します。

Eclipseの場合
データベース構造(Database Structure) ウィンドウの

public -> テーブル(table) -> gyoseikai

をクリックを右クリックし、 Create Table スクリプト をクリックします。
SQL エディタ を次のように修正して実行します。

CREATE TABLE "public"."population"(
code serial4,
shikuchoso varchar(14),
total int4,
male int4,
female int4,
foreigner int4);

データベース構造(Database Structure) ウィンドウのテーブル(table)を右クリックし、更新 をクリックすると population テーブルが表示されます。

*コマンドで population テーブルを作成

user@debian:~$ psql tokyo
Welcome to psql 8.1.11, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

tokyo=> CREATE TABLE population (
tokyo(> code varchar(5),
tokyo(> shikuchoso varchar(14),
tokyo(> total int4,
tokyo(> male int4,
tokyo(> female int4,
tokyo(> foreigner int4);
NOTICE: CREATE TABLE will create implicit sequence "population_code_seq" for serial column "population.code"
CREATE TABLE
tokyo=> \q

tokyo_population.csv の内容を population テーブルに追加します。
スーパユーザー(postgres)で

postgres@debian:~$ psql tokyo
Welcome to psql 8.1.11, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

tokyo=# COPY population FROM '/home/user/mapdata/tokyo/tokyo_population.csv' CSV;
COPY
tokyo=# \q

tokyo_pgis.mapの DATA の部分を次のように修正します。

DATA "the_geom FROM (
SELECT gyoseikai.gid AS gid,
gyoseikai.gun_seirei AS gun_seirei,
gyoseikai.shikuchoso AS shikuchoso,
gyoseikai.code AS code,
gyoseikai.the_geom AS the_geom,
population.total AS total,
population.male AS male,
population.female AS female,
population.foreigner AS foreigner
FROM gyoseikai LEFT OUTER JOIN population ON gyoseikai.code = population.code
)
AS gyosei_pop USING UNIQUE gid USING SRID=-1"

2008年7月31日木曜日

PostGISで地図を表示 6東京都の人口データの準備

東京都の人口のデータの準備をします。

東京都総務局ホームページ
http://www.soumu.metro.tokyo.jp/index.htm

東京都の統計
http://www.toukei.metro.tokyo.jp/index.htm

住民基本台帳による世帯と人口
http://www.toukei.metro.tokyo.jp/juukim/jm-index.htm

で最新の統計データをダウンロードします。
私は、平成20年6月のデータをダウンロードしました。
データは人が見やすいように作成されています。
これを人口総数(A+B)、男、女、外国人登録人口に行政コードを追加した単純な表にします。

例えば、
0 OpenOffice.org Calc でダウンロードしたファイルを開く
1 列のタイトルは1行にする
2 市区町村の行以外を削除する(空行や合計行など)
3 市区町村名、人口総数(A+B)、男、女、外国人登録人口以外の列を削除する
4 セルの中のスペースをすべて削除する
5 行政コードを追加する (行政コード、市区町村名、人口総数(A+B)、男、女、外国人登録人口の順にしました。)
6 タイトル行を削除する
7 CSVファイルとして出力

行政コードは、インターネットで探すか、次のようにマップデータから作成します。

Eclipseを起動して tokyo データベースに接続します。
データベース構造(Database Structure) ウィンドウの

public -> テーブル(table) -> gyoseikai

をクリックを右クリックし、 Selectステートメントの生成 をクリックします。
SQLエディタ に次のように入力して実行します。

select distinct code, gun_seirei, shikuchoso from "public"."gyoseikai"

表示された結果を右クリックして、 エクスポート->export to .csv をクリックします。
include column header をチェックし、宛先 ボタンをクリックして保存先とファイル名を指定し、OK ボタンをクリックします。

csvファイルを開き code (行政コード)をコピーし、加工した人口データに貼り付けます。
(どちらも行政コード順になっているのでそのまま貼り付けられます。)


*コマンドでCSVファイルに出力

user@debian:~$ psql -F ',' -A -t -c 'SELECT DISTINCT code, gun_seirei, shikuchoso from gyoseikai' tokyo > gyosei_code.csv

参考

user@debian:~$ psql tokyo
Welcome to psql 8.1.11, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

tokyo=> \o gyosei_code.txt
tokyo=> SELECT DISTINCT code, gun_seirei, shikuchoso from gyoseikai;
tokyo=> \!less gyosei_code.txt
tokyo=> \o
tokyo=> \q

バージョン8.3なら次も可能

tokyo=> \COPY (SELECT DISTINCT code, gun_seirei, shikuchoso from gyoseikai) TO 'code2.csv' WITH DELIMITER ','

続く…