(7)シミュレーションの結果として得られた都市(将来)像の評価

評価には多数の項目があります。Ver.1.0においては、単体指標を用いて、群の時間的な推移を通時態を辿る統計機能と、空間構成について共時態を評価する図化機能を用意しています。最終的な適否を判定する機能ではなく、ユーザーが評価を行うための参考資料を作成する機能となっています。

シミュレーションの実行時(ステップ実行、及び連続実行)においては、ヒープ領域に確保した配列に、評価に必要な集計値を、累積的に蓄積して行きます。評価機能が要求された場合には、これらのデータを取出し(単体指標による集計、及び空間構成)、ユーザーが要求したフォーマット(図・ファイル・3次元形状修飾)によって出力します。

4.データ形式と作成方法

 成熟都市シミュレータのデータは、基本的には、初期条件設定に係る条件(インフラ、敷地割、建築物の初期状態(類型及び築後年数)、人口配置)など、及び、形成条件に係る条件です。

4−1.領域条件

(1)地割初期状態

これは、シミュレーションの中で更新後の建築物を自動的に発生させるために重要な条件です。専用住宅、店舗併用住宅などの各類型は、敷地との関係、及び絶対方位に基づいて、それぞれの類型毎の法則性に従って形状を生成します。

地割の初期状態は、地割定義ファイル(*.ldt)によって記述します。これは、景観シミュレータ2.03付属の都市開発シミュレータの形式に準拠していますが、さらに拡充して、Ver.2 として、細かな接道条件などを記述できるようにしてあります。また、Ver.2においては、敷地形状を記述するポリゴンの頂点数を無制限にしてあります。

Ver.2 のフォーマット】

1行目に

VERSION2

と記述します。これでVer.2を識別します。

で始る行は、コメント行です。

Filcon1.exe を用いて、複数の地割データを合成して一つの地割定義ファイルを作成した場合、元のファイル名称を示すコメント行が自動的に挿入されます。

一つの敷地の形状が1行で記述されます。このフォーマットは、

名称 標高 頂点数 頂点座標

です。頂点座標は、X値 Y値の組が、頂点数だけ1行の中で繰返されます。最後の座標値は、開始点に戻る必要はありません。但し、反時計回りに記述されるものとし、最初の点と次の点を結ぶ線分が主な前面道路に面する辺を表すという約束です。

VERSION2

#地区コード:<d:\@keikan\入力\現況\0000>

"d4001x"      69.1  12  56209.273 194964.669  56212.600 194911.871  56215.726 194892.121  56222.653 194869.316  56292.750 194866.896  56292.801 194927.522  56331.771 194929.617  56326.442 194973.091  56292.724 194970.077  56292.260 194991.703  56279.256 194991.844  56279.233 194970.736

#地区コード:<d:\@keikan\入力\現況\0001>

"f1301"       65.7   4  56767.176 194939.042  56772.457 194950.445  56760.878 194951.169  56759.746 194939.573

"f1302t"      65.4   4  56761.391 194926.686  56767.235 194938.981  56746.758 194940.483  56746.155 194928.116

"f1303t"      65.8   5  56756.792 194917.250  56761.496 194926.905  56746.156 194928.156  56745.677 194919.067  56753.970 194918.300

"f1304t"      65.7   5  56751.649 194905.744  56756.729 194917.111  56753.869 194918.342  56745.655 194919.007  56745.214 194908.757

"f1305c"      65.7   4  56747.792 194897.155  56751.590 194905.825  56745.113 194908.720  56744.716 194898.668

"f1306"       65.7   4  56760.796 194951.131  56747.287 194952.150  56746.701 194940.683  56759.663 194939.514

#地区コード:<d:\@keikan\入力\現況\0002>

"f1401"       65.8   4  56739.195 194952.413  56719.547 194953.453  56719.050 194943.854  56738.537 194942.757

"f1402"       65.9   5  56719.605 194953.312  56706.888 194954.019  56706.441

実際の敷地条件の入力は、手間のかかる作業になります。そこで、本システムを活用しようとする現場に対しては、デジタイザを用いることを薦めています。これにより、長時間のVDT作業なしに、図面の形で用意された現況地割や換地計画図などから入力作業を行うことが可能となります。スキャナーで下図を読み込み、画面で作業する、という方法も不可能ではないが、現在までのマウスなどのデバイスは、正確な位置情報を入力する手段としては、細部においてやや不安定です。

デジタイザは、現場により機種が異なり、入力データのFORMATは、機種により様々です(例えば、ボタンが複数ある場合、押されたボタンがどれか、に対応する情報が付け加わる)。このために、conteur.bas というbasic インタープリタを用いた入力ソフトを用意しています。現場で機種の仕様にあわせて、入力部分を改変できる小さなソフトです。

Fullset でインストールした場合、conteur.bas は、

\keikan\maju\conteur

のディレクトリにあります。

入力ミスに対する修正機能が貧弱なので、小さな区画に分けてデータを入力することを薦めています。座標系に関しては、1:2500 基本図などに区域割の線を入れたものを用意し、これから分割された各区域(入力の単位)の地図の四隅の座標値を計測しておきます。Conteur.bas で一つのファイルを作成する時に、まず四隅の座標値を聞いてくるので、そこで入力を行います。入力された各敷地のデータは、上記の座標系に基づく座標値に変換されて出力されます。

デジタイザ各機種への対応は、

A.初期化部分

行番号150〜210

(デジタイザのモード設定等)ここに掲載した例は、なつかしいNEC社のPC9801シリーズに接続した場合の設定方法です。

B.1クリック毎のデータ取得部分

行番号250〜360

(各機種データ・フォーマットに対応)

を修正することにより行います。Bでは、ディジタイザから送り返された情報の内、座標値に関するものを取出して、X、Yの値として返すほか、曲線状の境界などにおいて、ドラッグが行われた時の、待ち時間及びサンプリング間隔(解像度)などを指定しています。

Conteur.bas

1 93/09/2322:13:44

10 DEF FNT(X)=VAL(RIGHT$(TIME$,2))

20 DEF FNX(X)=INT(X/6!)

30 DEF FNY(Y)=400-INT(Y/6!)

35 DEF FND(X1,Y1,X2,Y2)=SQR((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2))

36 DEF FNFX(X,Y)=PARAMS.A*X+PARAMS.B*Y+PARAMS.C

37 DEF FNFY(X,Y)=PARAMS.D*X+PARAMS.E*Y+PARAMS.F

40 DIM PX(1000),PY(1000)

41 DIM MAT(3,3)

45 XMAX = 3800 : YMAX = 2600 寒研仕様

50 CONSOLE 0,25,0,1

60 SCREEN 3,0,0,1

70 CLS 3

80 GOSUB*INITIALIZE

90 GOSUB*FILER

100 IF NEW.FLAG THEN GOSUB*GET.THE.FRAME ELSE GOSUB*RECOVERER

110 GOSUB*MAIN

120 GOSUB*FINE

130 END

140

150 *INITIALIZE

160 DELTA1=10 : DELTA2=20 : OUTFILE$=D:POLYGON.DAT

170 OPEN COM:N72 AS #1

175 PRINT #1,P;

180 PRINT #1,CHR$(&H1B)+F; ASCII CODE MODE?? COMMAND TO DIG.

190 PRINT #1,CHR$(&H1B)+I; ONE SHOT STREAM MODE? COMMAND TO DIG.

200 PRINT #1,CHR$(&H1B)+U; SAMPLING RATE 200 POINTS/SEC? COMMAND TO DIG.

210 RETURN

220

230 *GET.A.NEW.POINT

240 XSAVE=-100:YSAVE=-100

250 *GET.A.POINT

260 PRINT #1,PZ; START COMMAND TO DIG.

270 INPUT #1,X,Y,BUTTON.FLAG

280 IF XSAVE=X AND YSAVE=Y THEN TSAVE=FNT(0):GOTO 260

290 TIME=FNT(0):DELT=TIME-TSAVE:IF DELT<0 THEN DELT=DELT+60

300 IF DELT > 1 THEN 340

310 'R=(XSAVE-X)*(XSAVE-X)+(YSAVE-Y)*(YSAVE-Y)

311 R=FND(XSAVE,YSAVE,X,Y)

320 'IF R<100 THEN TSAVE=TIME:GOTO 260

321 IF R<DELTA1 THEN TSAVE=TIME:GOTO 260

330 BEEP 1:BEEP 0:PRINT "[";X;",";Y;"]":GOTO 350

340 BEEP 1:PRINT "(";X;",";Y;")":BEEP 0

350 XSAVE=X : YSAVE=Y : TSAVE=TIME

360 RETURN

370 '

380 *GET.THE.FRAME:PRINT "図面枠の指定(右上→左上→左下→右下)"

390 PRINT " 4点をディジタイズ":GOSUB*SILENT.DELAY2:GOSUB*BEEP.DELAY1

400 PRINT"右上":GOSUB *GET.A.POINT:UR.X=X:UR.Y=Y

405 INPUT "座標値 X,Y:",FUR.X,FUR.Y

410 PRINT"左上":GOSUB *GET.A.POINT:UL.X=X:UL.Y=Y

415 INPUT "座標値 X,Y:",FUL.X,FUL.Y

420 PRINT"左下":GOSUB *GET.A.POINT:LL.X=X:LL.Y=Y

425 INPUT "座標値 X,Y:",FLL.X,FLL.Y

430 PRINT"右下":GOSUB *GET.A.POINT:LR.X=X:LR.Y=Y

435 INPUT "座標値 X,Y:",FLR.X,FLR.Y

440?? GOSUB*BEEP.DELAY3

450 *SHOW.THE.FRAME

460 LINE (FNX(UR.X),FNY(UR.Y))-(FNX(UL.X),FNY(UL.Y)),5

470 LINE (FNX(UL.X),FNY(UL.Y))-(FNX(LL.X),FNY(LL.Y)),5

480 LINE (FNX(LL.X),FNY(LL.Y))-(FNX(LR.X),FNY(LR.Y)),5

490 LINE (FNX(LR.X),FNY(LR.Y))-(FNX(UR.X),FNY(UR.Y)),5

500 PRINT "枠表示完了"

510 DX=UL.X-LL.X:DY=UL.Y-LL.Y:R=SQR(DX*DX+DY*DY)

520 A1=DY/R:B1=-DX/R:C1=-A1*UL.X-B1*UL.Y

530 DX=UR.X-LR.X:DY=UR.Y-LR.Y:R=SQR(DX*DX+DY*DY)

540 A2=-DY/R:B2=DX/R:C2=-A2*UR.X-B2*UR.Y

550 DX=UR.X-UL.X:DY=UR.Y-UL.Y:R=SQR(DX*DX+DY*DY)

560 A3=DY/R:B3=-DX/R:C3=-A3*UR.X-B3*UR.Y

570 DX=LR.X-LL.X:DY=LR.Y-LL.Y:R=SQR(DX*DX+DY*DY)

580 A4=-DY/R:B4=DX/R:C4=-A4*LL.X-B4*LL.Y

590 RETURN

591 '

599 *EDGE.CHECK : EDGE=0

600? IF A1*X+B1*Y+C1<0 THEN EDGE=EDGE+1

601? IF A2*X+B2*Y+C2<0 THEN EDGE=EDGE+2

602? IF A3*X+B3*Y+C3<0 THEN EDGE=EDGE+4

603? IF A4*X+B4*Y+C4<0 THEN EDGE=EDGE+8

604 RETURN

605 '

610 *GET.A.POLYGON:PRINT"ひとつの敷地を入力します。";

611 PRINT " 道路から見た正面左隅から反時計回りに進んで下さい。"

612 PRINT " (終了する場合は、デジタイザの右辺付近を指定)

620 XSAVE=-1:YSAVE=-1:N=1

630?? GOSUB*SILENT.DELAY2:GOSUB*BEEP.DELAY1

640 PRINT"最初の点を入力待ちです。

650 GOSUB *GET.A.POINT

660? IF X>3750 THEN END.FLAG=1:RETURN 'セッション終了

670? START.X=X: START.Y=Y:START.FLAG=1

680 PX(0)=X:PY(0)=Y

690? EDGE.FLAG=0 : EDGE2.FLAG=0

700? GOSUB*EDGE.CHECK:EDGE.FLAG=EDGE '最初の点の範囲内外判定

710? IF EDGE.FLAG=0 THEN 750 '範囲内である場合

711? GOSUB*BEEP.DELAY1 '範囲外である場合

712? X.SAVE=X:Y.SAVE=Y

713? GOSUB*GET.A.POINT '範囲内に到達するのを待つ

714? GOSUB*EDGE.CHECK

715? IF EDGE THEN 712

716? EDGE=EDGE.FLAG

718? GOSUB *GET.MIDDLEPOINT '壁を越えた地点を計算する

719? X.START=X.MIDDLE:Y.START=Y.MIDDLE

720? PX(0)=X.START:PY(0)=Y.START

721? START.FLAG=0

722? GOTO 870

729 '

730 *GET.MIDDLEPOINT

732 IF EDGE=1 THEN K1=A1*X.SAVE+B1*Y.SAVE+C1:K2=A1*X+B1*Y+C1:GOTO 745

733 IF EDGE=2 THEN K1=A2*X.SAVE+B2*Y.SAVE+C2:K2=A2*X+B2*Y+C2:GOTO 745

734 IF EDGE=4 THEN K1=A3*X.SAVE+B3*Y.SAVE+C3:K2=A3*X+B3*Y+C3:GOTO 745

735 IF EDGE=8 THEN K1=A4*X.SAVE+B4*Y.SAVE+C4:K2=A4*X+B4*Y+C4:GOTO 745

737? ERROR 255

745? X.MIDDLE=(K2*X.SAVE-K1*X)/(K2-K1)

746? Y.MIDDLE=(K2*Y.SAVE-K1*Y)/(K2-K1)

747?? PRINT X.SAVE;Y.SAVE,X;Y,"X.MIDDLE=";X.MIDDLE,"Y.MIDDLE=";Y.MIDDLE

748? RETURN

749 '

750 GOSUB *GET.A.POINT'枠内の形状記憶開始

760? IF X>3750 THEN EDGE.FLAG=-1:GOTO 900? '強制終了の場合

770? IF START.FLAG=0 THEN 800

780 '? IF ABS(START.X-X)+ABS(START.Y-Y)>DELTA2 THEN START.FLAG=0:GOTO 870

781 '? IF START.FLAG=1 THEN PRINT "START.FLAG=1

782?? IF FND(START.X,START.Y,X,Y)>DELTA2 THEN START.FLAG=0

783? GOTO 870

790 'PRINT "EDGE.FLAG=",EDGE.FLAG;

800? IF EDGE.FLAG THEN 810 ELSE 850

810? GOSUB*EDGE.CHECK

820? IF EDGE=0 THEN 850

830? EDGE2.FLAG=EDGE

835? X.SAVE=PX(N-1):Y.SAVE=PY(N-1)

840? GOSUB*GET.MIDDLEPOINT

845 X=X.MIDDLE:Y=Y.MIDDLE:GOTO 900

850 ' PRINT "FROM START=";ABS(START.X-X)+ABS(START.Y-Y)

860 '? IF ABS(START.X-X)+ABS(START.Y-Y)<DELTA1 THEN 900

861?? IF FND(START.X,START.Y,X,Y)<DELTA1 THEN 900 '出発点近傍に至る

870 PX(N)=X:PY(N)=Y

875? LINE(FNX(PX(N-1)),FNY(PY(N-1)))-(FNX(PX(N)),FNY(PY(N))),7

880 N=N+1

890 GOTO 750

900 PX(N)=X:PY(N)=Y:N=N+1:PX(N)=EDGE.FLAG:PY(N)=EDGE2.FLAG

910 GOSUB*BEEP.DELAY3

920 RETURN

930 '

940 *SAVE.THE.POLYGON

950 HN=1:FOR I=0 TO NCONTEUR

951? IF INT(CONTEUR)=INT(H(I)) THEN HN=HN+1

952 NEXT

960 NCONTEUR=NCONTEUR+1

970 H(NCONTEUR)=CONTEUR

975 N$(NCONTEUR)=NOMOR$

980 HN(NCONTEUR)=HN

990 CONJ(NCONTEUR)=EDGE.FLAG OR EDGE2.FLAG

1010 GOSUB*MAKE.CONTNAME

1020 OPEN CONTNAME$ AS #2

1030 IF EOF(2) THEN 1040

1035 PRINT "そのデータは既にあるが、それを消すか(Y-N) ? ";

1036 GOSUB*BACK.WIND

1037 C$=INPUT$(1):PRINT:IF C$<>"Y" THEN 1039

1038 PRINT #2,"####appended####":GOTO 1040

1039 CLOSE #2:KILL CONTNAME$:OPEN CONTNAME$ AS #2

1040 WRITE #2,N,HN

1050 FOR I=0 TO N:WRITE #2,PX(I),PY(I):NEXT

1060 CLOSE #2

1070 RETURN

1080 '

1090 *MAKE.CONTNAME

1100 CONTNAME$=FILENAME$+RIGHT$("0000"+MID$(STR$(INT(CONTEUR)),2),4)

1110 CONTNAME$=CONTNAME$+"."+RIGHT$("000"+MID$(STR$(HN),2),3)

1120 RETURN

1130 '

1140 *CHECK.THE.POLYGON

1150 C=5:GOSUB*DRAW.THE.POLYGON

1200 '

1210? GOSUB*SILENT.DELAY2:GOSUB*BEEP.DELAY1

1220? PRINT "OK:左半分 NG:右半分 をクリック"; : GOSUB *GET.A.POINT

1230? IF X>XMAX/2 THEN C$="N" ELSE C$="Y":PRINT C$

1240 IF C$="N" THEN C=0:GOSUB*BEEP.DELAY2:GOTO*DRAW.THE.POLYGON

1250 GOSUB*BEEP.DELAY3

1255 GOSUB*SILENT.DELAY2:GOSUB*EDGE.BEEP

1260 INPUT "敷地の標高は(m) : ",CONTEUR

1265 INPUT "敷地の地番は    : ",NOMOR$

1270 C=3 'C=1+((CONTEUR/2)MOD 5)

1290 GOSUB*DRAW.THE.POLYGON

1320? GOSUB*SILENT.DELAY2:GOSUB*LONG.PROMPT

1321? PRINT "OK:左半分 NG:右半分 をクリック"; : GOSUB *GET.A.POINT

1322? IF X>XMAX/2 THEN C$="N" ELSE C$="Y":PRINT C$

1323 IF C$="N" THEN C=0:GOSUB*BEEP.DELAY2:GOTO 1255

1327 GOSUB*SUCCESS

1330 RETURN

1339 '

1340 *DRAW.THE.POLYGON

1341 FOR I=0 TO N-2

1342? LINE (FNX(PX(I)),FNY(PY(I)))-(FNX(PX(I+1)),FNY(PY(I+1))),C

1343 NEXT I

1344 IF PX(N) THEN RETURN? 'from edge to edge; not closed open loop

1345? LINE (FNX(PX(I)),FNY(PY(I)))-(FNX(PX(0)),FNY(PY(0))),C

1346 RETURN

1350 *MAIN

1360 GOSUB *GET.A.POLYGON

1370 IF END.FLAG THEN CLS 3:RETURN

1380 GOSUB *CHECK.THE.POLYGON : IF C$<>"Y" THEN 1360

1390 GOSUB *SAVE.THE.POLYGON

1400 GOTO *MAIN

1410 'WIDOWS

1420 *LONG.PROMPT

1430 *EDGE.BEEP: FOR TIME=1 TO 20:BEEP 1:BEEP 0:BEEP 1:BEEP 0:NEXT:RETURN

1440 *PROMPT1

1450 *BEEP.DELAY1: FOR TIME=1 TO 50:BEEP 1:BEEP 0:NEXT:RETURN??????? 'PROMPT

1460 *SUCCESS

1470 *BEEP.DELAY3????????????????? ??????????????????????????????????'SUCCESS

1480? FOR TIME=1 TO 5:BEEP 1:FOR TIME1=1 TO 100:NEXT

1490?? BEEP 0:FOR TIME1=1 TO 100:NEXT

1500? NEXT:RETURN

1510 *ALARM

1520 *BEEP.DELAY4:FOR TIME2=1 TO 3:GOSUB*BEEP.DELAY3:GOSUB*SILENT.DELAY

1530? NEXT:RETURN

1540 *SILENT.DELAY2:FOR TIME=1 TO 3:GOSUB*SILENT.DELAY:NEXT:RETURN

1550 *SILENT.DELAY:FOR TIME1=1 TO 1000:NEXT:RETURN

1560 *FAILURE

1570 *BEEP.DELAY2:FOR TIME=1 TO 30:BEEP 1:BEEP 0:FOR TIME1=1 TO ABS(15-TIME)

1580? NEXT:NEXT:RETURN

1590 *BACK.WIND

1600 FOR TIME=1 TO 25:BEEP 1:BEEP 0:FOR TIME1=TIME TO 40:NEXT:NEXT:RETURN

1610 *FRONT.WIND

1620 FOR TIME=1 TO 35:BEEP 1:BEEP 0:FOR TIME1=1 TO TIME:NEXT:NEXT:RETURN

1630 *FILER

1640 DIM H(1000),HN(1000),CONJ(1000),N$(1000)

1650 PRINT "ドライブは(A-F) : ";

1660 C$=INKEY$ : IF C$="" THEN 1660

1670 IF C$="" THEN 1660 ELSE C=ASC(C$)

1680? IF 97<=C AND C<=102 THEN 1710

1690? IF 65<=C AND C<=70 THEN 1720

1700 GOTO 1660

1710 C=C-32

1720 DRIVE$=CHR$(C)+":"

1730 PRINT "[";DRIVE$;"]"

1740 '

1750 PRINT "地図の番号 : ";

1760 INPUT BLOCK.NUMBER

1770? IF BLOCK.NUMBER<0 THEN 1760

1780? IF BLOCK.NUMBER>9999 THEN 1760

1790 FILENAME$=DRIVE$+RIGHT$("0000"+MID$(STR$(BLOCK.NUMBER),2),4)

1800 '

1810 OPEN FILENAME$ AS #2

1820 IF EOF(2) THEN NEW.FLAG=1 ELSE NEW.FLAG=0

1830 IF NEW.FLAG THEN CLOSE #2:KILL FILENAME$:RETURN

1840 INPUT #2,UR.X,UR.Y

1850 INPUT #2,UL.X,UL.Y

1860 INPUT #2,LL.X,LL.Y

1870 INPUT #2,LR.X,LR.Y

1880 INPUT #2,NCONTEUR

1890 FOR I=1 TO NCONTEUR

1900? INPUT #2,H(I),HN(I),CONJ(I),N$(I)

1910 NEXT I

1911 INPUT #2,TEXT$

1912 IF TEXT$<>"COORDS" THEN 1920

1913 INPUT #2,FUR.X,FUR.Y

1914 INPUT #2,FUL.X,FUL.Y

1915 INPUT #2,FLL.X,FLL.Y

1916 INPUT #2,FLR.X,FLR.Y

1920 CLOSE #2

1930 RETURN

1940 '

1950 *RECOVERER

1960 GOSUB*SHOW.THE.FRAME

1970 FOR I=1 TO NCONTEUR

1980? CONTEUR=H(I):HN=HN(I):GOSUB*MAKE.CONTNAME

1990? OPEN CONTNAME$ FOR INPUT AS #2

2000? INPUT #2,N,HN

2010? INPUT #2,XSAVE,YSAVE

2020? FOR II=1 TO N-1

2030?? INPUT #2,X,Y

2040?? C=2 'C=1+(CONTEUR/2 MOD 5)

2050?? LINE(FNX(XSAVE),FNY(YSAVE))-(FNX(X),FNY(Y)),C

2060?? XSAVE=X:YSAVE=Y

2070? NEXT II

2080? CLOSE #2

2090 NEXT I

2091 'INPUT #2,TEXT$

2092 'IF TEXT$<>"COORDS" THEN 2100

2093 'INPUT #2,FUR.X,FUR.Y

2094 'INPUT #2,FUL.X,FUL.Y

2095 'INPUT #2,FLL.X,FLL.Y

2096 'INPUT #2,FLR.X,FLR.Y

2097 'CLOSE #2

2100 RETURN

2110 *FINE

2120 OPEN FILENAME$+".BAK" AS #2 : CLOSE #2

2130 OPEN FILENAME$ AS #2 : CLOSE #2

2140 KILL FILENAME$+".BAK

2150 NAME FILENAME$ AS FILENAME$+".BAK

2160 OPEN FILENAME$ FOR OUTPUT AS #2

2170 WRITE #2,UR.X,UR.Y

2180 WRITE #2,UL.X,UL.Y

2190 WRITE #2,LL.X,LL.Y

2200 WRITE #2,LR.X,LR.Y

2210 PRINT #2,NCONTEUR

2220 FOR I=1 TO NCONTEUR

2230? WRITE #2,H(I),HN(I),CONJ(I),N$(I)

2240? PRINT N, H(I),HN(I),CONJ(I),N$(I)

2250 NEXT I

2251 PRINT #2,"COORDS"

2252 WRITE #2,FUR.X,FUR.Y

2253 WRITE #2,FUL.X,FUL.Y

2254 WRITE #2,FLL.X,FLL.Y

2255 WRITE #2,FLR.X,FLR.Y

2260 CLOSE #2

2270 RETURN

2300 *CAL.PARAMS '地図座標への変換パラメータを求める

2310 FOR I=0 TO 2:FOR J=0 TO 2:MAT(I,J)=0!:NEXT J:NEXT I

2320 FOR I=0 TO 2

2330? '開発途上国

10000 'データの形式について

10001 '(1)インデックスファイル(ファイル名:"NNNN." 但しNNNNは地図番号4桁)

10002 ' UR.X,UR.Y

10003 '? UL.X,UL.Y

10004 '? LL.X,LL.Y

10005 '? LR.X,LR.Y

10006 '? NCONTEUR(コンタ数)

10007 '?? H(1),HN(1),CONJ(1)

10008 '?? ・・・

10009 '?? H(N),HN(N),CONJ(N)

10010 '

10011 '

10012 '(2)個別コンタラインファイル(ファイル名前:"NNNNKKKK.JJJ"

10013 ' ?? 但し、KKKKは標高4桁、JJJは同標高枝番号)

10014 ' N(点数),HN(同標高枝番号)

10015 ' PX1,PY1

10016 ' PX2,PY2

10017 ' ・・・

10018 ' PXN,PYNこれは、終端条件を示すフラグとなっている。

10019 '? PXN:0の場合:閉じている。

10020 '? PXN,PYN:1左辺2右辺3上辺4下辺と交差

10021 '

Conteur.bas は、一回のセッション(起動から終了まで)の間に、一つのブロック(複数の敷地から成る)を処理します。起動直後にブロック番号を尋ねてくるので入力します。既存のファイルがあれば、それを読込み、続けて新たな敷地の入力を求めてきます。指定されたブロック番号に対応するファイルが存在しなければ、新たなブロックのデータを作成します。

一つのブロックに関して、敷地の数だけのファイルと、そのブロックの敷地全体の属性及び敷地リストを含むマスターファイルが作成されます。これは、以下の形式を有しています。

ブロックマスターファイル 「0001」

2388.5,2057.5? (四隅のドット座標値)

1562,2044

1594,375.667

2420.67,391.667

?6 ????????????????敷地総数

65.68,1,0,"f1301" 標高,通番,種別,名称

65.44,2,0,"f1302t"

65.76,3,0,"f1303t"

65.74,4,0,"f1304t"

65.65,5,0,"f1305c"

65.71,6,0,"f1306"

COORDS

56800,195000

56700,195000

56700,194800

56800,194800

ここに列挙された敷地数だけ、敷地形状を記述したファイルが作成されます。

個々の敷地形状を記述するファイル

?例:「00010065.001」

5,1????????? (頂点数、開始条件)

2127,1545.17? (各頂点のX,Y座標)

2168.83,1641

2073,1645.33

2065.5,1548.5

2127.33,1546

0,0????????? (EOD、終了条件)

個々の敷地形状ファイルの名称は、ブロック番号(4桁)+標高(4桁).敷地通し番号(拡張子3桁)です。開始条件、終了条件は、敷地境界線が、その図幅からはみ出て、隣の地図に繋がる場合などに対応するものです。

これを用いて、ブロック単位のデータを作成したあと、filcon1.exe という小さなプログラムにより、地割記述ファイル(*.LDT)を合成します。このためには、メモ帳等のエディタを用いて、o.cという名前のテキストファイルをコントロール・ファイルとして作成し、filcon1.exe と同じディレクトリに格納した上で、dosコマンドとして filcon1.exe を実行します。filcon1.exeは、以前のヴァージョンで、市街地生成に用いるための地割入力・編集に用いていた filcon.exe を改良したものです。Fullsetでインストールした場合、

\keikan\maju\filcon1

のディレクトリにあります。追加機能等は、以下の通りです。地区全体が複数のブロックから構成されている場合であっても、地区全体の敷地割の状態を示す.ldt ファイルを生成することができます。個々のブロックの入力錯誤訂正や、現況を計画案に差替える場合などは、対応するデータ及び o.c を書換えて、filcon.exe を再実行します。

Filcon.exe の使用方法の拡張について

(970625 福島市役所対応)

DR.H.K.

conteur.basによりディジタイザ入力したファイルをfilcon.exe により、地割ファイルに変換する場合、

●従前(ver.1.0)

?o.c に、地区の名称を指定する

?例: c:\jiwari\0001

●変更後(ver.2.0)

[追加した機能]

・従来の機能はそのまま維持する

・複数のファイルを処理し、一つの地割ファイルに集約する

・不整形敷地・隅切のある敷地等のデータを正しく処理する。

・敷地条件のデータを、地番情報の中に埋め込む

・敷地データを、地番情報に基いて管理する

[修正ヶ所]

・ディジタイザ入力ファイル名を指定する o.c ファイルの仕様を追加する

[使用上での変更点]

?o.c ファイルの1行目に、version2 の1行を追加する。

?o.c ファイルの2行目に、出力ファイル名を記述する。

?3行目以降に、ディジタイザ入力ファイル名を、1行づつ記述する。

?例:

?version2

?c:\keikan\都市開発\仲間町.ldt

?c:\keikan\データ\0001

?c:\keikan\データ\0002

?c:\keikan\データ\0003

?c:\keikan\データ\0004

?c:\keikan\データ\0005

?c:\keikan\データ\0006

?c:\keikan\データ\0007

?

?

970626 区画整理事務所にて追記

・建研で準備・持参した内容

−従来の市街地生成に代え、MAJU.EXE で事業のシミュレーションを支援する。

−角地、隅切り等の敷地条件が記述できるように機能追加

−複数のディジタイザ入力地区を、合成して一体に処理できる機能追加

−交差点の形状データ自動生成(作業中)

?

・本日の作業内容:

−敷地データの入力状況の確認(殆どOK)

−敷地データのTEST.LDTへの合成と、敷地が正常に3次元表示されることの確認

−交差点の3次元形状の細部に関する打ち合わせ

?

・本日までの開発内容の使用上の補足説明

−市街地生成を、 MAJU.EXE にて実施する。

−景観シミュレータの側では、5月20日以降のバージョンを使用する。

? SIM.EXE とMAJU.EXE が協調して動作するための条件:

?? それぞれの実行形式(.EXE)が格納されているディレクトリに、

???? TIMERPATH.TXT

?? というデータファイルがあり、その最初の2行に、

???? MAJU.FLG

???? MAJU.DAT

?? の情報交換用のファイルの所在が記述され、それが一致していること。

?? なお、二つの.EXEが同一ディレクトリに存在する場合には、共通1つで良い。

?

MAJU.EXEの使用方法概略

? 領域条件設定:敷割条件の入力で、.LDTファイルを指定する。

? 領域条件設定:建物初期条件で、.ADA ファイルを指定する。

??? 敷地を確認するだけの場合、建物初期条件は不要。

−ユーティリティで、敷地の表示を行うことができる。

?

−建物初期条件を設定する、.ADA ファイルの形式概要:

? 地番 建築年次 床面積

? 建築タイプ SPD.ADA

? 補足情報

?

以上の3行単位の繰り返しにより、地番で指定した場所の建物現況を指定する。

? 建築年次は、西暦年で示す。

? 床面積は平米数

? 建築タイプは、目下以下の通り

??? -1 なし

???? 0 建築をファイルで指定する(CADで入力した場合等)

?????? その場合、ファイル名称(**.GEO)を続けて記述する。

???? 1 木造平入平屋

???? 2 木造平入2階建

???? 3 店舗併用住宅

???? 4 容積率目一杯ビル

???? 5 寄せ棟平屋(函館)

???? 6 寄せ棟2階家(同上)

? なお、建築タイプは、福島市の実状に合わせて増補する予定。

? 角地については、タイプ指定は同じとし、敷地の特性を見て区別して形状生成する。