Javaを使用する人気のあるRepastゾンビチュートリアルでは、NetworkBuilderを使用して、感染ネットワークを視覚化することができます。私は地理学/ GISの文脈で使用できるものがあれば疑問に思っていました。あるいは、自分のものをどう構築することができるかについての考えはありますか?たとえば、エージェントがA点からB点に移動する場合、2つを結ぶベクトルを描く関数を書くことはできますか?Repast NetworkBuilderを地理およびGISディスプレイで使用できますか?
答えて
GISディスプレイで視覚化できる地理投影のRepastネットワークオブジェクトを管理する投影リスナークラスを作成しました。付属のリスナークラスは、プロジェクトに入れて、このような地理やネットワーク投影リンクするContextBuilderで使用することができます
GeographyParameters geoParams = new GeographyParameters();
Geography geography = GeographyFactoryFinder.createGeographyFactory(null).createGeography("Geography", context, geoParams);
NetworkBuilder<Object> netBuilder = new NetworkBuilder<Object>("Network", context, true);
Network net = netBuilder.buildNetwork();
GISNetworkListener netListener = new GISNetworkListener(context, geography, net);
GIS NetworkListenerは、1人の意志の変化、その指定されたコンテキスト内の地理やネットワークを結合しをもう一方に反映される。これは、ネットワークの追加/削除エッジイベントとともに、エージェントの移動、追加、地理的な場所からの削除を処理します。複数のネットワークがある場合は、それぞれに個別のリスナーインスタンスを作成できます。 Repastネットワークおよび地形投影がコード内で正常に使用されている限り、投影間のイベントを更新するための追加コードは必要ありません。
GISディスプレイでネットワークエッジを視覚化するには、添付されたMyNetworkEdgeクラスなど、RepastEdgeを拡張する単純なエッジクラスを作成する必要があります。これは、表示ウィザードがスタイリング用のユーザークラスを必要とするためです。この表示では、エージェントタイプダイアログでMyNetworkEdgeクラスを選択し、添付されているMyNetworkStyleクラスのようなラインタイプまたはスタイルクラスのいずれかを指定できます。 Repastネットワークでリンクを作成するには、MyNetworkEdgeで追加と削除の方法を使用する必要があります。
net.addEdge(new MyNetworkEdge(source, target));
もちろん、必要に応じて、さらに多くの機能をMyNetworkEdgeクラスに追加できます。
ProjectionListenerクラス:
package geography;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.LineString;
import com.vividsolutions.jts.geom.MultiLineString;
import repast.simphony.context.Context;
import repast.simphony.space.gis.Geography;
import repast.simphony.space.graph.Network;
import repast.simphony.space.graph.RepastEdge;
import repast.simphony.space.projection.ProjectionEvent;
import repast.simphony.space.projection.ProjectionListener;
/**
* A ProjectionListener implementation for managing Repast network edges in a
* Repast geography projection. This listener responds to both geography event
* and network events.
*
* @author Eric Tatara
*
*/
public class GISNetworkListener implements ProjectionListener {
Context context;
Network network;
Geography geography;
GeometryFactory fac = new GeometryFactory();
public GISNetworkListener(Context c, Geography g, Network n) {
context = c;
network = n;
geography = g;
network.addProjectionListener(this);
geography.addProjectionListener(this);
}
@Override
public void projectionEventOccurred(ProjectionEvent evt) {
// When an object is moved in the geography, its network edges positions
// should be updated if the object has edges.
if (evt.getType() == ProjectionEvent.OBJECT_MOVED){
Iterable<RepastEdge> edges = network.getEdges(evt.getSubject());
if (edges != null){
for (RepastEdge e : edges){
// Get the existing geometry for this edge
MultiLineString lineFeature = (MultiLineString)geography.getGeometry(e);
Coordinate sourceCoord = geography.getGeometry(e.getSource()).getCoordinate();
Coordinate targetCoord = geography.getGeometry(e.getTarget()).getCoordinate();
Coordinate coords[] = lineFeature.getCoordinates();
// Update the edge coordinates based on the source and target object
// (agent) coordinates.
coords[0].setCoordinate(sourceCoord);
coords[1].setCoordinate(targetCoord);
}
}
}
// When a Repast network edge is added, create a new MultiLineString geometry
// to represent the edge in the geography.
else if (evt.getType() == ProjectionEvent.EDGE_ADDED){
RepastEdge e = (RepastEdge)evt.getSubject();
Coordinate sourceCoord = geography.getGeometry(e.getSource()).getCoordinate();
Coordinate targetCoord = geography.getGeometry(e.getTarget()).getCoordinate();
LineString lineString = fac.createLineString(new Coordinate[]{sourceCoord,
targetCoord});
MultiLineString mls = fac.createMultiLineString(new LineString[]{lineString});
context.add(e);
geography.move(e, mls);
}
// When a Repast edge remove event occurs, remove the edge geometry from the
// geography and the context. This should also occur automatically when agents
// are removed from a context or network.
else if (evt.getType() == ProjectionEvent.EDGE_REMOVED){
RepastEdge e = (RepastEdge)evt.getSubject();
geography.move(e, null);
context.remove(e);
}
}
}
RepastEdgeクラス:
package geography;
import repast.simphony.space.graph.RepastEdge;
public class MyNetworkEdge extends RepastEdge {
public MyNetworkEdge(Object source, Object target){
super(source, target, false);
}
}
ネットワークスタイルクラス:
package geography;
import gov.nasa.worldwind.render.SurfacePolyline;
import gov.nasa.worldwind.render.SurfaceShape;
import java.awt.Color;
import repast.simphony.visualization.gis3D.style.SurfaceShapeStyle;
/**
* Style for MyNetworkEdges.
*
* @author Eric Tatara
*
*/
public class MyNetworkStyle implements SurfaceShapeStyle<MyNetworkEdge>{
@Override
public SurfaceShape getSurfaceShape(MyNetworkEdge object, SurfaceShape shape) {
return new SurfacePolyline();
}
@Override
public Color getFillColor(MyNetworkEdge obj) {
return null;
}
@Override
public double getFillOpacity(MyNetworkEdge obj) {
return 0;
}
@Override
public Color getLineColor(MyNetworkEdge obj) {
return Color.BLUE;
}
@Override
public double getLineOpacity(MyNetworkEdge obj) {
return 1.0;
}
@Override
public double getLineWidth(MyNetworkEdge obj) {
return 2;
}
}
- 1. R/GIS:バルク処理、距離および高度計算
- 2. ローカルおよびセッションストレージをhtml 4で使用できますか?
- 3. 内部およびインラインスタイルシートにstylelintを使用できますか?
- 4. Repastエージェントテーブルをユーザコードから呼び出すことはできますか?
- 5. C#、Entity FrameworkおよびSQL Server 2008を使用して地理データを読み書きする方法は?
- 6. 地理データを取得するためのフリーGISサーバー
- 7. MS Visual StudioのリソースをEclipseおよびCygwinで使用できますか?
- 8. このWCFクライアントコードをMacのMonoおよびMonoTouchで使用できますか?
- 9. 共有サーバーでnode、bower、およびgitを使用できますか?
- 10. &&(論理および)および|| (if文)
- 11. モバイルおよび網膜ディスプレイの高解像度画像用CSS
- 12. ASP.NET MVC 2でResponse.Cache.SetLastModifiedを使用できない理由(およびキャッシュ制限の階層は何ですか?)
- 13. XMLノード名および属性は使用できません
- 14. セッションおよびラーベール・キューに同じRedisインスタンスを使用できますか?
- 15. MSP430G2553 UARTボーレートおよび制御レジスタ。ワードアクセスを使用できますか?
- 16. GeoJSONポリゴン、複数ラインストリング、および線ストリングにLayerGroupを使用できますか?
- 17. 私の.cssおよび.scssファイルにJsDocを使用できますか?
- 18. Ajax、perl、およびJSONを簡単に一緒に使用できますか?
- 19. 地理空間および時間問合せ用のNoSQLテクノロジーはどれですか?
- 20. ディスプレイ間のトランジションまたはアニメーション:notおよびdisplay:ブロック
- 21. JavaおよびWindows地域の設定
- 22. anaconda仮想envでdjangoでパンダをインポートおよび使用できません
- 23. 地図は、私がここに地図上の作業、トラフィックおよび地形の方式に問題が生じていますトラフィックおよび地形マップスキーム
- 24. GRASS GISで上書き機能を使用するには?
- 25. エクスプレスおよびボディパーサーを使用してPOSTできない
- 26. 地理座標を格納および照会するためのPythonモジュール
- 27. GIS:.prj(WKT)投影を使用してレイヤーをサイズ変更する方法は? (地理座標系)
- 28. カスタムシステムサービスでのみ使用できるアンドロイドOSでJSONファイルを追加および管理する方法は?
- 29. SQL、地理座標、および半径を使用して重複のゾーンを照会
- 30. AWSでの雪(および降雪)を並列処理に使用するR