
空é解å床ã3ã¡ãŒãã«ã§ãOpenStreetMapïŒPlanetScopeè¡æã³ã³ã¹ãã¬ãŒã·ã§ã³ïŒã®å»ºç©ãã¹ã¯ããªãŒããŒã¬ã€ããããåœè²ïŒç·ãèµ€ãè¿èµ€å€ç·ïŒã®è¡æç»å
ããã«ã¡ã¯ãHabrïŒ åæã«äœ¿çšããããŒã¿ãœãŒã¹ãåžžã«æ¡åŒµããŠãããããè¡æç»åãè¿œå ããããšã«ããŸããã åœç€Ÿã®è¡æç»ååæã¯ãèµ·æ¥å®¶ç²Ÿç¥ãšæè³ã®ããã®è£œåã«åœ¹ç«ã¡ãŸãã åè ã®å ŽåããžãªããŒã¿çµ±èšã¯ãå°å£²åºãéãå Žæãç解ããã®ã«åœ¹ç«ã¡ãŸã;åŸè ã§ã¯ãäŒæ¥ã®æŽ»åãåæã§ããŸãã ããšãã°ã建èšäŒç€Ÿã®å Žåã1ãæã«å»ºãŠãããåºã®æ°ã蟲æ¥äŒç€Ÿã®å Žå-æ œå¹ãããäœç©ã®ãã¯ã¿ãŒã«æ°ãªã©ãèšç®ã§ããŸãã
ãã®èšäºã§ã¯ãå°çã®å®å®ç»åã®å€§ãŸããªæŠå¿µã説æããããšããŸããè¡æç»åã®æäœãéå§ãããšãã«ééããå¯èœæ§ã®ããå°é£ã«ã€ããŠèª¬æããŸãïŒååŠçãåæã®ã¢ã«ãŽãªãºã ãããã³è¡æç»åãšå°çããŒã¿ãæäœããããã®Pythonã©ã€ãã©ãªã§ãã ã ãããã³ã³ãã¥ãŒã¿ããžã§ã³ã®åéã«èå³ã®ããæ¹ã¯ãã«ããããŠãã ããã
ããã§ã¯ãè¡æãæ®åœ±ããŠããã¹ãã¯ãã«é åããå§ããŠãããã€ãã®è¡æã®æ®åœ±æ©åšã®ç¹æ§ãèããŠã¿ãŸãããã
ã¹ãã¯ãã«ã·ã°ããã£ã倧æ°ã®çªãè¡æ
ç°ãªãå°äžè¡šé¢ã«ã¯ãç°ãªãã¹ãã¯ãã«ã·ã°ããã£ããããŸãã ããšãã°ãæ°é®®ãªçæŠå²©è³ªæº¶å²©ãšã¢ã¹ãã¡ã«ãã¯ãç°ãªãéã®èµ€å€ç·ãåå°ããŸãããå¯èŠå ã§ã¯äŒŒãŠããŸãã

也ããèãã¢ã¹ãã¡ã«ããæ°é®®ãªçæŠå²©è³ªæº¶å²©ã®åå°ç
å°çã®è¡šé¢ãšåæ§ã«ã倧æ°äžã®ã¬ã¹ã«ãåºæã®ã¹ãã¯ãã«ç¹æ§ããããŸãã ãã ãããã¹ãŠã®æŸå°ç·ãå°çã®å€§æ°ãééããããã§ã¯ãããŸããã 倧æ°ãééããã¹ãã¯ãã«ç¯å²ã¯ã倧æ°çªããšåŒã°ããè¡æã»ã³ãµãŒã¯ãããã®çªã§æž¬å®ããããã«èª¿æŽãããŠããŸãã

倧æ°çª
æé«ã®ç©ºé解å床ã®1ã€ã§ããè¡æ-WorldView-3 ïŒç©ºé解å床ã¯ãç»åå ã§èå¥å¯èœãªæå°ã®ãªããžã§ã¯ãã®ãµã€ãºãç¹åŸŽä»ããå€ã§ãã倩åºã¯ããã®ç¹ã§éåã®æ¹åãšäžèŽããæ¹åã§ãïŒã
ã¹ãã¯ãã«ç¯å² | ãåå | ç¯å²ãnââm | 倩åºã®ç©ºéå解èœãm |
---|---|---|---|
ãã³ã¯ãããã£ãã¯ïŒ1ãã£ã³ãã«ãã¹ãã¯ãã«ã®å¯èŠéšåãã«ããŒïŒ | 450ã800 | 0.31 | |
ãã«ãã¹ãã¯ãã«ïŒ8ãã£ãã«ïŒ | 沿岞 | 400-450 | 1.24 |
é | 450-510 | ||
ç·è² | 510-580 | ||
é»è² | 585-625 | ||
èµ€ | 630-690 | ||
ã¬ãããšããž | 705-745 | ||
è¿èµ€å€ | 770-895 | ||
è¿èµ€å€ | 860-1040 | ||
çè·é¢ãã«ããã³ãïŒ8ãã£ãã«ïŒ | SWIR-1 | 1195-1225 | 3.70 |
SWIR-2 | 1550-1590 | ||
SWIR-3 | 1640-1680 | ||
SWIR-4 | 1710-1750 | ||
SWIR-5 | 2145-2185 | ||
SWIR-6 | 2185-2225 | ||
SWIR-7 | 2235-2285 | ||
SWIR-8 | 2295-2365 |
ãããã®ãã£ã³ãã«ã«å ããŠãWorldView-3ã«ã¯å€§æ°è£æ£çšã«ç¹å¥ã«èšèšããã12ãã£ã³ãã«ããããŸã-CAVISïŒé²ããšã¢ããŸã«ãèžæ°ãæ°·ãéªïŒçŽäžã§ã®è§£å床30 mãæ³¢é·0.4ãã2.2ãã¯ãã³ã

WorldView-2ããã®äŸ; ãã³ã¯ããã£ã³ãã«

ç°ãªã空é解å床ã®ãµã³ãã«ç»å
ä»ã®èå³æ·±ãè¡æã¯SkySat-1ãšãã®ååã®SkySat-2ã§ãã 圌ãã¯ã30ãã¬ãŒã /ç§ã®åšæ³¢æ°ãš1.1 mã®ç©ºé解å床ã§ã1ã€ã®é åã§æ倧90ç§ç¶ããããªãæ®åœ±ã§ãããšããç¹ã§èå³æ·±ãã§ãã
SkySatè¡æããã®ãããªé²ç»
ãã³ã¯ãããã£ãã¯ãã£ãã«ã®ç©ºéå解èœã¯0.9 mããã«ãã¹ãã¯ãã«ãã£ãã«ïŒéãç·ãèµ€ãè¿èµ€å€ïŒ-2 mã§ãã
ããã«ããã€ãã®äŸïŒ
- PlanetScopeè¡æã³ã³ã¹ãã¬ãŒã·ã§ã³ã¯ãèµ€ãç·ãéãè¿èµ€å€ç·ã§3 mã®ç©ºéå解èœã§èª¿æ»ãå®è¡ããŸãã
- è¡æã³ã³ã¹ãã¬ãŒã·ã§ã³RapidEyeã¯ãèµ€ã極端ãªèµ€ãç·ãéãè¿èµ€å€ã§5 mã®ç©ºéå解èœã§èª¿æ»ãå®æœããŸãã
- ãã·ã¢ã®äžé£ã®è¡æãResource-Pãã¯ããã³ã¯ãããã£ãã¯ãã£ãã«ã§0.7ã1 mããã«ãã¹ãã¯ãã«ãã£ãã«ïŒ8ãã£ãã«ïŒã§3ã4 mã®ç©ºéå解èœã§ã€ã¡ãŒãžã³ã°ãå®è¡ããŸãã
ãã€ããŒã¹ãã¯ãã«ã»ã³ãµãŒã¯ããã«ãã¹ãã¯ãã«ã»ã³ãµãŒãšã¯å¯Ÿç §çã«ãã¹ãã¯ãã«ãå€ãã®çãç¯å²ïŒçŽ100ã200ãã£ãã«ïŒã«åå²ãã10ã80 mã®ç°ãªã次æ°ã®ç©ºéå解èœãæã¡ãŸãã
ãã€ããŒã¹ãã¯ãã«ç»åã¯ããã«ãã¹ãã¯ãã«ç»åã»ã©åºç¯ã§ã¯ãããŸããã ãã€ããŒã¹ãã¯ãã«ã»ã³ãµãŒãæèŒãããŠããå®å®è¹ã¯ã»ãšãã©ãããŸããã ãã®äžã«ã¯ãNASA EO-1è¡ææèŒã®HyperionïŒå»æ¢ïŒã欧å·å®å®æ©é¢ãææããPROBAè¡ææèŒã®CHRISãMightySatIIè¡ææèŒã®FTHSIãç±³åœç©ºè»ç 究æãGAWïŒãã€ããŒã¹ãã¯ãã«æ©åšïŒããã·ã¢ã®å®å®è¹ãªãœãŒã¹Pãã

ãªã³ããŒãã»ã³ãµãŒCASI 1500ããåŠçããããã€ããŒã¹ãã¯ãã«ç»åã æ倧228ãã£ãã«ã ã¹ãã¯ãã«ç¯å²0.4-1 nm

EO-1ã¹ããŒã¹ã»ã³ãµãŒããã®åŠçæžã¿ç»åã 220ãã£ã³ãã« ã¹ãã¯ãã«ç¯å²0.4-2.5 nm
ãã«ããã£ã³ãã«ç»åã®äœæ¥ãç°¡çŽ åããããã«ãçŽç²ãªçŽ æã®ã©ã€ãã©ãªããããŸã ã çŽç²ãªææã®åå°çã瀺ããŠããŸãã
ç»åã®ååŠç
ç»åã®åæãé²ããåã«ãäºååŠçãå®è¡ããå¿ èŠããããŸãã
- ãžãªãªãã¡ã¬ã³ã¹;
- ãªã«ãœè£æ£;
- æŸå°è£æ£ãšãã£ãªãã¬ãŒã·ã§ã³ã
- 倧æ°è£æ£ã
è¡æç»åã®ãµãã©ã€ã€ã¯ãç»åãååŠçããããã«è¿œå ã®æž¬å®ãè¡ããåŠçæžã¿ç»åãšèªå·±è£æ£ã®ããã®è¿œå æ å ±ãå«ãçç»åã®äž¡æ¹ãæäŸã§ããŸãã
ãŸããè¡æç»åã®è²è£æ£ã«ã€ããŠãèšåãã䟡å€ããããŸããèªç¶ãªè²ïŒèµ€ãç·ãéïŒã®ç»åãã人ã«ãšã£ãŠèŠæ £ãããã¥ãŒã«ããããšãã§ããŸãã
ããããã®ãžãªãã±ãŒã·ã§ã³ã¯ãè»éäžã®è¡æã®åæäœçœ®ãšç»åãžãªã¡ããªã«ãã£ãŠèšç®ãããŸãã å°çåç §ã¯ãå°äžç®¡çç¹ïŒGCPïŒã«ãã£ãŠæŽç·ŽãããŠããŸãã ãããã®å¶åŸ¡ç¹ã¯ããããšç»åã§æ€çŽ¢ãããç°ãªã座æšç³»ã§ã®åº§æšãããã£ãŠããããããã座æšç³»ããå¥ã®åº§æšç³»ãžã®å€æãã©ã¡ãŒã¿ãŒïŒå ±åœ¢ãã¢ãã£ã³ãé è¿æ³ãŸãã¯å€é åŒïŒãèŠã€ããããšãã§ããŸãã GCPæ€çŽ¢ã¯ãGPSæ®åœ±ã䜿çšããŠå®è¡ãããŸã [ ãœãŒã¹ã 1ç§ 230ã ãœãŒã¹ 2 ]ãŸãã¯GCP座æšãæ£ç¢ºã«ããã£ãŠãã2ã€ã®ç»åãããŒãã€ã³ãã§æ¯èŒããããšã«ãã£ãŠã
ãªã«ãœç»åè£æ£ã¯ã幟äœåŠçç»åè£æ£ã®ããã»ã¹ã§ãããé è¿æ³ã®æªã¿ãå転ãã¬ã³ãºã®æªã¿ãªã©ã«èµ·å ããæªã¿ãé€å»ããŸãã ç»åã¯èšç»ãããæ圱ã«çž®å°ãããŸããã€ãŸããå°åœ¢ã®åãã€ã³ããå³å¯ã«åçŽæ¹åã«çŽäžã§èŠ³æž¬ãããæ圱ã«çž®å°ãããŸãã
è¡æã¯éåžžã«é«ãé«åºŠïŒæ°çŸããã¡ãŒãã«ïŒããæ®åœ±ããŠãããããçŽäžã§æ®åœ±ããå Žåãæªã¿ã¯æå°éã«æããå¿ èŠããããŸãã ããããå®å®è¹ã¯çŽäžã§åžžã«åçãæ®ãããšã¯ã§ããŸããããããªããšãç¹å®ã®å°ç¹ãééããç¬éãåŸ ã€ã®ã«éåžžã«é·ãæéãããããŸãã ãã®æ¬ ç¹ã解æ¶ããããã«ãè¡æã¯ãå®æãããŠãããã»ãšãã©ã®ãã¬ãŒã ã¯ææã§ãã æ®åœ±è§åºŠã¯45床ã«éããå¯èœæ§ããããé«é«åºŠã§ã¯ãããå€§å¹ ãªæªã¿ã«ã€ãªããããšã«æ³šæããŠãã ããã
ç»åã®æž¬å®ããã³äœçœ®ç¹æ§ãå¿ èŠãªå Žåã¯ããªã«ãœè£æ£ãå®è¡ããå¿ èŠããããŸãã è¿œå ã®æäœã«ããç»è³ªãäœäžããŸãã ããã¯ãåç»åã©ã€ã³ã®ã¬ãžã¹ãã¬ãŒã·ã§ã³æã«ã»ã³ãµãŒã®ãžãªã¡ããªãåæ§ç¯ããã©ã¹ã¿ãŒåœ¢åŒã§ã¬ãªãŒããè¡šãããšã«ããå®è¡ãããŸãã
è¡æã«ã¡ã©ã¢ãã«ã¯ãäžè¬åãããè¿äŒŒé¢æ°ïŒæçå€é åŒ-RPCä¿æ°ïŒã®åœ¢åŒã§è¡šãããé«åºŠããŒã¿ã¯ãå°åœ¢å³ãç«äœæž¬éãã¬ãŒããŒããŒã¿ããŸãã¯äžè¬çã«å©çšå¯èœãªå€§ãŸããªããžã¿ã«æšé«ã¢ãã«ããã®èŒªéã䜿çšããå°äžæž¬å®ã®çµæãšããŠååŸã§ããŸãïŒSRTMïŒè§£å床30-90 mïŒããã³ASTER GDEMïŒè§£å床ïŒ15-90 mïŒã
æŸå°è£æ£-䜿çšããæ®åœ±ããã€ã¹ã®ç¹æ§ã«ããããŒããŠã§ã¢æŸå°ã²ãã¿ã®ç»åã®äºåæºå段éã§ã®è£æ£ã
ã¹ãã£ããŒãã£ã«ã ããã€ã¹ã®å Žåããã®ãããªæ¬ é¥ã¯ç»åå€èª¿ãšããŠèŠèŠçã«èŠ³å¯ãããŸãïŒåçŽããã³æ°Žå¹³ã¹ãã©ã€ãïŒã æŸå°è£æ£ã¯ãäžè¯ç»åãã¯ã»ã«ãšããŠèŠ³å¯ãããç»åæ¬ é¥ãé€å»ããŸãã

äžè¯ãã¯ã»ã«ãšçžŠçžã®é€å»
æŸå°è£æ£ã¯ã次ã®2ã€ã®æ¹æ³ã§å®è¡ãããŸãã
- 調æ»æ©åšã®æ¢ç¥ã®ãã©ã¡ãŒã¿ãŒãšèšå®ã®äœ¿çšïŒè£æ£ããŒãã«ïŒ;
- çµ±èšçã«ã
æåã®ã±ãŒã¹ã§ã¯ãé·æéã®å°äžè©Šéšãšé£è¡è©Šéšã«åºã¥ããŠã調æ»æ©åšã«å¿ èŠãªè£æ£ãã©ã¡ãŒã¿ã決å®ãããŸãã çµ±èšçæ¹æ³ã«ããä¿®æ£ã¯ãä¿®æ£ãããç»åèªäœããçŽæ¥æ¬ é¥ãšãã®ç¹åŸŽãèå¥ããããšã«ããå®è¡ãããŸãã
ç»åã®ã©ãžãªã¡ããªãã¯ãã£ãªãã¬ãŒã·ã§ã³âèŒåºŠã®ãçã®å€ããä»ã®ç»åã®ããŒã¿ãšæ¯èŒã§ããç©çåäœã«å€æããŸãã
ã©ã㧠-ã¹ãã¯ãã«ãŸãŒã³ã®ãšãã«ã®ãŒèŒåºŠ ;
-çã®èŒåºŠå€;
-æ ¡æ£ä¿æ°;
ãã£ãªãã¬ãŒã·ã§ã³å®æ°ã§ãã
è¡æã®é»ç£æŸå°ã¯ãã»ã³ãµãŒã«ãã£ãŠæ€åºãããåã«ãå°çã®å€§æ°ã2åééããŸãã 倧æ°ã®åœ±é¿ã«ã¯ãæ£ä¹±ãšåžåãšãã2ã€ã®äž»ãªå¹æããããŸãã 倧æ°äžã®ã¬ã¹ã®ç²åãšååãé»ç£æŸå°ãšçžäºäœçšããå ã®çµè·¯ããååãããšãæ£ä¹±ãçºçããŸãã åžåäžãæŸå°ãšãã«ã®ãŒã®äžéšã¯åžåååã®å éšãšãã«ã®ãŒã«å€æããããã®çµæã倧æ°ãå ç±ãããŸãã é»ç£æ³¢æŸå°ã«å¯Ÿããæ£ä¹±ãšåžåã®åœ±é¿ã¯ãã¹ãã¯ãã«ã®ããéšåããå¥ã®éšåãžã®é·ç§»ã«ãã£ãŠå€åããŸãã

è¡æã»ã³ãµãŒã«å ¥ãåå°æ¥å°ã«åœ±é¿ããèŠå
倧æ°è£æ£ãå®è¡ããããã®ããŸããŸãªã¢ã«ãŽãªãºã ããããŸãïŒããšãã°ã DOSã¡ãœãã-Dark Object Subtraction ïŒã ã¢ãã«ã®å ¥åãã©ã¡ãŒã¿ãŒã¯ã倪éœãšã»ã³ãµãŒã®äœçœ®ã®ãžãªã¡ããªãæ°äœæåã®å€§æ°ã¢ãã«ããšã¢ããŸã«ã¢ãã«ïŒã¿ã€ããšæ¿åºŠïŒã倧æ°ã®å åŠçåããè¡šé¢åå°ä¿æ°ãã¹ãã¯ãã«ãã£ãã«ã§ãã
倧æ°è£æ£ã§ã¯ãç»åãããã€ãºãé€å»ããããã®ã¢ã«ãŽãªãºã ãé©çšããããšãã§ããŸã- ããŒã¯ãã£ã³ãã«äºåååžã䜿çšããåäžã€ã¡ãŒãžã®ãã€ãºé€å» ïŒ å®è£ ïŒã

ããŒã¯ãã£ã³ãã«äºåååžã䜿çšããåäžç»åãã€ãºé€å»ã®ã±ãŒã¹ã¹ã¿ãã£
ã€ã³ããã¯ã¹ç»å
ãã«ããã£ãã«ç»åãããªããžã§ã¯ãã調ã¹ãå ŽåãéèŠãªã®ã¯çµ¶å¯Ÿå€ã§ã¯ãªããããŸããŸãªã¹ãã¯ãã«ãŸãŒã³ã®ãªããžã§ã¯ãã®èŒåºŠå€ã®ç¹æ§é¢ä¿ã§ããããšããããããŸãã ãããè¡ãã«ã¯ãããããã€ã³ããã¯ã¹ã€ã¡ãŒãžãæ§ç¯ããŸãã ãã®ãããªç»åã§ã¯ãå ã®ç»åãšã¯å¯Ÿç §çã«ãç®çã®ãªããžã§ã¯ããããã¯ã£ãããšç®ç«ã¡ãŸãã
ã€ã³ããã¯ã¹å | ãã©ãŒãã¥ã© | ç³èŸŒã¿ |
---|---|---|
é žåéææ° | èµ€/é | é žåéãæ€åºããã«ã¯ |
ç²åé±ç©ææ° | äžèµ€å€ç·ãã£ãã«ïŒCIRïŒå ã®èŒåºŠå€ã®æ¯çã CIK1 / CIK2ãããã§CIK1ã¯1.55ãã1.75ãã¯ãã³ã®ç¯å²ãCIK2ã¯2.08ãã2.35ãã¯ãã³ã®ç¯å² | ç²åé±ç©ãæ€åºããã«ã¯ |
éé±ç©ææ° | å¹³åèµ€å€ç·ïŒSIK1; 1.55ã1.75ÎŒmïŒãã£ãã«ã®èŒåºŠå€ãšè¿èµ€å€ç·ãã£ãã«ïŒNIRïŒã®èŒåºŠå€ã®æ¯çã SIK1 / BIK | è ºããã©ã«ã®å«æéãæ€åºãã |
ã¬ããã«ã©ãŒã€ã³ããã¯ã¹ïŒRIïŒ | èµ€ïŒKïŒãšç·ïŒHïŒã®ç¯å²ã®èµ€è²ã®é±ç©ã®åå°çã®éãã«åºã¥ããŸãã RI =ïŒK-3ïŒ/ïŒK + 3ïŒ | åå£äžã®é žåéãæ€åºãã |
æ£èŠåããã埮åéªææ°ïŒNDSIïŒ | NDSIã¯ãèµ€ïŒKïŒãšç波赀å€ç·ïŒKIKïŒã®ç¯å²ã®éªã®åå°çã®å·®ã«ãã£ãŠç¹åŸŽä»ããããçžå¯Ÿå€ã§ãã
NDSI =ïŒK-KIKïŒ/ïŒK + KIKïŒ | éªã§èŠãããé åã匷調ããããã«äœ¿çšãããŸãã éªã®å ŽåNDSI> 0.4 |
æ°Žææ°ïŒWIïŒ | WI = 0.90ÎŒm/ 0.97ÎŒm | ãã€ããŒã¹ãã¯ãã«ç»åããæ€çã®æ°Žåéã決å®ããããã«äœ¿çšãããŸãã |
æ£èŠåããã埮åæ€çææ°ïŒNDVIïŒ | æ€ç©ã®èã®ã¯ãããã£ã«ã¯ãé»ç£ã¹ãã¯ãã«ã®è¿èµ€å€ç·ïŒNIRïŒç¯å²ã®æŸå°ãåå°ããèµ€ïŒKïŒã§åžåããŸãã ããã2ã€ã®ãã£ã³ãã«ã®èŒåºŠå€ã®æ¯çã«ãããéèãä»ã®èªç¶ç©ããæ確ã«åé¢ããŠåæããããšãã§ããŸãã
NDVI =ïŒNIR-KïŒ/ïŒNIR + KïŒ | æ€çã®ååšãšç¶æ
ã瀺ããŸãã NDVIå€ã®ç¯å²ã¯-1ã1ã§ãã
å¯ãªæ€çïŒ0.7; çæ€çïŒ0.5; éããåïŒ0.025; é²ïŒ0; éªãšæ°·ïŒ-0.05; æ°ŽïŒ-0.25; 人工ææïŒã³ã³ã¯ãªãŒããã¢ã¹ãã¡ã«ãïŒïŒ-0.5 |
Pythonã§è¡æç»åãæäœãã
è¡æç»åãä¿åããã®ãäžè¬çãªåœ¢åŒã®1ã€ã«GeoTiffããããŸãïŒããã«éå®ãããŸãïŒã Pythonã§GeoTiffã䜿çšããã«ã¯ã gdalãŸãã¯rasterioã©ã€ãã©ãªã䜿çšã§ããŸãã
gdalãšrasterioãã€ã³ã¹ããŒã«ããã«ã¯ãcondaã䜿çšããããšããå§ãããŸãã
conda install -c conda-forge gdal conda install -c conda-forge rasterio
ä»ã®è¡æç»åã©ã€ãã©ãªã¯ãpipãä»ããŠç°¡åã«ã€ã³ã¹ããŒã«ã§ããŸãã
gdalãä»ããGeoTiffã®èªã¿åãïŒ
from osgeo import gdal import numpy as np src_ds = gdal.Open('image.tif') img = src_ds.ReadAsArray() #height, width, band img = np.rollaxis(img, 0, 3) width = src_ds.RasterXSize height = src_ds.RasterYSize gt = src_ds.GetGeoTransform() # minx = gt[0] miny = gt[3] + width*gt[4] + height*gt[5] maxx = gt[0] + width*gt[1] + height*gt[2] maxy = gt[3]
è¡æç»åã«ã¯å€ãã®åº§æšç³»ããããŸãã ãããã¯ãå°ç座æšç³»ïŒGCSïŒãšå¹³é¢åº§æšç³»ïŒGCSïŒã®2ã€ã®ã°ã«ãŒãã«åããããšãã§ããŸãã
GSKã§ã¯ã枬å®åäœã¯è§åºŠã§ã座æšã¯10é²åºŠã§è¡šãããŸãã æãæåãªHSCã¯WGS 84ïŒEPSGïŒ4326ïŒã§ãã
UCSã§ã¯ãåäœã¯ç·åœ¢ã§ããã座æšã¯ã¡ãŒãã«ããã£ãŒããããã¡ãŒãã«ãªã©ã§è¡šçŸã§ãããããç·åœ¢ã«è£éã§ããŸãã GSKããPSKã«åãæ¿ããã«ã¯ãå°å³æ圱æ³ã䜿çšãããŸãã æãæåãªæ圱æ³ã®1ã€ã¯ã¡ã«ã«ãã«å³æ³ã§ãã
éåžžããããïŒç»åã®ããŒã¯ã¢ããïŒã¯ã©ã¹ã¿ãŒåœ¢åŒã§ã¯ãªãããã€ã³ããã©ã€ã³ãããªãŽã³ã®åœ¢åŒã§ä¿åããŸãã ãããã®å¹ŸäœåŠçãªããžã§ã¯ãã®é ç¹ã®å°ç座æšã¯ãç»åã®ããŒã¯ã¢ãããšãšãã«ãã¡ã€ã«å ã«ä¿åãããŸãã fionaããã³shapelyã©ã€ãã©ãªã䜿çšããŠãããããèªã¿åããæäœã§ããŸãã
ããªãŽã³ãã©ã¹ã¿ã©ã€ãºããããã®ã¹ã¯ãªããïŒ
import numpy as np import rasterio #fiona , shp geojson import fiona import cv2 from shapely.geometry import shape from shapely.ops import cascaded_union from shapely.ops import transform from shapely.geometry import MultiPolygon def rasterize_polygons(img_mask, polygons): if not polygons: return img_mask if polygons.geom_type == 'Polygon': polygons = MultiPolygon([polygons]) int_coords = lambda x: np.array(x).round().astype(np.int32) exteriors = [int_coords(poly.exterior.coords) for poly in polygons] interiors = [int_coords(pi.coords) for poly in polygons for pi in poly.interiors] cv2.fillPoly(img_mask, exteriors, 255) cv2.fillPoly(img_mask, interiors, 0) return img_mask def get_polygons(shapefile): geoms = [feature["geometry"] for feature in shapefile] polygons = list() for g in geoms: s = shape(g) if s.geom_type == 'Polygon': if s.is_valid: polygons.append(s) else: # polygons.append(s.buffer(0)) elif s.geom_type == 'MultiPolygon': for p in s: if p.is_valid: polygons.append(p) else: # polygons.append(p.buffer(0)) mpolygon = cascaded_union(polygons) return mpolygon # geojson src = rasterio.open('image.tif') shapefile = fiona.open('buildings.geojson', "r") # ( ) left = src.bounds.left right = src.bounds.right bottom = src.bounds.bottom top = src.bounds.top height,width = src.shape # mpolygon = get_polygons(shapefile) # , mpolygon = transform(lambda x, y, z=None: (width * (x - left) / float(right - left),\ height - height * (y - bottom) / float(top - bottom)), mpolygon) # real_mask = np.zeros((height,width), np.uint8) real_mask = rasterize_polygons(real_mask, mpolygon)
ç»åã®åŸ©å·åäžã«ã亀差ããããªãŽã³ã®æäœãå¿ èŠã«ãªãå ŽåããããŸãïŒããšãã°ãå°å³äžã®å»ºç©ã«èªåçã«ããŒã¯ãä»ãããé²ãããç»åã®ãããã®å Žæã«ãã建ç©ã®ããŒã¯ã¢ãããèªåçã«åé€ãããïŒã ããã«ã¯Wyler-Athertonã¢ã«ãŽãªãºã ããããŸãããèªå·±äº€å·®ã®ãªãããªãŽã³ã§ã®ã¿æ©èœããŸãã èªå·±äº€å·®ã解æ¶ããã«ã¯ããã¹ãŠã®ãšããžãšããªãŽã³ã®ä»ã®ãšããžã®äº€å·®ã確èªããæ°ããé ç¹ãè¿œå ããå¿ èŠããããŸãã ãããã®é ç¹ã¯ã察å¿ãããšããžãæçã«åå²ããŸãã ã·ã§ã€ããªãŒã©ã€ãã©ãªã«ã¯ãèªå·±äº€å·®ãæé€ããæ¹æ³ããããŸã-ãããã¡ïŒ0ïŒã
GSKããUCSã«è»¢éããã«ã¯ãPyProjã©ã€ãã©ãªã䜿çšã§ããŸãïŒãŸãã¯ãrasterioã§å®è¡ã§ããŸãïŒã
# epsg:4326 epsg:32637 ( ) def wgs84_to_32637(lon, lat): from pyproj import Proj, transform inProj = Proj(init='epsg:4326') outProj = Proj(init='epsg:32637') x,y = transform(inProj,outProj,lon,lat) return x,y
äž»æåæ³
ç»åã«3ã€ä»¥äžã®ã¹ãã¯ãã«ãã£ãã«ãå«ãŸããå Žåã3ã€ã®äž»èŠãªã³ã³ããŒãã³ãã®ã«ã©ãŒç»åãäœæã§ããŸããããã«ãããæ å ±ã®é¡èãªæ倱ãªãã«ããŒã¿éãåæžã§ããŸãã
ãã®ãããªå€æã¯ã1ã€ãŸãã¯2ã€ã®ã³ã³ããŒãã³ãã§æ確ã«çŸãããã€ããã¯ã¹ãèå¥ããããã«ãç°ãªãæéã«æ®åœ±ãããäžé£ã®ç»åã«å¯ŸããŠãå®è¡ãããåäžã®åº§æšç³»ã«åã蟌ãŸããŸãã
4ãã£ã³ãã«ç»åã3ãã£ã³ãã«ã«å§çž®ããã¹ã¯ãªããïŒ
from osgeo import gdal from sklearn.decomposition import IncrementalPCA from sklearn import preprocessing import numpy as np import matplotlib.pyplot as plt # , height, width, band , PCA src_ds = gdal.Open('0.tif') img = src_ds.ReadAsArray() img = np.rollaxis(img, 0, 3)[300:1000, 700:1700, :] height, width, bands = img.shape # PCA data = img.reshape((height * width, 4)).astype(np.float) num_data, dim = data.shape pca = IncrementalPCA(n_components = 3, whiten = True) #c ( ) x = preprocessing.scale(data) # y = pca.fit_transform(x) y = y.reshape((height, width, 3)) # for idx in range(0, 3): band_max = y[:, :, idx].max() y[:, :, idx] = np.around(y[:, :, idx] * 255.0 / band_max).astype(np.uint8)

PlanetScopeãµãã©ã€ãã°ã«ãŒãã®ç»åïŒèµ€ãç·ãéãè²è£æ£ãªãïŒ

PlanetScopeè¡æã°ã«ãŒãã®ç»åïŒç·ãèµ€ãè¿èµ€å€ç·ïŒ

äž»æåæ³ã䜿çšããŠæ®åœ±ãããã¹ãããã·ã§ãã
ã¹ãã¯ãã«æ··åæ³
ã¹ãã¯ãã«åé¢æ³ã¯ããã¯ã»ã«ãµã€ãºããã¯ããã«å°ããç»åå ã®ãªããžã§ã¯ããèªèããããã«äœ¿çšãããŸãã
ãã®æ¹æ³ã®æ¬è³ªã¯æ¬¡ã®ãšããã§ããæ··åã¹ãã¯ãã«ã¯ãæ¢ç¥ã®çŽç²ãªã¹ãã¯ãã«ãšæ¯èŒããããšã«ãã£ãŠåæãããŸããããšãã°ãæ¢ã«è¿°ã¹ãçŽç²ãªææã®ã¹ãã¯ãã«ã©ã€ãã©ãªããã§ãã ãã®æ¢ç¥ã®ïŒã¯ãªãŒã³ãªïŒã¹ãã¯ãã«ãšåãã¯ã»ã«ã®ã¹ãã¯ãã«å ã®äžçŽç©ã®æ¯çã®å®éçè©äŸ¡ãè¡ãããŸãã ãã®ãããªè©äŸ¡ãå®è¡ããåŸããã¯ã»ã«ã®è²ããã®ãã¯ã»ã«ã®ã¹ãã¯ãã«ã§ã©ã®æåãåªå¢ã§ããããæå³ããããã«ãã€ã³ããããç»åãååŸã§ããŸãã

æ··åã¹ãã¯ãã«æ²ç·

埩å·åãããã¹ãããã·ã§ãã
è¡æç»åã®ã»ã°ã¡ã³ããŒã·ã§ã³
çŸæç¹ã§ã¯ããã€ããªã€ã¡ãŒãžã»ã°ã¡ã³ããŒã·ã§ã³ã¿ã¹ã¯ã®æå 端ã®çµæã¯ã U-Net ã¢ãã«ã® å€æŽã瀺ããŠããŸãã

U-Netã¢ãã«ã®ã¢ãŒããã¯ãã£ïŒåºåç»åã®ãµã€ãºã¯å ¥åç»åã®ãµã€ãºãããå°ãããããã¯ããããã¯ãŒã¯ãç»åã®ç«¯ã§ããæªãäºæž¬ãããããã«è¡ãããïŒ
U-Netã®èè ã¯ãå¥ã®ã¢ãã«ã«åºã¥ãã¢ãŒããã¯ãã£ãéçºããŸãããããã¯ãç³ã¿èŸŒã¿ã¯ãŒãã®ã¿ãç¹åŸŽãšããïŒæ倧ããŒãªã³ã°ãã«ãŠã³ãããªãïŒå®å šç³ã¿èŸŒã¿ãããã¯ãŒã¯ïŒFCNïŒã§ãã
U-Netã¯ãæ倧ããŒãªã³ã°ãã¢ããã³ã³ããªã¥ãŒã·ã§ã³ã«çœ®ãæããããã¬ã€ã€ãŒãè¿œå ããããšããç¹ã§FCNãšç°ãªããŸãã ãããã£ãŠãæ°ããã¬ã€ã€ãŒã¯åºå解å床ãåŸã ã«é«ããŸãã ãŸãããšã³ã³ãŒããŒéšåããã®èšå·ã¯ããã³ãŒããŒéšåããã®èšå·ãšçµåããããããè¿œå æ å ±ã«ããã¢ãã«ã¯ããæ£ç¢ºãªäºæž¬ãè¡ãããšãã§ããŸãã
ãšã³ã³ãŒããŒéšåãããã³ãŒããŒéšåãžã®æ©èœè»¢éããªãã¢ãã«ã¯SegNetãšåŒã°ããå®éã«ã¯U-Netãããæªãçµæã瀺ããŸãã

æ倧ããŒãªã³ã°

ã¢ããã³ã³ããªã¥ãŒã·ã§ã³
U-NetãSegnetãFCNã«ç»åã®ãµã€ãºã«é¢é£ä»ããããŠããã¬ã€ã€ãŒããªããããç°ãªããµã€ãºã®ç»åãåããããã¯ãŒã¯ã®å ¥åã«éä¿¡ã§ããŸãïŒç»åãµã€ãºã¯ãæåã®ç³ã¿èŸŒã¿ã¬ã€ã€ãŒã®ãã£ã«ã¿ãŒã®æ°ã®åæ°ã§ãªããã°ãªããŸããïŒã
kerasã§ã¯ãããã¯æ¬¡ã®ããã«å®è£ ãããŸãã
inputs = Input((channel_number, None, None))
äºæž¬ãšåæ§ã«ããã¬ãŒãã³ã°ã¯ãGPUã¡ã¢ãªãèš±å¯ããå Žåãç»åãã©ã°ã¡ã³ãïŒã¯ãããïŒãŸãã¯ç»åå šäœã®ããããã§å®è¡ã§ããŸãã ããã«ãæåã®å ŽåïŒ
1ïŒãããã®ãµã€ãºã倧ãããªããããŒã¿ã«ãã€ãºãå€ããç°çš®ã®å Žåãã¢ãã«ã®ç²ŸåºŠã«å€§ãã圱é¿ããŸãã
2ïŒåãã¬ãŒãã³ã°ã®ãªã¹ã¯ãå°ãªã ãã«ãµã€ãºã®ç»åã§ãã¬ãŒãã³ã°ããå Žåãããã¯ããã«å€ãã®ããŒã¿ããããŸãã
ãã ããã¯ãããã§åŠç¿ããå Žåããšããžå¹æã¯ããé¡èã«ãªããŸã-ãããã¯ãŒã¯ã¯ãäžå€®ã«è¿ãé åãããç»åã®ãšããžã§äºæž¬ã®ç²ŸåºŠãäœããªããŸãïŒäºæž¬ãã€ã³ããå¢çã«è¿ãã»ã©ã次ã®æ å ±ãå°ãªããªããŸãïŒã ãã®åé¡ã¯ãå¢çäžã®é åããªãŒããŒã©ããããã³ç Žæ£ãŸãã¯å¹³ååãããã©ã°ã¡ã³ãã®ãã¹ã¯ãäºæž¬ããããšã§è§£æ±ºã§ããŸãã
U-Netã¯ããã€ããªã»ã°ã¡ã³ããŒã·ã§ã³ã®ã¿ã¹ã¯ã®ããã®ã·ã³ãã«ã§åŒ·åãªã¢ãŒããã¯ãã£ã§ããgithubã§ã¯ãDLãã¬ãŒã ã¯ãŒã¯ã®è€æ°ã®å®è£ ãèŠã€ããããšãã§ããŸãããå€æ°ã®ã¯ã©ã¹ãã»ã°ã¡ã³ãåãããšããã®ã¢ãŒããã¯ãã£ã¯PSP-Netãªã©ã®ä»ã®ã¢ãŒããã¯ãã£ã«å€±ãããŸãã ããã§ã¯ãã»ãã³ãã£ãã¯ã€ã¡ãŒãžã»ã°ã¡ã³ããŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ã®èå³æ·±ãæŠèŠãèªãããšãã§ããŸãã
建ç©ã®é«ãã®æ±ºå®
建ç©ã®é«ãã¯ã圱ã«ãã£ãŠæ±ºãŸããŸãã ãããè¡ãã«ã¯ãã¡ãŒãã«åäœã®ãã¯ã»ã«ãµã€ãºããã¯ã»ã«åäœã®åœ±ã®é·ããããã³å€ªéœïŒå€ªéœïŒã®ä»°è§ïŒæ°Žå¹³ç·äžã®å€ªéœã®è§åºŠïŒãç¥ãå¿ èŠããããŸãã

倪éœãè¡æã建ç©ã®ãžãªã¡ããª
ã¿ã¹ã¯ã®å šäœçãªé£ããã¯ã建ç©ã®åœ±ãå¯èœãªéãæ£ç¢ºã«ã»ã°ã¡ã³ãåãã圱ã®é·ãããã¯ã»ã«åäœã§æ±ºå®ããããšã§ãã ç»åå ã®é²ã®ååšãåé¡ã«è¿œå ãããŸãã
建ç©ã®é«ãã決å®ããããã®ããæ£ç¢ºãªæ¹æ³ããããŸãã ããšãã°ãå°å¹³ç·äžã®è¡æã®è§åºŠãèæ ®ããããšãã§ããŸãã
å°ç座æšã«ãã£ãŠå»ºç©ã®é«ãã決å®ããããã®ãµã³ãã«ã¹ã¯ãªãã
import pandas as pd import numpy as np import rasterio import math import cv2 from shapely.geometry import Point # ( ) # remove_small_objects remove_small_holes skimage def filterByLength(input, length, more=True): import Queue as queue copy = input.copy() output = np.zeros_like(input) for i in range(input.shape[0]): for j in range(input.shape[1]): if (copy[i][j] == 255): q_coords = queue.Queue() output_coords = list() copy[i][j] = 100 q_coords.put([i,j]) output_coords.append([i,j]) while(q_coords.empty() == False): currentCenter = q_coords.get() for idx1 in range(3): for idx2 in range(3): offset1 = - 1 + idx1 offset2 = - 1 + idx2 currentPoint = [currentCenter[0] + offset1, currentCenter[1] + offset2] if (currentPoint[0] >= 0 and currentPoint[0] < input.shape[0]): if (currentPoint[1] >= 0 and currentPoint[1] < input.shape[1]): if (copy[currentPoint[0]][currentPoint[1]] == 255): copy[currentPoint[0]][currentPoint[1]] = 100 q_coords.put(currentPoint) output_coords.append(currentPoint) if (more == True): if (len(output_coords) >= length): for coord in output_coords: output[coord[0]][coord[1]] = 255 else: if (len(output_coords) < length): for coord in output_coords: output[coord[0]][coord[1]] = 255 return output # epsg:32637 epsg:4326 def getLongLat(x1, y1): from pyproj import Proj, transform inProj = Proj(init='epsg:32637') outProj = Proj(init='epsg:4326') x2,y2 = transform(inProj,outProj,x1,y1) return x2,y2 # epsg:4326 epsg:32637 def get32637(x1, y1): from pyproj import Proj, transform inProj = Proj(init='epsg:4326') outProj = Proj(init='epsg:32637') x2,y2 = transform(inProj,outProj,x1,y1) return x2,y2 # epsg:32637 () def crsToPixs(width, height, left, right, bottom, top, coords): x = coords.xy[0][0] y = coords.xy[1][0] x = width * (x - left) / (right - left) y = height - height * (y - bottom) / (top - bottom) x = int(math.ceil(x)) y = int(math.ceil(y)) return x,y # def shadowSegmentation(roi, threshold = 60): thresh = cv2.equalizeHist(roi) ret, thresh = cv2.threshold(thresh,threshold,255,cv2.THRESH_BINARY_INV) tmp = filterByLength(thresh, 50) if np.count_nonzero(tmp) != 0: thresh = tmp return thresh # () ; x,y - thresh def getShadowSize(thresh, x, y): # min_dist = thresh.shape[0] min_dist_coords = (0, 0) for i in range(thresh.shape[0]): for j in range(thresh.shape[1]): if (thresh[i,j] == 255) and (math.sqrt( (i - y) * (i - y) + (j - x) * (j - x) ) < min_dist): min_dist = math.sqrt( (i - y) * (i - y) + (j - x) * (j - x) ) min_dist_coords = (i, j) #y,x # , import Queue as queue q_coords = queue.Queue() q_coords.put(min_dist_coords) mask = thresh.copy() output_coords = list() output_coords.append(min_dist_coords) while q_coords.empty() == False: currentCenter = q_coords.get() for idx1 in range(3): for idx2 in range(3): offset1 = - 1 + idx1 offset2 = - 1 + idx2 currentPoint = [currentCenter[0] + offset1, currentCenter[1] + offset2] if (currentPoint[0] >= 0 and currentPoint[0] < mask.shape[0]): if (currentPoint[1] >= 0 and currentPoint[1] < mask.shape[1]): if (mask[currentPoint[0]][currentPoint[1]] == 255): mask[currentPoint[0]][currentPoint[1]] = 100 q_coords.put(currentPoint) output_coords.append(currentPoint) # mask = np.zeros_like(mask) for i in range(len(output_coords)): mask[output_coords[i][0]][output_coords[i][1]] = 255 # () erode kernel = np.ones((3,3),np.uint8) i = 0 while np.count_nonzero(mask) != 0: mask = cv2.erode(mask,kernel,iterations = 1) i += 1 return i + 1 # , def getNoCloudArea(b, g, r, n): gray = (b + g + r + n) / 4.0 band_max = np.max(gray) gray = np.around(gray * 255.0 / band_max).astype(np.uint8) gray[gray == 0] = 255 ret, no_cloud_area = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY) kernel = np.ones((50, 50), np.uint8) no_cloud_area = cv2.morphologyEx(no_cloud_area, cv2.MORPH_OPEN, kernel) kernel = np.ones((100, 100), np.uint8) no_cloud_area = cv2.morphologyEx(no_cloud_area, cv2.MORPH_DILATE, kernel) no_cloud_area = cv2.morphologyEx(no_cloud_area, cv2.MORPH_DILATE, kernel) no_cloud_area = 255 - no_cloud_area return no_cloud_area # csv lat,long,height df = pd.read_csv('buildings.csv') # csv image_df = pd.read_csv('geotiff.csv') # sun_elevation = image_df['sun_elevation'].values[0] with rasterio.open('image.tif') as src: # # epsg:32637 left = src.bounds.left right = src.bounds.right bottom = src.bounds.bottom top = src.bounds.top height,width = src.shape b, g, r, n = map(src.read, (1, 2, 3, 4)) # , .. band_max = g.max() img = np.around(g * 255.0 / band_max).astype(np.uint8) # , no_cloud_area = getNoCloudArea(b, g, r, n) heights = list() # (size, size) size = 30 for idx in range(0, df.shape[0]): # lat = df.loc[idx]['lat'] lon = df.loc[idx]['long'] build_height = int(df.loc[idx]['height']) # epsg:32637 #( ) build_coords = Point(get32637(lon, lat)) # , x,y = crsToPixs(width, height, left, right, bottom, top, build_coords) # , if no_cloud_area[y][x] == 255: # , # roi = img[y-size:y,x-size:x].copy() shadow = shadowSegmentation(roi) #(size, size) - roi # #( 3 ) shadow_length = getShadowSize(shadow, size, size) * 3 est_height = shadow_length * math.tan(sun_elevation * 3.14 / 180) est_height = int(est_height) heights.append((est_height, build_height)) MAPE = 0 for i in range(len(heights)): MAPE += ( abs(heights[i][0] - heights[i][1]) / float(heights[i][1]) ) MAPE *= (100 / float(len(heights)))

圱ã«ãã£ãŠå»ºç©ã®é«ãã決å®ããã¢ã«ãŽãªãºã ã®äŸ
3 mã®ç©ºéå解èœãæã€PlanetScopeè¡æã°ã«ãŒãã®ç»åã§ã¯ãMAPEã䜿çšããŠå»ºç©ã®é«ãã決å®ããéã®èª€å·®ïŒå¹³å絶察ããŒã»ã³ã誀差ïŒã¯çŽ30ïŒ ã§ããã åèšã§ã40ã®å»ºç©ãš1ã€ã®ã·ã§ãããæ€æ»ãããŸããã ãããããµãã¡ãŒã¿ãŒç»åã§ã¯ãç 究è ã¯ããã4-5ïŒ ã®ãšã©ãŒãåãåããŸãã ã
ãããã«
å°çã®ãªã¢ãŒãã»ã³ã·ã³ã°ã¯ãåæã®ããã®å€ãã®æ©äŒãæäŸããŸãã ããšãã°ãè¡æç»åã«åºã¥ããOrbital InsightãSpaceknowãRemote Sensing MetricsãOmniEarthãDataKindãªã©ã®äŒæ¥ã¯ãç±³åœã®çç£ãšæ¶è²»ãç£èŠããéœåžåã亀éãæ€çãçµæžãªã©ãåæããŸãã åæã«ãåçèªäœãããã¢ã¯ã»ã¹ãããããªã£ãŠããŸãã ããšãã°ã10m以äžã®ç©ºé解å床ãæã€Landsat-8ããã³Sentinel-2è¡æããã®ç»åã¯ãããªãã¯ãã¡ã€ã³ã«ãããåžžã«æŽæ°ãããŠããŸãã
ãã·ã¢ã§ã¯ãSovzondãScanExãRacursãGeo-AllianceãNorthern Geographic Companyãè¡æç»åã䜿çšããŠå°çåæãè¡ã£ãŠããããªã¢ãŒãã»ã³ã·ã³ã°è¡æãªãã¬ãŒã¿ãŒäŒæ¥ã®å ¬åŒãã£ã¹ããªãã¥ãŒã¿ãŒã§ãïŒRussian Space SystemsïŒãã·ã¢ïŒãDigitalGlobeïŒã¢ã¡ãªã«ïŒãPlanetïŒã¢ã¡ãªã«ïŒ ïŒããšã¢ãã¹ãã£ãã§ã³ã¹ã¢ã³ãã¹ããŒã¹ïŒãã©ã³ã¹-ãã€ãïŒãªã©
PSæšæ¥ã2ã€ã®ã¿ã¹ã¯ã§æ§æããããªã³ã©ã€ã³è¡æç»åã³ã³ãã¹ããéå§ããŸããã
- 建ç©ãšè»ã®ã»ã°ã¡ã³ããŒã·ã§ã³ããã³è»ã®ã«ãŠã³ãã
- 建ç©ã®é«ãã®æ±ºå®ã
ã³ã³ãã¥ãŒã¿ããžã§ã³ãšå°çã®ãªã¢ãŒãã»ã³ã·ã³ã°ã®åéã«èå³ã®ããæ¹ã¯ããã²ãåå ãã ããïŒ
ç§ãã¡ã¯ããã¹ã³ã¹ã¢ã¹ããšã¢ãã¹ãã£ãã§ã³ã¹ãã¹ããŒã¹ããã©ãããã¹ã³ãŒãã®åçããããå¥ã®ã³ã³ãã¹ããéå¬ããäºå®ã§ãã
ãœãŒã¹ã®ãªã¹ã
- DSTLïŒ
- ç»åã®ååŠçïŒ
- 建ç©ã®é«ãã®æ±ºå®ïŒ
- U-NetïŒ
- ãã®ä»ïŒ
- NASAããã®èšäº
- ãªã¢ãŒãã»ã³ã·ã³ã°ã®åç
- ãªãŒãã³ãœãŒã¹ã®ãªã¢ãŒãã»ã³ã·ã³ã°ãœãããŠã§ã¢
- ã¯ãªãŒã³ãããªã¢ã«ã©ã€ãã©ãª
- ãªãœãŒã¹P
- 圢ç¶ããã³OSM XML圢åŒã®ãã·ã¢é£éŠã®å°åã®OpenStreetMapããŒã¿
- Planet.osm
- Dark Channel Priorã䜿çšããåäžç»åã®ãã€ãºé€å»
- Canopus-Vè¡æããã®ç»åãæ¯èŒããäŸã§ã®ããŒãã€ã³ãæ³ã®å®çšå
- SRTMããžã¿ã«å°åœ¢ã¢ãã«ã䜿çšããŠäœæãããWorldView-2æ£æ圱ç»åã®å¹ŸäœåŠç粟床ã®ç 究
- NASAããã®èšäº