hibitekitou
位置をプロット
xsi |2014-10-29
世界遺産。ユネスコにより採択される遺跡で、そのリストはユネスコのサイトで配布されています。その中にはエクセルファイルもあって、そのエクセルファイルには、緯度・経度が記録されています。
というわけで、それを地図上にプロットするというのは、正距円筒図法に対しては非常に容易だったりします。
まずはエクセルファイルを読むためのモジュールをインストールです。xlrdってモジュールを入れればいいようです。使い方はネット上にいろいろあるんで省略。僕も良くわかってないし。ということで、これを使って、プロットしてやります。
ここまでで、ICEツリー下図の赤四角で囲まれた範囲が作成されます。ポイントクラウドを作成するわけっすね。
で、その後、ポリゴンのコピーをそのポイント位置に置いていく予定ながら、面積を持ったものをおくと、隣と干渉しまくる密度の濃い地域があるんで、干渉を出来るだけ回避するために、赤四角以外の範囲のICEツリーを手動で組んでいます。
でもって、空のポリゴンメッシュに対してICEツリーで下図を作成するだけ。形状のソースとなるものは、単なる板ポリでございます。
これだけでいいんだもんなぁ。SI、楽だよねぇ。
というわけで、それを地図上にプロットするというのは、正距円筒図法に対しては非常に容易だったりします。
まずはエクセルファイルを読むためのモジュールをインストールです。xlrdってモジュールを入れればいいようです。使い方はネット上にいろいろあるんで省略。僕も良くわかってないし。ということで、これを使って、プロットしてやります。
from win32com.client import constants as c import xlrd app = Application xlsfilePath = 'D:\Users\whc-sites-2014.xls' #ダウンロードしたエクセルファイルのパス xLen = 200.0 book = xlrd.open_workbook( xlsfilePath ) sheet0 = book.sheet_by_index(0) for col in range( sheet0.ncols ): if str( sheet0.cell( 0, col ).value ) == 'longitude': colLog = col elif str( sheet0.cell( 0, col ).value ) == 'latitude': colLat = col posList = [] for row in range( 1, sheet0.nrows ): LogMessage(sheet0.cell( row, colLog ).value) xpos = (xLen * 0.5) * sheet0.cell( row, colLog ).value / 180.0 zpos = (xLen * 0.5 * 0.5 ) * sheet0.cell( row, colLat ).value / -90.0 posList.append( xpos ) posList.append( 0.0 ) posList.append( zpos ) oPntCloud = app.GetPrim("PointCloud", "", "", "") oICETrees = app.ApplyOp("ICETree",oPntCloud,c.siNode) oICETree = oICETrees(0) oAddPoint = app.AddICENode("$XSI_DSPRESETS\ICENodes\AddPointNode.Preset", oICETree ) app.ConnectICENodes(oICETree.FullName + ".port1", oAddPoint.FullName + ".add") oStrToArr = app.AddICENode("StringToArray", oICETree) app.SetValue(oStrToArr.FullName + ".Value_string", str(posList)[1:-1], "") app.ConnectICENodes(oAddPoint.FullName + ".positions1", oStrToArr.FullName + ".Result")
ここまでで、ICEツリー下図の赤四角で囲まれた範囲が作成されます。ポイントクラウドを作成するわけっすね。
で、その後、ポリゴンのコピーをそのポイント位置に置いていく予定ながら、面積を持ったものをおくと、隣と干渉しまくる密度の濃い地域があるんで、干渉を出来るだけ回避するために、赤四角以外の範囲のICEツリーを手動で組んでいます。
でもって、空のポリゴンメッシュに対してICEツリーで下図を作成するだけ。形状のソースとなるものは、単なる板ポリでございます。
これだけでいいんだもんなぁ。SI、楽だよねぇ。
コメント ( 0 )|Trackback ( )
・