表示可能なマップ範囲内のデータのみを要求するリクエストをフィーチャ サーバーに送信したいと考えています。そのため、次のコードのように BBOX 戦略と HTTP プロトコルを使用しました。
mVectorLayer = new OpenLayers.Layer.Vector("Overlay", {
strategies: [new OpenLayers.Strategy.BBOX()],
protocol: new OpenLayers.Protocol.HTTP({
url: 'http://localhost:56786/jlist.geojson',
format: new OpenLayers.Format.GeoJSON({
'read': myReadFunction,
'internalProjection': map.baseLayer.projection,
'externalProjection': new OpenLayers.Projection("EPSG:4326")
})
}),
projection: new OpenLayers.Projection("EPSG:900913")
});
以下に示す geojson ファイルに、表示可能なマップの外側にフィーチャを追加しました。
{ "type": "FeatureCollection",
"features": [
{ "type": "Feature",
"geometry": {"type": "Point", "coordinates": [29.0, 41.060]},
"properties": {"name": "IST J1", "img": "img/marker.png"}
},
{ "type": "Feature",
"geometry": {"type": "Point", "coordinates": [29.0, 41.100]},
"properties": {"name": "IST J2", "img": "img/marker.png"}
},
{ "type": "Feature",
"geometry": {"type": "Point", "coordinates": [59.0, 41.100]},
"properties": {"name": "IST J3", "img": "img/marker.png"}
}
]
}
検証するために、json 文字列を表示する関数 myReadFunction にアラートを追加しました。ただし、アラートには geojson ファイル内のすべての機能が表示されます。私たちの機能サーバーは、表示可能な機能ではなく、すべての geojson コンテンツを送信すると思いますか? BBOX 戦略がうまく機能するかどうかを検証または観察するにはどうすればよいですか?
function myReadFunction(json, type, filter) {
alert("json: " + json);
type = (type) ? type : "FeatureCollection";
var results = null;
var obj = null;
if (typeof json == "string") {
obj = OpenLayers.Format.JSON.prototype.read.apply(this, [json, filter]);
} else {
obj = json;
}
if (!obj) {
OpenLayers.Console.error("Bad JSON: " + json);
} else if (typeof (obj.type) != "string") {
OpenLayers.Console.error("Bad GeoJSON - no type: " + json);
} else if (this.isValidType(obj, type)) {
switch (type) {
case "Geometry":
try {
results = this.parseGeometry(obj);
} catch (err) {
OpenLayers.Console.error(err);
}
break;
case "Feature":
try {
results = this.parseFeature(obj);
results.type = "Feature";
} catch (err) {
OpenLayers.Console.error(err);
}
break;
case "FeatureCollection":
// for type FeatureCollection, we allow input to be any type
results = [];
switch (obj.type) {
case "Feature":
try {
results.push(this.parseFeature(obj));
} catch (err) {
results = null;
OpenLayers.Console.error(err);
}
break;
case "FeatureCollection":
for (var i = 0, len = obj.features.length; i < len; ++i) {
try {results.push(this.parseFeature(obj.features[i]));
} catch (err) {
results = null;
OpenLayers.Console.error(err);
}
}
break;
default:
try {
var geom = this.parseGeometry(obj);
results.push(new OpenLayers.Feature.Vector(geom));
} catch (err) {
results = null;
OpenLayers.Console.error(err);
}
}
break;
}
}
return results;
}
あなたの助けと説明に感謝します、Yasemin