vector-wfs.js で、自分の GeoServer から WFS のデータを次のようにリクエストします。
var url = 'http://localhost:8080/geoserver/wfs?service=WFS&' + 'version=1.1.0&request=GetFeature&typename=npn:akiruno_suiiki&' + 'outputFormat=text/javascript&format_options=callback:loadFeatures' + '&srsname=EPSG:2451&bbox=' + extent.join(',') + ',EPSG:2451';
Geoserver に WFS をリクエストするとき、オプションを 「outputFormat=text/javascript」とすると、JSON形式で取得できます。
vector レイヤは表示されませんでした。
Firebug を起動して再表示すると、次のように表示されました。
データが、XML(GML)で送信されています。
Google で検索すると、「Geographic Information Systems Stack Exchange」の「GeoServer 2.3 how to enable jsonp(http://gis.stackexchange.com/questions/57494/geoserver-2-3-how-to-enable-jsonp)」に、
---
Add to this file: /tomcat/webapps/geoserver/WEB-INF/web.xml
<context-param> <param-name>ENABLE_JSONP</param-name> <param-value>true</param-value> </context-param>---
とあります。自分のサーバでは、
user@debian7-vmw:~$ su
パスワード:
root@debian7-vmw:/home/user# vim /etc/tomcat7/web.xml
--- <context-param> <param-name>ENABLE_JSONP</param-name> <param-value>true</param-value> </context-param> </web-app> :wq
と、ファイルに追加し、tomcat7 を再起動します。
root@debian7-vmw:/home/user# /etc/init.d/tomcat7 restart
[ ok ] Stopping Tomcat servlet engine: tomcat7.
[ ok ] Starting Tomcat servlet engine: tomcat7.
Firebug に何も表示されませんが、地図にも表示されません。
Webブラウザのアドレスバーに次のように入力します。
http://localhost:8080/geoserver/wfs?service=WFS&version=1.1.0&request=GetFeature&typename=npn:akiruno_suiiki&outputFormat=text/javascript&format_options=callback:loadFeatures&srsname=EPSG:2451
loadFeatures({ "type":"FeatureCollection", "features":[{ "type":"Feature", "id":"akiruno_suiiki.1", "geometry":{ "type":"MultiPolygon", "coordinates":[[[[-45875.83465282351,-29805.840956966127], --- [-45875.83465282351,-29805.840956966127]]]]}, "geometry_name":"the_geom", "properties":{ "id":"K12_1", "uuid":"fgoid:10-00200-11-6554-5598", "presences":2.0120305E7, "presencef":2.9991231E7, "finished":2.0120305E7, "orggilvl":"2500", "orgmdid":null, "category":"表示", "flag":"既存", "type":"湖池", "name":null}}, ---
このままでは変換が必要ですが、「srsname=EPSG:3857」にすると座標が EPSG:3857 になります。
http://localhost:8080/geoserver/wfs?service=WFS&version=1.1.0&request=GetFeature&typename=npn:akiruno_suiiki&outputFormat=text/javascript&format_options=callback:loadFeatures&srsname=EPSG:3857
loadFeatures({ "type":"FeatureCollection", "features":[{"type":"Feature", "id":"akiruno_suiiki.1", "geometry":{ "type":"MultiPolygon", "coordinates":[[[[1.5509721608105533E7,4263571.24847886], --- [1.5509721608105533E7,4263571.24847886]]]]}, "geometry_name":"the_geom", "properties":{ "id":"K12_1", "uuid":"fgoid:10-00200-11-6554-5598", "presences":2.0120305E7, "presencef":2.9991231E7, "finished":2.0120305E7, "orggilvl":"2500", "orgmdid":null, "category":"表示", "flag":"既存", "type":"湖池", "name":null}}, ---
「url」を次のようにすると地図が表示されました。
var url = 'http://localhost:8080/geoserver/wfs?service=WFS&' + 'version=1.1.0&request=GetFeature&typename=npn:akiruno_suiiki&' + 'outputFormat=text/javascript&format_options=callback:loadFeatures' + '&srsname=EPSG:3857&bbox=' + extent.join(',') + ',EPSG:3857';
「vector-wfs.js(221-ol3ex.js)」は、地図を表示するのに必要な javascript です。
「221-ol3ex.js」
var vectorSource = new ol.source.ServerVector({ /** ol.source.ServerVector * A vector source in one of the supported formats, using * a custom function to read in the data from a remote * server. * サポートされている形式の一つのベクトルソースは、 * カスタム関数を使用してリモートサーバからデータを読み取ります。 * (ol3 APL) */
format: new ol.format.GeoJSON(), /** ol.format.GeoJSON * Feature format for reading and writing data * in the GeoJSON format. * GeoJSON フォーマットのデータを読み書きするための * フィーチャフォーマット。(ol3 API) */ loader: function(extent, resolution, projection) {
/**var url = 'http://demo.opengeo.org/geoserver/wfs?service=WFS&' + * 'version=1.1.0&request=GetFeature&typename=osm:water_areas&' + * 'outputFormat=text/javascript&format_options=callback:loadFeatures' + * '&srsname=EPSG:3857&bbox=' + extent.join(',') + ',EPSG:3857'; */
var url = 'http://localhost:8080/geoserver/wfs?service=WFS&' + 'version=1.1.0&request=GetFeature&typename=npn:akiruno_suiiki&' + 'outputFormat=text/javascript&format_options=callback:loadFeatures' + '&srsname=EPSG:3857&bbox=' + extent.join(',') + ',EPSG:3857'; // outputFormat=text/javascript: JSONP 形式で返信
$.ajax({ /** $.ajax( [url] [, settings] ) * 非同期HTTP通信(Ajax)を行い、データの取得・処理を行います。 * [url] String リクエスト送信先のURL * [settings] Object Ajaxリクエストでのオプションを記述したオ * ブジェクト(jQuery) */
url: url,
dataType: 'jsonp' /** JSONP (JSON with Padding) * さまざまなドメインから、JSON データを持った JavaScript を * 動的に挿入することができます。 */ }); },
strategy: ol.loadingstrategy.createTile(new ol.tilegrid.XYZ({ /** ol.loadingstrategy * Strategies for loading vector data. * ベクタデータをローディングするための方法。 * createTile * ol.loadingstrategy のメソッド * (ol3 API) */
/** ol.tilegrid.XYZ * Set the grid pattern for sources accessing XYZ * tiled-image servers. * XYZタイル画像サーバにアクセスするソースのグリッドパターンを * 設定します。 * (ol3 API) */
maxZoom: 19 })),
projection: 'EPSG:3857', attributions: [new ol.Attribution({ /** ol.Attribution * An attribution for a layer source. * レイヤソースの属性(ol3 API) */
html: '<a href="http://portal.cyberjapan.jp/help/termsofuse.html" target="_blank">' + '国土地理院</a> 基盤地図情報' })], });
var loadFeatures = function(response) { vectorSource.addFeatures(vectorSource.readFeatures(response)); /** addFeatures * ol.source.GeoJSON (Static vector source in GeoJSON * format[GeoJSONフォーマットの静的ベクトルソース])のメソッド */
/** readFeatures * ol.format.GeoJSON (Feature format for reading and * writing data in the GeoJSON format. [GeoJSONフォーマットで * データを読み書きするための機能の形式。])のメソッド * Read all features from a GeoJSON source. * GeoJSONソースからすべてのフィーチャをお読み込む。 * Works with both Feature and FeatureCollection sources. * フィーチャおよびフィーチャコレクションソースの両方で動作。 * (ol3 API) */ };
var vector = new ol.layer.Vector({ /** ol.layer.Vector * Vector data that is rendered client-side. Note that any * property set in the options is set as a ol.Object property * on the layer object; for example, setting title: 'My * Title' in the options means that title is observable, and * has get/set accessors. * クライアント側で描画されたベクタデータ。オプションで設定した任 * 意のプロパティは、レイヤオブジェクトで ol.Object プロパティ * として設定されていることに注意してください。たとえば、オプショ * ンで、title:'My Title' を設定することは、タイトルは * observable で、アクセサを取得/設定することを意味します。 * (ol3 API) */ source: vectorSource, style: new ol.style.Style({ /** ol.style.Style * Base class for vector feature rendering styles. * ベクタフィーチャがスタイルを描画するための基本クラス。 * (ol3 API) */ stroke: new ol.style.Stroke({ /** ol.style.Stroke * Set stroke style for vector features. * Note that the defaults given are the Canvas defaults, * which will be used if option is not defined. * The get functions return whatever was entered in the * options; they will not return the default. * ベクタフィーチャのためのストロークスタイルの設定。 * デフォルトは、オプションが定義されていない場合に使用され * る Canvas のデフォルトを与えられることに注意してください。 * GET関数は、オプションで入力されたものはすべて返します。 * それらはデフォルトを返しません。(ol3 API) */ color: 'rgba(0, 0, 255, 1.0)', width: 2 }) }) });
var raster = new ol.layer.Tile({ /** ol.layer.Tile * For layer sources that provide pre-rendered, tiled * images in grids that are organized by zoom levels for * specific resolutions. * プリレンダリング(事前描画)を提供するレイヤソースのための、 * 特定の解像度でのズームレベルによって編成されているグリッドの * タイルイメージ。(ol3 API) */ source: new ol.source.BingMaps({ /** ol.source.BingMaps * Layer source for Bing Maps tile data. * Bing Maps タイルデータのレイヤソース。(ol3 API) */ imagerySet: 'Aerial', key: 'Ak-dzM4***' // 省略してます }) });
var map = new ol.Map({ layers: [raster, vector], target: document.getElementById('map'), view: new ol.View({ //center: [-8908887.277395891, 5381918.072437216] center: [15499413.571008531, 4264076.282950245], maxZoom: 19, zoom: 12 }) });
0 件のコメント:
コメントを投稿