初投稿です。
こんな内容で投稿していいのかわかりませんが、日建設計名古屋支社で学生アルバイトをしているのもあり、OpenDDLが前から気になっていたので、投稿します。
前置きはこれくらいにしまして、、、
設計課題時に、毎回毎回等高線データを作るためにいくつものアプリケーションを経由したりするのが、本当に大変ですよね。
前からずっとGHで直接読み込めれば、どんな等高線データも作れたのにって思っていたのですが、なかなかPythonの知識が追いつきませんでした。
ようやくPythonで色々かけるようになり、なんとか1ファイルだけ読み込めるようになったので、投稿します。
import sys
import reimport Rhino
import scriptcontext
# for accesssing GH classes
import clr
clr.AddReference("Grasshopper")
from Grasshopper.Kernel.Data import GH_Path
from Grasshopper import DataTreetree = DataTree[object]()
def TranslateDem(filename):
with open(filename, "r") as f:
#mesh
r = re.compile("(.+) ")
for ln in f:
m = r.search(ln)
if m != None:
mesh = m.group(1)
break# grid len
r = re.compile("(.+) (.+) ")
for ln in f:
m = r.search(ln)
if m != None:
xlen = int(m.group(1)) + 1
ylen = int(m.group(2)) + 1
break# start
r = re.compile("")
for ln in f:
m = r.search(ln)
if m != None:
break# data
data = []
r = re.compile("")
r2 = re.compile(",(.+)")
for ln in f:
m = r.search(ln)
if m != None:
break
else:
m = r2.search(ln)
if m != None:
data.append(float(m.group(1)))# start point
startx = starty = 0
r = re.compile("(.+) (.+) ")
for ln in f:
m = r.search(ln)
if m != None:
startx = int(m.group(1))
starty = int(m.group(2))
break##Create Matrix
data2 = [i for i in range(xlen*ylen)]
start_pos = starty*xlen + startx
for i in range(xlen*ylen):
if i < start_pos:
data2[i] = -9999.
else:
data2[i] = data[i-start_pos]data = [data2[i:i+xlen] for i in range(0,len(data2),xlen)]
return data
def nestedListToDataTree(nestedlist):
dataTree = DataTree[object]()
for i, item_list in enumerate(nestedlist):
path = GH_Path(i)
dataTree.AddRange(item_list,path)
return dataTreedata = TranslateDem(file)
p = nestedListToDataTree(data)
流れとしては
①xmlデータから正規表現で値を取得。
②値をメッシュに合わせてリストを作成。
③それぞれのメッシュの標高(z座標)を受け渡す
といったような流れになります。
本投稿はNo.1としてますが、開発過程を投稿してみなさんからアイデアをいただいたり、これからさらに複数ファイルで読み込めるようにしたりとNo2,No3と投稿していく予定です。
改良ポイント)
①コンポーネントを繋いで5mグリッドに点を作っていくものを作らないといけない、メッシュをつくらないといけない。
②複数データの読み込みに対応してない。
また近いうちになんとかして改良していきたいと思います。
ref)https://qiita.com/tobira-code/items/43a23362f356198adce2
とても興味深い記事ですね!地形や道路の情報を取得するのはElkなどがありますが、国内ソース(国土地理院データ)のものを変換できるのは、あると便利だと思います。
あと、もしかしたら緯度経度情報の変換が逆?で縦横比が変になっているかもしれないです。
>Daisuke Sasaki様
コメントありがとうございます。やはりOSMですと精度の限界がありますし、5mメッシュの地形データはモデリング以上に分析などにも使えそうなので、モデル化できるのは非常に良いのではないかと思いました。
緯度経度に関しまして、ご指摘頂いたことを確認してみます。ご指摘ありがとうございました。
コメントをするにはログインしてください。