GIS開発ライブラリ Survey.DLLのご紹介
HOME > Survey.DLL 解説

SURVEY.DLL


GIS開発ライブラリ Survey.DLL  
●内容
SURVEY.DLLは、DLL形式の関数ライブラリで、関数の数は650以上です。
提供される内容は、DLL本体、VBモジュール(BAS)、HELPからなり、VB・VC・VBAで利用できます。
フリーライセンス版もありますので、お尋ねください。

●特徴

緯度経度変換不整形地の近似整形化などの数学的表現とCAD・GISなどの視覚表現とが同じにできることです。
多角形の面積分割の結果や水理任意断面の計算結果をCAD・GISで反映させるなどがいい事例でしょう。
SURVEY.DLLを利用した場合20行程度で一連の作用を行なうソフト作成が可能になります。

サンプル・ヘルプのダウンロード  

多角形の面積分割】
5点の座標からなる多角形を座標5-座標4に平行で分割面積1000を与えて、分割します。
分割計算後、AutoCADのスクリプトを生成します。

Dim N%, XX#(10), yy#(10)
Dim InterSEC(2) As POINT2
Dim ang#
Rem ------------- 座標設定 -------------------------------
N = 5
For i = 1 To N
yy(i) = Choose(i, 30, 80, 90, 40, 10)
XX(i) = Choose(i, 10, 20, 70, 90, 40)
Next i
Rem ------------- 座標5から座標4への方位角を計算 ----------
ang = DMSang(XX(5), yy(5), XX(4), yy(4))
Rem ------------- 分割面積を設定 --------------------------
Dim getarea#
getarea = 1000
Rem ------------- 多角形の面積分割 ------------------------
Dim k%, AreaM#, AreaN#
k = pol_dev3(N, XX(1), yy(1), ang, getarea, InterSEC(1), AreaM, AreaN) '----このモジュールで面積分割をしています。---
Debug.Print k; AreaM; AreaN
Debug.Print A_CrtXY(InterSEC(1).x, InterSEC(1).Y) ' 面積分割交点座標1
Debug.Print A_CrtXY(InterSEC(2).x, InterSEC(2).Y) ' 面積分割交点座標2
Rem ------------- AutoCADスクリプト生成 --------------------
Dim FNO&
FNO = FreeFile()
Open MyDeskPath$ + "Test.Scr" For Output As #FNO
'スナップモードをOFF
Print #FNO, A_Osnap(0)
'レイヤ作成
Print #FNO, A_CrtLayer("サンプル", "white")
Print #FNO, A_CrtLayer("分割線", "red")
'ポリライン作画を書き込む
Print #FNO, A_ChgLayer("サンプル")
For i = 1 To N
j = i + 1
If j > N Then j = 1
Print #FNO, A_LineTO(XX(i), yy(i), XX(j), yy(j))
Next i
'エレメント範囲拡大
Print #FNO, A_ZOOME()
'結線
Print #FNO, A_ChgLayer("分割線")
Print #FNO, A_LineTO(InterSEC(1).x, InterSEC(1).Y, InterSEC(2).x, InterSEC(2).Y) ' 面積分割線の結線
' --------- 最終処理 ---------
Print #FNO, A_FinalScript()
Close #FNO

【任意断面の断面積、潤辺、水面幅】
任意断面の開水路において、X,Y座標、水深を与えて、断面積、潤辺、水面幅、交点個数を計算します。
計算後、AutoCADのスクリプトを生成します。

Dim X#(10), Y#(10), N%, Kosu%, X1#(2), Y1#(2)
Dim H#, A#, P#, B#
N = 10
' --------------- 断面座標 ---------------
For i = 1 To N
X(i) = Choose(i, 0, 5, 10, 30, 45, 60, 75, 90, 95, 100)
Y(i) = Choose(i, 70, 75, 75, 60, 15, 20, 45, 80, 80, 75)
Next i
' --------------- 水深55の時 ------------
H = 55
Call keisin_nini(N, X(1), Y(1), H, A, P, B, Kosu) '面積,潤辺,水面幅
Call nini_kouten(N, X(1), Y(1), H, Kosu, X1(1), Y1(1)) '交点座標
' -------- AutoCADスクリプト作成 ----------
Dim FNO&
FNO = FreeFile()
Open MyDeskPath$ + "Test.Scr" For Output As #FNO
'スナップモードをOFF
Print #FNO, A_Osnap(0)
'レイヤ作成
Print #FNO, A_CrtLayer("サンプル", "white")
Print #FNO, A_CrtLayer("分割線", "red")
Print #FNO, A_CrtLayer("面積", "blue")
'ポリライン作画を書き込む
Print #FNO, A_ChgLayer("サンプル")
For i = 1 To N - 1
Print #FNO, A_LineTO(X(i), Y(i), X(i + 1), Y(i + 1))
Next i
'エレメント範囲拡大
Print #FNO, A_ZOOME()
'結線
Print #FNO, A_ChgLayer("分割線")
Print #FNO, A_LineTO(X1(1), Y1(1), X1(2), Y1(2))
'面積,潤辺,水面幅を水面幅の中央に作画
Dim Xc#
Xc = (X1(1) + X1(2)) / 2
Print #FNO, A_ChgLayer("面積")
Print #FNO, A_MojiDR("MC", Xc, H + 2.75, 2.5, 0, "水面幅 " + Format(B, "####.00"))
Print #FNO, A_MojiDR("MC", Xc, H + 6.25, 2.5, 0, "潤 辺 " + Format(P, "####.00"))
Print #FNO, A_MojiDR("MC", Xc, H + 9.75, 2.5, 0, "面 積 " + Format(A, "####.00"))
' --------- 最終処理 ---------
Print #FNO, A_FinalScript()
Close #FNO


【不整形地の近似整形】
固定資産評価などで、不整形地を近似整形化するときに利用します。

Dim N%, xx#(10), YY#(10)
Dim HAng#
Rem ------------- 座標設定 -------------------------------
N = 5
For i = 1 To N
YY(i) = Choose(i, 30, 80, 90, 40, 10)
xx(i) = Choose(i, 10, 20, 70, 90, 40)
Next i
Rem ------------- 座標5から座標4への方位角を計算 ----------
HAng = ang(xx(5), YY(5), xx(4), YY(4))
Rem ------------- 多角形の面積分割 ------------------------
Dim XX_R#(10), YY_R#(10), xo#, yo#
Dim SArea#, dx#, dy#
Dim XX_R1#(4), YY_R1#(4), XX_R2#(4), YY_R2#(4)
'筆座標を回転(白)
xo = xx(1): yo = YY(1)
Call rotate_xyD(N, xx(1), YY(1), xo, yo, HAng, XX_R(1), YY_R(1))
'回転した矩形(白)
SArea# = Get_ExtentXY(N, XX_R(1), YY_R(1), XX_R1(1), YY_R1(1), dx, dy)
Debug.Print "面積・緯距・経距 "; SArea, dx, dy
'矩形を元に戻す(赤)
Call rotate_xyD(4, XX_R1(1), YY_R1(1), xo, yo, -HAng, XX_R2(1), YY_R2(1))

Rem ------------- AutoCADスクリプト生成 --------------------
Dim FNO&
FNO = FreeFile()
Open MyDeskPath$ + "Test.Scr" For Output As #FNO
'スナップモードをOFF
Print #FNO, A_Osnap(0)
'レイヤ作成
Print #FNO, A_CrtLayer("筆", "White")
Print #FNO, A_CrtLayer("矩形", "red")
'ポリライン作画を書き込む
Print #FNO, A_ChgLayer("筆")
For i = 1 To N
j = i + 1
If j > N Then j = 1
Print #FNO, A_LineTO(xx(i), YY(i), xx(j), YY(j))
Next i
'エレメント範囲拡大
Print #FNO, A_ZOOME()
'結線
Print #FNO, A_ChgLayer("矩形")
For i = 1 To 4
j = i + 1
If j > 4 Then j = 1
Print #FNO, A_LineTO(XX_R2(i), YY_R2(i), XX_R2(j), YY_R2(j))
Next i
' --------- 最終処理 ---------
Print #FNO, A_FinalScript()
Close #FNO

【緯度経度変換】
新日本測地系8系,緯度=37°44′47.5517″,経度=138°53′7.04284″から19座標系のX,Yを計算します。

Dim k%, ido#, keido#, x#, y#, Ganma#, IRCODE%
k = 8
ido = 37.44475517
keido = 138.530704284
Debug.Print "【日本測地系JGD2000】 "
'日本測地系(JGD2000) 緯度・経度=>XY
Call JGD2000_klola1(k, ido, keido, x, y, IRCODE)
Debug.Print x, y, JGD2000_syusa(k, x, y), JGD2000_zoudai(k, y)
'日本測地系(JGD2000) XY=>緯度・経度
Call JGD2000_klola2(k, ido, keido, x, y, Ganma, IRCODE)
Debug.Print ido; keido

モジュール群
ジャンル 機能
角度・距離 ・度分秒、デグリー、ラデイアンの変換、距離、方向角など
面積・ポリゴン ・DMD面積計算、重心、ポリゴンの面積分割など
座標変換 ・回転、平行座標変換、・ヘルマート・アフィン変換など
緯度経度 ・緯度経度からXYへの変換またその逆変換、JGD2000変換など
直線 ・直線の属性、ベクトル情報など
空間 ・3次元ベクトル、平面と直線との交点、球と平面など
交点計算 ・直線、円、クロソイド、楕円の交点計算、内分計算など
円と2次方程式 ・円と直線との交点計算、土方カーブなど
曲線 ・クロソイド、 ベジェ、スプラインなど
配列 ・配列のマージ、逆周りにするなど
よく使う関数 ・数学関数--- 三角関数・複素数など、方程式 ---- 3次方程式など
・数値判定 --- ビッグ・リトルエンディアンなど
・文字関数 --- CSVから数字型へなど、統計 --- 平均・偏差など
・システム ---パスワード,Windows種別など
水理計算 ・円、矩形、任意断面、放物線の経深、 ・水深、限界水深など
方程式 ・ニュートン法、連立方程式など
文字関数 ・区切り文字から数字の抽出、国土庁筆図形データ抽出、CSV抽出など
単位変換 ・SI単位へ変換
力学 ・円形埋設管の最大曲げモーメント、荷重項、任意形断面2次モーメントなど
トポロジ ・ライン構成からポリゴン生成、ポリラインと線との交点計算など
AutoCAD関連 ・直線、円、文字列の作画などのスクリプトを生成
G−XML関連 ・G−XMLのタグ生成



 

GIS開発本舗は、GIS開発やJGD2000,SHPなどのファイル変換のサポートをします。