ラベル Feature Info の投稿を表示しています。 すべての投稿を表示
ラベル Feature Info の投稿を表示しています。 すべての投稿を表示

2008年9月13日土曜日

OpenLayers 9cFeature Info 地図の表示

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


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>OpenLayers Feature Info Kanagawa mlit Example</title>
<script src="./lib/OpenLayers.js"></script>
<link rel="stylesheet" href="./theme/default/style.css" type="text/css" />
<style type="text/css">
ul, li { padding-left: 0px; margin-left: 0px; }

</style>
</head>
<body>
<h1 id="title">Feature Info Kanagawa mlit Map</h1>

<div id="tags"></div>

<p id="shortdesc">
Demonstrates sending a GetFeatureInfo query to an OWS. Returns information about a map feature in the side DIV.
</p>

<a id="permalink" href="">Permalink</a><br />

<!-- 結果表示欄 -->
<div style="float:right;width:28%">
<h1 style="font-size:1.3em;">Kanagawa Public Facilities</h1>
<p style="font-size:.8em;">Click a country to see statistics about the country below.</p>
<div id="nodeList"></div>
</div>
<div id="map" style="width:512px; height:512px"></div>

<!--地図表示 -->
<script defer="defer" type="text/javascript">
OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";
var map = new OpenLayers.Map('map' /*, {'maxResolution':'auto'}*/);

//行政界(郡市区町村界)レイヤ
var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/user/mapfile/kanagawa_mlit_pgis.map',
layers: 'gyoseikai',
format: 'image/png'
},
{
projection: 'EPSG:2451'
}
);
map.addLayer(layer);

//公共施設レイヤ
var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/user/mapfile/kanagawa_mlit_pgis.map',
layers: 'public_facilities',
transparent: true,
format: 'image/png'
},
{
projection: 'EPSG:2451'
}
);
map.addLayer(wms);
map.setCenter(new OpenLayers.LonLat(139.375, 35.4), 10);
map.addControl(new OpenLayers.Control.Permalink('permalink'));

map.events.register('click', map, function (e) {
OpenLayers.Util.getElement('nodeList').innerHTML = "Loading... please wait...";
var url = wms.getFullRequestString({
REQUEST: "GetFeatureInfo",
EXCEPTIONS: "application/vnd.ogc.se_xml",
BBOX: wms.map.getExtent().toBBOX(),
X: e.xy.x,
Y: e.xy.y,
INFO_FORMAT: 'text/html',
QUERY_LAYERS: wms.params.LAYERS,
WIDTH: wms.map.size.w,
HEIGHT: wms.map.size.h});
OpenLayers.loadURL(url, '', this, setHTML);
OpenLayers.Event.stop(e);
});
function setHTML(response) {
OpenLayers.Util.getElement('nodeList').innerHTML = response.responseText;
}
</script>

<div id="docs"></div>
</body>
</html>


クリックでイベントが発生したときに、その時の地図の範囲、クリックした位置、マップサーバーからの情報のフォーマット、レイヤのパラメータ(属性)、地図の縦横の長さを受け取ります。
このデータから該当するパラメータが表示されます。

OpenLayers 9bFeature Info マップファイル

kanagawa_mlit_shp.map をコピーして修正します。

user@debian:~/mapfile$ cp kanagawa_mlit_shp.map kanagawa_mlit_pgis.map

WEB オブジェクトの METADATA に次のように追加します。

---
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 参照
"wms_onlineresource" "http://localhost/cgi-bin/mapserv?map=/home/user/mapfile/kanagawa_mlit_pgis.map"
"wms_encoding" "utf-8"
"wms_feature_info_mime_type" "text/html"
"wfs_title" "Kamakura mlit Map WFS Server"
"wfs_srs" "EPSG:2451 EPSG:4612" #修正 OpenLayers 10 参照
END
END
---

wms_title WMSサーバに必須です。人が理解できる名前をつけます。(レイヤにも必要です。)
wms_srs (推奨)WMSサーバのすべてのレイヤに有効なものとして通知されるEPSGプロジェクションコードが入ります。EPSGはスペースで区切って複数設定できます。大文字で記述します。
wms_onlinesource (推奨)WMSサーバーにアクセスするために使用されるURLです。 GetCapabilitiesで使用します。
wms_encoding (オプション)XMLのエンコーディングタイプ。
wms_feature_info_mime GetFeatureリクエストに応答するときに使用される追加MIMEタイプを設定するために使用されます。
応答の基本にレイヤのHTMLテンプレートを使用するなら、 "wms_feature_info_mime_type" "text/html" と追加します。これを設定すると、GetFeatureリクエストをサポートするMIMEタイプの一つとして、text/htmlを通知する効果があります。レイヤが有効なhtmlテンプレートを示すことを確認してください。クライアントは、INFO_FORMAT=text/htmlとサーバに要求します。
デフォルトは、text/plainとGML implemented。
返されるGMLのために、WMSサーバのマップファイルのレイヤには DUMP TRUE を設定します。

public_facilities LAYER オブジェクトの METADATA に次のように追加します。

---
METADATA
"group_title" "公共施設"
"wms_title" "Public Facilities Kanagawa mlit WMS Layer"
"wfs_title" "Public Facilities Kanagawa mlit WFS Layer"
"gml_include_items" "all"
"gml_exclude_items" ""
"searchfield" "na0"
"fields" "na0:公共施設,ads:住所"
END
---

gml_include_items (オプション getfeatureinfo gml リクエストのみ適用されます)include(含める)のためのカンマで区切られた項目のリストか、またはキーワードの "all" です。 mapserver 4.6から、メタデータを設定したレイヤのデータの属性(フィールド)の公開する数を制御することができます。それ以前のバージョンの動作は、単純にすべての属性をいつでも公開していました。
全公開を、キーワード "all" を使って次のように有効にできます。
"gml_include_items" "all"
一部公開のための属性(フィールド)リストを次のように設定できます。
"gml_include_items" "Name,ID"
デフォルトは属性をすべて非公開になっています。
gml_exclude_items
特定フィールドの除外の例は次のようになります。
"gml_include_items" "all"
"gml_exclude_items" "Phonenum"

WMS Server with MapServerより
http://mapserver.gis.umn.edu/docs/howto/wms_server

各レイヤの MINSCALE と MAXSCALE は OpenLayers で地図が表示されなくなるのでコメントアウトとしました。
# MINSCALE 1000
# MAXSCALE 1000000000

temp_facilities.html をコピーしてファイル名を temp_facilities_pgis.htmlにし、次のように大文字を小文字に修正します。
---
<li>公共施設:[na0]
<li>住所:[ads]
---

MAP
NAME kanagawa_mlit_pgis_map
STATUS ON
SIZE 600 300
EXTENT 138.91 35.12 139.84 35.68
UNITS DD
IMAGECOLOR 255 255 255
IMAGETYPE png
FONTSET "fonts.txt"
PROJECTION
"init=epsg:2451"
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 参照
"wms_onlineresource" "http://localhost/cgi-bin/mapserv?map=/home/user/mapfile/kanagawa_mlit_pgis.map"
"wms_encoding" "utf-8"
"wms_feature_info_mime_type" "text/html"
"wfs_title" "Kamakura mlit Map WFS Server"
"wfs_srs" "EPSG:2451 EPSG:4612" #修正 OpenLayers 10 参照
END
END

LEGEND
TRANSPARENT TRUE
LABEL
TYPE TRUETYPE
FONT vl-gothic
COLOR 0 0 0
ENCODING UTF-8
SIZE 10
OFFSET 0 -4
END
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
DUMP TRUE
CONNECTIONTYPE POSTGIS
CONNECTION "dbname=kanagawa_mlit host=localhost user=user password=password"
DATA "the_geom from gyoseikai"
# MINSCALE 1000 OpenLayers にコメントアウトが必要
# MAXSCALE 1000000000 同上
LABELITEM "cn2"
METADATA
"group_title" "行政界"
"wms_title" "Kanagawa mlit Map WMS Gyoseikai Layer"
"searchfield" "cn2"
"fields" "con:郡政令,cn2:市区町村"
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_shp.html
END

LAYER
NAME gun_seirei
GROUP gun_seirei
TYPE ANNOTATION
STATUS ON
CONNECTIONTYPE POSTGIS
CONNECTION "dbname=kanagawa_mlit host=localhost user=user password=password"
DATA "the_geom from gyoseikai"
LABELITEM "con"
METADATA
"group_title" "郡政令"
"queryable" "true"
"searchfield" "con"
"fields" "con:郡政令,cn2:市区町村"
END
CLASS
NAME "郡政令"
LABEL
MINFEATURESIZE 40
TYPE TRUETYPE
FONT vl-gothic
ENCODING UTF-8
SIZE 8
POSITION uc
END
END
TEMPLATE temp_tokyo_shp.html
END

LAYER
NAME railroad
GROUP railroad
TYPE line
STATUS ON
DUMP TRUE
CONNECTIONTYPE POSTGIS
CONNECTION "dbname=kanagawa_mlit host=localhost user=user password=password"
DATA "the_geom from railroad1"
LABELITEM "lin"
METADATA
"group_title" "鉄道"
"wms_title" "Railroad Map WMS Layer"
"wfs_title" "Railroad Map WFS Layer"
"searchfield" "lin"
"fields" "lin:鉄道,opc:会社"
END
CLASS
NAME "鉄道"
STYLE
COLOR 102 204 204
END
LABEL
MINFEATURESIZE 40
TYPE TRUETYPE
FONT vl-gothic
ENCODING UTF-8
SIZE 8
POSITION uc
END
END
TEMPLATE temp_railroad.html
END

LAYER
NAME public_facilities
GROUP public_facilities
TYPE POINT
STATUS ON
DUMP TRUE
CONNECTIONTYPE POSTGIS
CONNECTION "dbname=kanagawa_mlit host=localhost user=user password=password"
DATA "the_geom from publicfacilities"
MAXSCALEDENOM 100000
LABELITEM "na0"
METADATA
"group_title" "公共施設"
"wms_title" "Public Facilities Kanagawa mlit WMS Layer"
"wfs_title" "Public Facilities Kanagawa mlit WFS Layer"
"gml_include_items" "all"
"gml_exclude_items" ""
"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 UTF-8
SIZE 8
POSITION uc
END
END
TEMPLATE temp_facilities_pgis.html
END

END #MAP END


temp_facilities_pgis.html
<html>
<head>
<title>Public Facilities Template</title>
</head>
<body>
<li>公共施設:[na0]
<li>住所:[ads]
</body>
</html>

OpenLayers 9aFeature Info データの準備

OpenLayers9 Feature Info

地図属性(Map Feature)の情報を指定した場所に表示します。

シェイプファイルをデータベースに登録します。

template_postgisをテンプレートとして、オーナーがuserでkanagawaというデータベースを作成します。

postgres@debian:~$ createdb -T template_postgis -O user kanagawa_mlit
postgres@debian:~$ psql -l
List of databases
Name | Owner | Encoding
------------------+----------+----------
kamakura | user | UTF8
kanagawa | user | UTF8
kanagawa_mlit | user | UTF8
postgres | postgres | UTF8
template0 | postgres | UTF8
template1 | postgres | UTF8
template_postgis | postgres | UTF8
tokyo | user | UTF8
(8 rows)

kanagawa_mlitデータベースのgeometry_columnテーブルとspatial_ref_sysテーブルのオーナーをuserに変更します。

postgres@debian:~$ psql kanagawa_mlit
Welcome to psql 8.3.3, 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

kanagawa_mlit=# \d
List of relations
Schema | Name | Type | Owner
--------+------------------+-------+----------
public | geometry_columns | table | postgres
public | spatial_ref_sys | table | postgres
(2 rows)

kanagawa_mlit=# ALTER TABLE geometry_columns OWNER TO user;
ALTER TABLE
kanagawa_mlit=# ALTER TABLE spatial_ref_sys OWNER TO user;
ALTER TABLE
kanagawa_mlit=# \d
List of relations
Schema | Name | Type | Owner
--------+------------------+-------+-------
public | geometry_columns | table | user
public | spatial_ref_sys | table | user
(2 rows)

kanagawa_mlit=# \q

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

postgres@debian:~$ exit
logout
user@debian:~$ cd mapdata/kanagawa_mlit/
user@debian:~/mapdata/kanagawa_mlit$ ls
N03-071001_14_EC01.dbf P02-06_14_FB01.dbf facilities_kanagawa.zip
N03-071001_14_EC01.shp P02-06_14_FB01.shp
N03-071001_14_EC01.shx P02-06_14_FB01.shx
user@debian:~/mapdata/kanagawa_mlit$ shp2pgsql -W sjis N03-071001_14_EC01.shp gyoseikai > gyoseikai.sql
Shapefile type: Polygon
Postgis type: MULTIPOLYGON[2]
user@debian:~/mapdata/kanagawa_mlit$ shp2pgsql -W sjis P02-06_14_FB01.shp publicfacilities > publicfacilities.sql
Shapefile type: Point
Postgis type: POINT[2]

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

user@debian:~/mapdata/kanagawa_mlit$ ls
N03-071001_14_EC01.dbf P02-06_14_FB01.dbf facilities_kanagawa.zip
N03-071001_14_EC01.shp P02-06_14_FB01.shp gyoseikai.sql
N03-071001_14_EC01.shx P02-06_14_FB01.shx publicfacilities.sql
user@debian:~/mapdata/kanagawa_mlit$ psql -d kanagawa_mlit -f gyoseikai.sql > log.txt
psql:gyoseikai.sql:8: NOTICE: CREATE TABLE will create implicit sequence "gyoseikai_gid_seq" for serial column "gyoseikai.gid"
psql:gyoseikai.sql:8: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "gyoseikai_pkey" for table "gyoseikai"
user@debian:~/mapdata/kanagawa_mlit$ vim log.txt
SET
BEGIN
CREATE TABLE
addgeometrycolumn
------------------------------------------------------------
public.gyoseikai.the_geom SRID:-1 TYPE:MULTIPOLYGON DIMS:2


(1 row)

INSERT 0 1
---
COMMIT

user@debian:~/mapdata/kanagawa_mlit$ psql kanagawa_mlitWelcome to psql 8.3.3, 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

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

kanagawa_mlit=> \d gyoseikai
Table "public.gyoseikai"
Column | Type | Modifiers
----------+-----------------------+---------------------------------------------------------
gid | integer | not null default nextval('gyoseikai_gid_seq'::regclass)
prn | character varying(8) |
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))

kanagawa_mlit=> \q


残りのシェイプファイルも登録します。

user@debian:~/mapdata/kanagawa_mlit$ psql -d kanagawa_mlit -f publicfacilities.sql > log2.txt
psql:publicfacilities.sql:17: NOTICE: CREATE TABLE will create implicit sequence "publicfacilities_gid_seq" for serial column "publicfacilities.gid"
psql:publicfacilities.sql:17: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "publicfacilities_pkey" for table "publicfacilities"

user@debian:~$ cd mapdata/railroad_mlit/
user@debian:~/mapdata/railroad_mlit$ ls
N02-07_EB02.dbf N02-07_EB02.shx N02-07_EB03.shp
N02-07_EB02.shp N02-07_EB03.dbf N02-07_EB03.shx
user@debian:~/mapdata/railroad_mlit$ shp2pgsql -W sjis N02-07_EB02.shp railroad1 > railroad1.sql
Shapefile type: Arc
Postgis type: MULTILINESTRING[2]
user@debian:~/mapdata/railroad_mlit$ shp2pgsql -W sjis N02-07_EB03.shp railroad2 > railroad2.sql
Shapefile type: Arc
Postgis type: MULTILINESTRING[2]
user@debian:~/mapdata/railroad_mlit$ ls
N02-07_EB02.dbf N02-07_EB02.shx N02-07_EB03.shp railroad1.sql
N02-07_EB02.shp N02-07_EB03.dbf N02-07_EB03.shx railroad2.sql
user@debian:~/mapdata/railroad_mlit$ psql -d kanagawa_mlit -f railroad1.sql > log1.txt
psql:railroad1.sql:7: NOTICE: CREATE TABLE will create implicit sequence "railroad1_gid_seq" for serial column "railroad1.gid"
psql:railroad1.sql:7: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "railroad1_pkey" for table "railroad1"
user@debian:~/mapdata/railroad_mlit$ psql -d kanagawa_mlit -f railroad2.sql > log2.txt
psql:railroad2.sql:8: NOTICE: CREATE TABLE will create implicit sequence "railroad2_gid_seq" for serial column "railroad2.gid"
psql:railroad2.sql:8: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "railroad2_pkey" for table "railroad2"