Tangram ã§å½åå°çé¢ãã¯ãã«ã¿ã¤ã«æä¾å®é¨ã®ãã¼ã¿ãè¦ã
Tangram ã§å½åå°çé¢ãã¯ãã«ã¿ã¤ã«æä¾å®é¨ã®ãã¼ã¿ï¼åºç¤å°å³æ å ±ï¼ãè¦ãã³ã¼ããä½æãã¦ã¿ã¾ããã
ä¸è¨ gsi.html 㨠gsi.yaml ãããªã£ã¦ãã¾ãããã¡ã¤ã«ã¯ãGitHub ã¬ãã¸ã㪠https://github.com/handygeospatial/simple-demo ã«ããã¦ãã¾ãã
ãªãããã¼ã«ã«ã®ãã¡ã¤ã«ã·ã¹ãã ã«ãããã®ããã©ã¦ã¶ã§ãã®ã¾ã¾éãã¦ãåä½ããªãããããã¾ãããpython -m SimpleHTTPServer ãããªã©ãã¦ãHTTPã§ãµã¼ãããããã®ãéãå¿ è¦ãããã¾ãã
ãªããå®æåã http://handygeospatial.github.io/simple-demo/gsi.html ã«ãç½®ãã¦ãã¾ãã
gsi.html
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Minimalist Tangram</title> <link rel="stylesheet" href="lib/leaflet/leaflet.css" /> <style> body {margin: 0px; border: 0px; padding: 0px;} #map {height: 100%; width: 100%; position: absolute;} </style> </head> <body> <div id="map"></div> <script src="lib/leaflet/leaflet.js"></script> <script src="lib/leaflet-hash.js"></script> <script src="https://mapzen.com/tangram/0.1/tangram.min.js"></script> <script> var map = L.map('map', {maxZoom: 18, minZoom: 18}); var layer = Tangram.leafletLayer({ scene: 'gsi.yaml', attribution: 'å½åå°çé¢ãã¯ãã«ã¿ã¤ã«æä¾å®é¨' }); layer.addTo(map); map.setView([36.08600, 140.11373], 18); var hash = new L.Hash(map); </script> </body> </html>
gsi.yaml
ãã¡ãã§ãã¼ã¿ã®å¦çï¼ã¹ã¿ã¤ã«ãªã©ï¼ãæå®ãã¾ããææ³ã¯ https://github.com/tangrams/tangram/wiki ãåèã«ãªãã¨æãã¾ãã
cameras: camera1: type: isometric lights: light1: type: point direction: [0, 0, -10800] origin: camera diffuse: 1. ambient: .3 specular: .2 sources: gsi: type: GeoJSONTiles url: //cyberjapandata.gsi.go.jp/xyz/experimental_fgd/{z}/{x}/{y}.geojson max-zoom: 18 layers: blda: data: {source: gsi} filter: class: BldA draw: polygons: order: 2 color: '#ffe6be' 3d-buildings: draw: polygons: extrude: function() {return true;} xray: data: {source: gsi} draw: lines: order: 0 color: '#040' width: .5
ä»å¾
yaml ãã¡ã¤ã«ãããã«ã«ã¹ã¿ãã¤ãºãã¦ãããã¨ã§ãå°å³è¡¨ç¾ã¯æ¹åãã¦ãããã¨ãã§ãã¾ãã
å°å³ã¯ãã¾ã¡ããããã¡ã·ãªãã¼ã·ã§ã³ãã¼ã«ãã§ãããæè¦äº¤æãã©ãããã©ã¼ã ãï¼ãå½å交éãé½å¸é²ç½ï¼
ãå½å交éãNo.131ï¼2015.4-5ï¼ãç¹éãé½å¸é²ç½ãã«ãã¾ã¡ãæ©ãã¦é²ç½ããããã¤ããã!!ãã¨ãã1ãã¼ã¸è¨äºãããã
「国土交通」No.131(2015.4-5) 特集 都市防災 - 国土交通省
ãããèªãã§æã£ãã®ã ããããããã¥ãããã¨ããæ´»åã®ä¸»ç®çã¯ãå°å³ã¥ããã¨ã¯éããªãããå°å³ã¥ããã主ç®çã§ã¯ãªãããããã¥ããããããéè¦ãªã®ãããããªããã¤ã¾ããã¾ã¡ãããããã¡ã·ãªãã¼ããããã¨ãã ã¨ããæè¦äº¤æã®ãã©ãããã©ã¼ã ã¨ãªããã¨ãããã主ç®çã¨ããããããã¥ãããæ´»åã«ã¤ãã¦ãããèå¯ãã¦ããå¿ è¦ãããã®ã§ã¯ãªããã¨æãã
å ¨å½å ç«¥çå¾å°å³åªç§ä½åå±ã®æ§é
第18åå ¨å½å ç«¥çå¾å°å³åªç§ä½åå±ã®æ§æä½åå±ã®ä¸è¦§ãæ´çãããã¨ãéãã¦ãå½è©²ä½åå±ã®æ§é ãèå¯ããã
è¡äºå | å°åº | ä¸»å¬ |
æå¹å¸å ç«¥çå¾ç¤¾ä¼ç 究ä½åå± | æå¹å°åº | æå¹å¸æè²å°å³ç ç©¶ä¼ |
ç§ãã¡ã®èº«ã®åãã®ç°å¢å°å³ä½åå± | å ¨å½å°åº | 環境地図教育研究会ï¼åæµ·éæè²å¤§å¦ã»åæµ·éå°å³ã»ãæå·é¢ä¿ï¼ |
ä»å°å¸ä¸å¦æ ¡çå¾å°å³ä½åå± | ä»å°å°åº | ä»å°å¸ä¸å¦æ ¡ç¤¾ä¼ç§ç ç©¶ä¼ |
ãã°ããå ç«¥çå¾å°å³ä½åå± | è¨åå°åº | ãã°ããå ç«¥çå¾å°å³ç ç©¶ä¼ |
å¤æ©å¸èº«ã®ã¾ããã®ç°å¢å°å³ä½åå± | å¤æ©å°åº | å¤æ©å¸èº«ã®ã¾ããã®ç°å¢å°å³ä½åå±éå¶å§å¡ä¼ |
ã¨ãã¾ã¿ããªã®å°å³ä½åå± | å¯å±±å°åº | ã¨ãã¾å°å³ä½åç ç©¶ä¼ |
å ç«¥çå¾å°å³ä½åå± | å²éå°åº | 岐阜県図書館ï¼ä¸çåå¸å³ã»ã³ã¿ã¼ãä½µè¨ï¼ |
地域の安全安心マップコンテスト | å ¨å½å°åº | 立命館大学歴史都市防災研究所 |
ç¥æ¸å¸å°å¦æ ¡ç¤¾ä¼ç§ä½åå± | ç¥æ¸å°åº | ç¥æ¸å¸å°å¦æ ¡æè²ç 究ä¼ç¤¾ä¼ç§é¨ä¼ |
ãããçµµãããã³ã³ã¯ã¼ã« | 赤ç©å°åº | ãããçµµãããã³ã³ã¯ã¼ã«å®è¡å§å¡ä¼ |
é³¥åçå ç«¥çå¾å°åå°å³çºè¡¨ä½åå± | é³¥åå°åº | é³¥åçå°å社ä¼ç ç©¶ä¼ |
ãã¾ãå ç«¥ã»çå¾å°å³ä½åå± | å³¶æ ¹å°åº | 島根地理学会ï¼å³¶æ ¹å¤§å¦ï¼ |
å°å³ãªãã³ã«å°çä½åå± | åºå³¶å°åº | åºå³¶çå°çä½åå±éå¶å§å¡ä¼ |
å ç«¥ã»çå¾ã®å°å³ä½åå± | 徳島å°åº | 徳島地理学会ï¼é³´éæè²å¤§å¦ï¼ |
大åå¸å ç«¥å°å³ä½åå± | 大åå°åº | 大åå¸å°å¦æ ¡æè²ç 究ä¼ç¤¾ä¼ç§é¨ä¼ |
社ä¼ç§å ç«¥ä½åå± | æ»è³å°åº | æ»è³çå°å¦æ ¡æè²ç 究ä¼ç¤¾ä¼ç§é¨ä¼ |
Geo+Webã®æ°å±é¢ã象徴ãããTurf for local govãã«ã¤ãã¦
Turf for local gov: potholes and parking meters | Mapbox
ã¦ã§ãå°å³ãåãªãããã¬ã¼ã¹ãã¼ã¯ã«å¹ãåºããã ãã®æ®µéãè±ãããããã¯ã¦ã§ãå°å³ã®æªæ¥åã®ä¸ã«ç¢ºå®ã«æããã¦ãããã¨ãªã®ã§ããããã®æ¹åã«åãå ¥ãå§ãã¦ãã¾ãããå¼å¿ããåéã®é¸æãããããã§ãã
å±æ§è¡¨ç¤ºãå¹ãåºã表示ã«æããããå°å³ã®å¤ã®ãã£ãããã¶ã¤ã³ãããå ´æã«æããããããã¯æè¡çã«ã¯å¤§ãããã¨ã§ã¯ãªããã¾ãã以åãããè¡ããããã¨ã§ãããã¦ã§ãå°å³ã趣å³ã§ã¯ãªãã¦çæ´»ã«ä½¿ãããããã«ã¯ããããã£ãæ¹åã®ãã¶ã¤ã³ãæ»æ´»çã«éè¦ã§ããããããã¨ããããã£ããè¡ã£ã¦ãããã¨ãéè¦ã§ãã
ããã²ã¨ã¤ã¯ããã¦ã§ãå°å³ã¯ç°¡æGISã§ãããã¨ããå¤ãåè¦ãè±ãã¦ãã¦ã§ãã«ã¾ã¨ããªã¸ãªæè¡ãå ¥ãããã¨ãæ ã£ã¦ããªããã¨ãã¦ã§ããã©ã¦ã¶ã¯å¶éãããè¨ç®æ©ç°å¢ã¨ããããã¯ããããITã®ã¡ã¸ã£ã¼ãã¬ã¤ã¤ã¼ããã®ããåã£ã¦æ°ããè¨ç®æ©ã®ä½¿ãæ¹ãåãéãã¦ãã£ã¦ãããææ°ã®è¨ç®æ©ç°å¢ã§ããããã§GISãæ°åå¹´ã«ããã£ã¦è²ã¦ã¦ããæè¡ãè±éããããã¨ããã®ä»äºããã£ããã¨è¡ã£ã¦ãã¾ããã¡ãªã¿ã«ãã¼ã¿ã®ããã¼ããã¹ã¯ãããã¨ã¦ã§ãã§ã¯å¤§ããéããã¨ããã®ãè´å½çãªéãã§ããã¼ã¿ããã¼ã«ã¤ãã¦ãã¹ã¯ãããã¨åãçºæ³ããã¦ããã¨ãæ ¹æ¬çã«èª¤ãã¾ããããã誤ã£ã¦ããªããã¨ããã®ããã®åéã®å®åè å ±éã®ç¹å¾´ã ã¨æã£ã¦ãã¾ãã
ãUIãªããå¯è¦åã®åé¡ãã¨ãããã©ã¦ã¶ãµã¤ãã®GISå¦çã®åé¡ãããæ¹åãéãããã«å¤ããªããã°ãªããªããããã¬ãããªã®ã§ããããããã®åãã¯ããã®ããã¬ããï¼ã¤åæã«å¤ãåãã«è¦ãã¾ããã
ï¼ã¤åæã«å¤ããã¨ã§ãé©æ°ã®å¤è¦ãå¾ããã¾ãããä»ã追ãã¤ãå¯è½æ§ãæ¸å°ããããªã¼ãã³ã½ã¼ã¹ã®ææ³ãåããªããä»ã®è¿½å¾ã許ããªãã«ã¯ãç¸å¿ã®å®åãå¿
è¦ã§ãããä»ã®å½¼ãã¯å®åè
ã®éä¸ã«æåãã¦ããããã«è¦ãã¾ãã
èªåããã®æè¡æ½®æµã®ä¸ã§ã©ãåããèãã以åã«ãã¸ãªçãããã ãã¾ã¨ãã«æè¡ã®çºå±ãè¿ãããããã¨ãè¦ãã®ãä½ããå¬ããã§ãã
ã¸ãªããã®æ¹åã«é²ããã¨ãããããã1å¹´åãããã§å¤§åãªãã¸ãªã®ãã¬ã¼ã¯ã¹ã«ã¼ã«ãªãå¾ãã¨æãã¾ãã
ãããã£ãæè¡ã使ãããã¬ã¤ã¤ã¼ããæ©æã«ä¸è
ã§ãå¢ãããªããã°ãæã
ã¯ã¸ãªã®çºå±ã®å観è
ã«ãªã£ã¦ãã¾ãã¾ãã
ããã²ã¨ã¤ã¯ãä»äºã®ããã¡ãã®åé¡ã§ããããã®å 4å¹´ãããã¯ãæè¡ãäºæ¥ã®å½¢ãã²ãã¦ã¯å¶åº¦ãã©ãã©ãå¤ãã¦ããç¶æ³ã«ãªãã¯ãã2000年代ã«å¶åº¦ãæè¡ãèªå°ã§ããã¨èããï¼XML, UML, CALS etc.ï¼ã®ã¨çéã®åãã§ãããããã«å¯¾å¿ã§ããããã«ã¯ãæè¡ã¨äºæ¥ãåæã«èããå½¢ãåãã®æ©ãæè¡æ½®æµã®ä¸ã«ç¶ç¶çã«èº«ã浸ããªããäºæ¥ã®è»éä¿®æ£ããããããå½¢ãåããã²ã¨ãå¼·ãã§ããï¼å¿è«ã形以ä¸ã«ä¸èº«ã大åã§ããï¼ã¯ã©ã·ãã¯ï¼ãªã¼ã½ããã¯ã¹ï¼ãªã³ã³ãµã«ãã£ã³ã°ãåè¨éçºã®å½¢ã§ã¯ããã®å½¢ãåãã®ã¯é常ã«å°é£ã§ããã½ã¼ã·ã£ã«ã³ã¼ãã£ã³ã°ã使ããäºæ¥ä½ãã¨ããã®ã¯ãæ¢åã®æ £è¡ã®ãªãã§ã¨ãå¾ãä¸ã¤ã®è¯å¥½ãªå½¢ã ã¨æãã¾ãã
FOSS4G Advent Calendar 2014 ã«æ稿
FOSS4G Advent Calendar 2014 http://qiita.com/advent-calendar/2014/foss4goss4g ã® 2014-12-15 ã®ã¨ã³ããªã¨ãã¦ãhttp://handygeospatial.github.io/foss4g-advent-calendar-2014/ ãä½æããã
geojson-vt ã®ãµã³ãã«ãµã¤ããä½æããã¨ãã話ã§ãããããã®è©±ã«ã½ã¼ã·ã£ã«ã³ã¼ãã£ã³ã°ãã¼ã«ã使ã£ãä½æ¥ã®ãã¥ã¼ããªã¢ã«ã絡ãã¦ãããgeojson-vt ã®ç®çã®åæãã¨ãã£ããããªè©±ã¯å²æãã¦ãããã½ã¼ã·ã£ã«ã³ã¼ãã£ã³ã°ãã¼ã«ã使ãããã»ã¹ã®æ®åããåæçµæã®å ±æã«åªå ãããã¨ã«ãªãã
Hadoop ã使ã£ãåºç¤å°å³æ å ±ã® GeoJSON ã¿ã¤ã«å¤æ Pt. 1
æ¬ç©ã® MapReduce ã使ã£ãåºç¤å°å³æ å ±ã® GeoJSON ã¿ã¤ã«å¤æã®æµããã§ãããã½ã¼ã¹ãã¼ã¿ãã¨ã« GeoJSONL ã«å¤æããã¹ãããã®å¾ãä¸åº¦ã« MapReduce ã使ã£ã¦å¤æããæ¹æ³ã§ãããã½ã¼ã¹ãã¼ã¿ã®ä¸é¨ãå¤æ´ãããæã«ãå¤æ´ãåãã¦ããªãã½ã¼ã¹ãã¼ã¿ã«å¯¾å¿ãã GeoJSONL å¤æãããªãã¦æ¸ãããã«ãªã£ã¦ããã
Hadoop ã®ã¤ã³ã¹ãã¼ã«ï¼OS Xï¼
MapReduce ã¨ãã£ã¦ããç¹æ®µåæ£è¨ç®æ©ç°å¢ãè¨å®ããªããHomeBrew ã®ããã©ã«ãç¶æ ã® Hadoop ã使ã£ã¦ãããããã§ããç¹ã«ã½ã¼ã¹ãã¼ã¿ã大è¦æ¨¡ã®å ´åã«ãUnix sort ããã¯é«éã«ãªããHadoop ããã¡ãã¨è¨å®ãã¦é«éåããä½æ¥ã¯ããã¨ã®æ¥½ãã¿ã«ã¨ã£ã¦ããã
$ brew install mapreduce
ç¾å¨ãæå
ã§ã¯ hadoop ã® 2.5.1 ãã¤ã³ã¹ãã¼ã«ããã¦ããã
OS X ã® Java ã¯ã¿ã¼ããã«ã§æ¥æ¬èªã CP932 ã§åºåãã¦æååãããã¦ãã¾ãçãããããããåé¿ãã¦æ¥æ¬èªã綺éºã«è¡¨ç¤ºããããã«ã¯ã次ã®ããã«ãããHaddop ã®ã¹ãã¼ã¿ã¹åºåã«ã¯æ¥æ¬èªãæ··ããã®ã§ãè¨å®ãã¦ãããã»ããããã
$ export _JAVA_OPTIONS="-Dfile.encoding=UTF-8"
ã¾ãã大è¦æ¨¡ãªãã¼ã¿ã»ãããå¤æããå ´åã«ã¯ãheap space ä¸è¶³ã§ã¨ã©ã¼ãåºãå ´åãããã®ã§ããããäºé²ããããã«ã次ã®ããã«ç°å¢å¤æ°ãè¨å®ãã¦ããã¨è¯ãã
$ export HADOOP_CLIENT_OPTS="-Xmx2048m $HADOOP_CLIENT_OPTS"
ãããã¯ã.bash_profile ãããã«æ¸ãè¾¼ãã§ããã¨ããã
ãã£ã¬ã¯ããªã®æ§æ
ãã£ã¬ã¯ããªã®æ§æã¯ã次ã®ããã«ãã¦ããã
. -+- source/ : åºç¤å°å³æ å ±XMLãã¡ã¤ã«ãæ ¼ç´ +- input/ : convert.rb ã使ã£ã¦åºç¤å°å³æ å ±ãGeoJSONL.gzã«ãããã®ãæ ¼ç´ +- output/ : hadoop ã使ã£ã¦ãGeoJSONLãã¿ã¤ã«ãã¨ã«reduceãããã¡ã¤ã«ãæ ¼ç´ +- dst/ : deploy.rb ã使ã£ã¦ãoutput ãã¿ã¤ã«ã«å±éãããã®ãæ ¼ç´ +- Rakefile : ã¿ã¹ã¯ãè¨è¿° +- convert.rb +- reduce.rb +- deploy.rb
Rakefile
task :default do sh "rm -r output" if File.directory?('output') Dir.glob('source/*.xml') {|path| dst_path = "#{path.sub('source', 'input').sub('xml', 'geojsonl.gz')}" next if File.exist?(dst_path) sh "ruby convert.rb #{path} | gzip -c > #{dst_path}" } sh "hadoop jar /usr/local/Cellar/hadoop/2.5.1/libexec/share/hadoop/tools/lib/hadoop-streaming-2.5.1.jar -input input -output output -mapper cat -reducer reduce.rb" sh "ruby deploy.rb" end
convert.rb
ç¾å¨ã®ã¨ãããæ°å¤æ¨é«ãã¼ã¿ï¼DEM5Aåã³DEM10Bï¼ã«ã¤ãã¦XMLãã¼ã¿ãGeoJSONLã«å¤æããé¨åãã§ãã¦ããã
# coding: utf-8 require 'json' # Meshcode is probably Japanese English. module Meshcode def self.width(code) case code.size when 8 45.0 / 60 / 60 else raise 'not implemented.' end end def self.height(code) case code.size when 8 30.0 / 60 / 60 else raise 'not implemented.' end end def self.lefttop(code) case code.size when 6 [(code[2..3].to_f + code[5].to_f / 8) + 100, (code[0..1].to_f + (code[4].to_f + 1) / 8) * 2 / 3] when 8 [(code[2..3].to_f + code[5].to_f / 8 + code[7].to_f/ 80) + 100, (code[0..1].to_f + code[4].to_f / 8 + (code[6].to_f + 1) / 80) * 2 / 3] else raise 'not implemented.' end end end module Math def self.sec(x) 1.0 / cos(x) end end class DEM def parse(params) (left, top) = Meshcode::lefttop(params[:meshcode]) skip = true count = 0 File.foreach(params[:path], encoding: 'cp932') {|l| if l.include?('<gml:tupleList>') skip = false next elsif l.include?('</gml:tupleList>') skip = true next elsif !skip (i, j) = [count % @n_lng, count / @n_lng] lng = left + @d_lng * (i + 0.5) lat = top - @d_lat * (j + 0.5) lat_rad = lat * 2 * Math::PI / 360 n = 2 ** params[:z] x = n * ((lng + 180) / 360) y = n * (1 - (Math::log(Math::tan(lat_rad) + Math::sec(lat_rad)) / Math::PI)) / 2 x = x.to_i y = y.to_i (type, height) = l.encode('UTF-8').strip.split(',') next unless type f = {:type => 'Feature', :geometry => {:type => 'Point', :coordinates => [lng, lat]}, :properties => { :type => type, :height => height.to_f, :datePublished => params[:datePublished] }} print "#{params[:z]}/#{x}/#{y}.geojson\t#{JSON::dump(f)}\n" count += 1 end } end end class DEM5A < DEM def initialize @n_lng = 225 @n_lat = 150 @d_lng = 1.0 / 80 / @n_lng @d_lat = 2.0 / 3 / 80 / @n_lat end end class DEM10B < DEM def initialize @n_lng = 1125 @n_lat = 750 @d_lng = 1.0 / 8 / @n_lng @d_lat = 2.0 / 3 / 8 / @n_lat end end ARGV.each {|path| next unless /xml$/.match path r = File.basename(path, '.xml').split('-') r.pop if r[-1].size == 4 next unless r.shift == 'FG' next unless r.shift == 'GML' datePublished = r.pop.insert(4, '-').insert(7, '-') type = r.pop meshcode = r.join params = {:path => path, :type => type, :meshcode => meshcode, :z => 18, :datePublished => datePublished} case type when 'DEM5A' Kernel.const_get(type).new.parse(params) when 'dem10b' DEM10B.new.parse(params) else # print "converter for #{type} not implemented.\n" end }
reduce.rb
hadoop ã® reducer ã«å½ã¦ã¦ãã¿ã¤ã«ãã¨ã« GeoJSONL ã®ã«ã³ãåºåããªã¹ããä½æããã¹ã¯ãªãããreduce.rb 㧠GeoJSON ã«çµã¿ç«ã¦ããã¨ãå¯è½ã§ããããreduce ãå¤æ®µã«å®æ½ããå ´åãèãã¦ãFeatureCollection ãå½ã¦ã¦ GeoJSON ã«çµã¿ç«ã¦ãä½æ¥ã¯ deploy.rb ã«ç§»è²ãã¦ããã
#!/usr/bin/env ruby require 'fileutils' require 'json' last = nil geojsonl = nil def write(geojsonl, path) print "#{path}\t#{JSON.dump(geojsonl)[1..-2]}\n" end while gets r = $_.strip.split("\t") current = r[0] if current != last write(geojsonl, last) unless last.nil? geojsonl = [] end geojsonl << JSON.parse(r[1]) last = current end write(geojsonl, last)
deploy.rb
ä¸è¨ reduce ã®çµæããã¡ã¤ã«ã·ã¹ãã ã«ã¿ã¤ã«ã»ããã¨ãã¦é åããã¹ã¯ãªããããã㧠Feature ã®ã«ã³ãåºåããªã¹ãã FeatureCollection ã«çµã¿ä¸ããvalid 㪠GeoJSON ãã¡ã¤ã«ã«ãã¦ããã
require 'fileutils' Dir.glob('output/part*') {|path| File.foreach(path) {|l| (path, geojsonl) = l.split("\t") path = "dst/#{path}" FileUtils.mkdir_p(File.dirname(path)) File.open(path, 'w') {|w| geojson = <<-EOS {"type": "FeatureCollection", "features": [#{geojsonl}]} EOS print "#{geojson.size} characters to #{path}\n" w.print geojson } } }
ç¾å¨ã¾ã§ã®ãã¹ãç¶æ³
DEM5A 㨠DEM10B ãã¼ã¿ã«ã¤ãã¦ãä¸æ¬¡ã¡ãã·ã¥æ°åç¨åº¦ãã¾ã¨ãã¦å¤æããä½æ¥ãç¡äºçµäºãããã¨ãåãã£ã¦ãããUNIX sort ã使ãå ´åã«æ¯ã¹ã¦é«éã§ããããã ãããã£ã¹ã¯ã大éã«ä½¿ç¨ãããã¨ã«çæããå¿ è¦ãããã
ä»å¾ã®äºå®
ä»åã¯ãæ°å¤æ¨é«ãã¼ã¿ã®ãã¤ã³ããã¼ã¿ã¿ã¤ã«å¤æãè¡ã£ãããä»å¾ããã¯ãã«ãã¼ã¿ã®å¤æãè¡ãããã
8æ16æ¥ããã®å¤§é¨ï¼åºå³¶å¸å ï¼æ£å°ç»åãCesium 1.0ã§è¦ã
å°çé¢ã¿ã¤ã«ã8æ16æ¥ããã®å¤§é¨ï¼åºå³¶å¸å
ï¼æ£å°ç»åï¼2014å¹´8æ28æ¥æ®å½±ï¼ããCesium 1.0ã§è¦ããµã¤ããä½æãã¾ããã
ãµã¤ãï¼8月16日からの大雨(広島市内)正射画像(2014年8月28日撮影)