ジョン・スナイダーによって提案された解決策は、一般的なアイデアを提供してくれますが、完全に終了して(特にOpenLayers.Layer.Vector
を拡張するために動作しませんでしたwasn」:
だからあなたのコードは、次のようになります呼び出すためにOpenLayers 2.1xに基づいてこのタスクに必要なもの)。
クラスYourApp.Handler.EndPointsPath
(延長OpenLayers.Handler.Path
)を作成しました。関数geometryClone()
は、タイプYourApp.Geometry.EndPointsPath
の新しいジオメトリを返します。
私たちは、この新しいジオメトリの描画にOpenLayers.Renderer.Elements
に機能drawGeometry()
にパッチを当て:私はこのような何かをしようとしていましたが、ただ何も簡単で、以下の作業がかかるソリューションがないことを確認したかった
OpenLayers.Util.extend(OpenLayers.Renderer.Elements.prototype, {
drawGeometry: function (geometry, style, featureId) {
var cl = geometry.CLASS_NAME;
var rendered = true,
i, len;
if ((cl === "OpenLayers.Geometry.Collection") ||
(cl === "OpenLayers.Geometry.MultiPoint") ||
(cl === "OpenLayers.Geometry.MultiLineString") ||
(cl === "OpenLayers.Geometry.MultiPolygon") ||
(cl === "YourApp.Geometry.EndPointsPath")) {
// Iterate over all Geometry components and draw each individually
for (i = 0, len = geometry.components.length; i < len; i++) {
// Is there a style for each of the components?
if (OpenLayers.Util.isArray(style)) {
// Draw Geometry with own style
rendered = this.drawGeometry(geometry.components[i], style[i], featureId) && rendered;
} else {
// Draw Geometry with common style
rendered = this.drawGeometry(geometry.components[i], style, featureId) && rendered;
}
}
return rendered;
}
// (...standard code...)
},
eraseGeometry: function (geometry, featureId) {
var cl = geometry.CLASS_NAME,
i, len;
if ((cl === "OpenLayers.Geometry.MultiPoint") ||
(cl === "OpenLayers.Geometry.MultiLineString") ||
(cl === "OpenLayers.Geometry.MultiPolygon") ||
(cl === "YourApp.Geometry.EndPointsPath") ||
(cl === "OpenLayers.Geometry.Collection")) {
for (i = 0, len = geometry.components.length; i < len; i++) {
this.eraseGeometry(geometry.components[i], featureId);
}
// (...standard code...)
}
}
});
を。ありがとう! – gregorej
私は、ベクトルのセットを保持するCompositeVectorクラスを実装しました。各ベクトルはそれ自身のジオメトリとオプションでスタイルを持っています。また、これらをサポートする特別なOpenLayers.Layer.Vector実装が必要でした。要約すると:それは働いた:) – gregorej
私はそのような古いスレッドを持って申し訳ありませんが、私は現在(OpenLayers 2.12で)同じを達成しようとしているが問題に遭遇した:私はマルチ(または複合)ベクトルを実装した基本的には複数の機能を備えていますが、機能そのものです。私は、提案されているようにLayer.VectorのdrawFeatureメソッドを書き換えましたが、今私は奇妙な動作をしています:機能は正しく描画されますが、ビューポートのサイズが変更されると、私はそれがすべて、フィーチャーそのものを持つフィーチャーを持つことになると思う。書き換えなければならないものがありますか、忘れてはいけないものがありますか? – dschenk