1

郵便番号で区切られたメリーランド州のシェープファイル マップがあります。私がやりたいのは、データベースで調べている値に基づいて各領域に色を付けることです。現在、私は SharpMap パッケージで ASP.NET を使用しています。基本的な質問は次のとおりです。

1)形状を郵便番号に関連付けるにはどうすればよいですか? マップの範囲として設定された BoundingBox で SharpMap の ExecuteIntersectionQuery を使用して郵便番号のリストを生成できますが、結果のテーブルの各行をそれが表す形状に接続する方法がわかりません。

2) 個々の形状にアクセスして、必要な色がわかったら、その形状に色を割り当てるにはどうすればよいですか? SharpMap では、VectorLayer に色を付けることができますが、VectorLayer は形状ではなくソース .shp ファイルから生成されます。

私は、SharpMap 以外 の無料のマップ パッケージを使用することにオープンです (したがって、ArcGIS は使用しません) が、法的な理由により、GoogleMaps を使用できません。

これは比較的単純なはずですが、SharpMap の適切なリソースを見つけようとするのはかなり困難です。

編集:さて、私はそこにあるドキュメントを読むだけで多くのプロセスを作成しました。ShapeFile の FilterDelegate を設定することで、郵便番号が特定の値に一致する行のみで構成されるレイヤーを作成できます。今私の唯一の問題は、デリゲートフィルターが毎回異なる郵便番号を探すようにすることです。FeatureDataRow 以外のパラメーターを渡すことはできますか? グローバル変数に頼るべきですか?

4

1 に答える 1

2

これを行うには、テーマを使用する必要があります。

マップとそのレイヤーを構成するコードがすでにあると仮定します。シェープファイルはVectorLayerです。

VectorLayer shapefileLayer = GetMyShapefileLayer();
shapefileLayer.Theme = new SharpMap.Rendering.Thematics.CustomTheme(GetStyleForShape);

次に、マップがレンダリング用のスタイルを必要とするたびに、メソッドGetStyleForShapeが呼び出されます。これは次のようになります:-

private SharpMap.Styles.VectorStyle GetStyleForShape(SharpMap.Data.FeatureDataRow row, SharpMap.Layers.Layer layer)
    {
}

このメソッドでは、VectorStyleを作成して返します。レンダリングしようとしている機能に関連付けられているテーブルデータは、パラメーターとしてこのメ​​ソッドに渡されます。

したがって、rowパラメーターを使用して郵便番号を取得し、そのスタイルを計算するために必要なロジックを実行し、そのスタイルを構成して返すことができます。

このメソッドは(潜在的に)頻繁に呼び出されるため、スタイルを毎回再作成するのではなく、保存して再利用することを検討してください。

お役に立てれば。

于 2011-07-07T15:10:30.460 に答える