以前にLinuxでのやり方は調べたんですが、その後手元のR環境がWindowsになったので使えなくなりました。
で、Windowsでもできないか調べてましたが、つらすぎました。。とりあえずやったところまでメモっておきます。
GRASSをインストール
WindowsでGIS環境を整えるのに手っ取り早いのはOSGeo4Wでしょう。
ただし、2015年9月27日現在、64bit版のGRASSのバージョンは6.4でした。64bit版のGRASS 7がほしければ、個別にインストールする必要があります。その場合でも、依存パッケージがいろいろややこしいので、OSGeo4WをインストールしたあとにGRASS 7をインストールするほうが確実な気がします。
GRASS GIS - Download GRASS GIS for MS-Windows
詳細は割愛します。
環境変数の設定
再掲になりますが、以下の環境変数を設定する必要があります。
It is possible to access GRASS modules without explicitly starting a "GRASS session". GRASS libraries require certain environment variables to be set. In fact a "GRASS session" is just a set of processes (e.g. a shell and/or GUI) which have the necessary environment settings, specifically:
- GISBASE needs to be set to the top-level directory of the GRASS installation.
- GISRC needs to contain the absolute path to a file containing settings for GISDBASE, LOCATION_NAME and MAPSET.
- PATH needs to include $GISBASE/bin and $GISBASE/scripts.
If the GRASS libraries are shared libraries, the loader needs to be able to find them. This normally means that LD_LIBRARY_PATH (Linux, Solaris), DYLD_LIBRARY_PATH (MacOSX) or PATH (Windows) need to contain $GISBASE/lib, although there are other means to the same end (e.g. on Linux, putting $GISBASE/lib (with $GISBASE replaced by its actual value) into /etc/ld.so.conf then running ldconfig).
(Working with GRASS without starting it explicitly - GRASS-Wiki)
Windowsの場合はライブラリへのパスもPATH
に入れる必要があります(LinuxのときはLD_LIBRARY_PATH
でした)。
で、ドキュメントのどのへんに書いてあるのかよく分からないんですが、他にもGDALとかPROJ.4の場所とかを環境変数で指定しないといけなかったり、こまごま必要な設定があります。たぶん、Ubuntuでやってたときは、その辺りはパッケージをインストールするときに勝手にやってくれてたんだろうな…
よく分かりませんが、こんな.Renviron
を置いておけば動くようになりました。.Renviron
は、Rのセッションが始まった際に設定する環境変数を書くファイルです。
GISRC = grassrc GISBASE = "C:\Program Files (x86)\GRASS GIS 7.0.1" GRASS_PYTHON = ${GISBASE}\extrabin\python.exe PYTHONHOME = ${GISBASE}\Pythonexport GRASS_PROJSHARE = ${GISBASE}\share\prexport PROJ_LIB = ${GISBASE}\share\proj GDAL_DATA = ${GISBASE}\share\gdal GEOTIFF_CSV = ${GISBASE}\share\epsg_cexport PATH = "${PATH};${GISBASE}\bin;${GISBASE}\scripts;${GISBASE}\lib;${GISBASE}\extrabin"
詳細は割愛しますが、grassrcは、GRASS用の設定ファイルです。カレントディレクトリに置きます。
MAPSET: user1 GISDBASE: grassdata LOCATION_NAME: nc_basic_spm_grass7 GUI: text
grassdataはデータを置いておく場所です。↓こんな感じのファイル配置になっています。
. \_grassdata \_nc_basic_spm_grass7 \_user1 \_...(データ) \_.Renviron \_grassrc
rgrass7を動かしてみる
これで、readRAST()
は動くようになります。
library(rgrass7) #> Loading required package: sp #> Loading required package: XML #> GRASS GIS interface loaded with GRASS version: GRASS 7.0.1 (2015) #> and location: nc_basic_spm_grass7 example("readRAST") ...(略) #> CZfg_217 CZlg_262 CZig_270 CZbg_405 CZve_583 CZam_720 CZg_766 CZam_862 CZbg_910 Km_921 CZbg_945 CZam_946 CZam_948 #> 725562 198684 689373 253710 21609 4824 7074 61722 44964 12528 9 4068 873 #> 217 CZfg 725562 #> 262 CZlg 198684 #> 270 CZig 689373 #> 405 CZbg 253710 #> 583 CZve 21609 #> 720 CZam 4824 #> 766 CZg 7074 #> 862 CZam 61722 #> 910 CZbg 44964 #> 921 Km 12528 #> 945 CZbg 9 #> 946 CZam 4068 #> 948 CZam 873 #> Hit <Return> to see next plot: #> +----------------------------------------------------------------------------+ #> | Map: sqdemSP Date: Sun Sep 27 14:38:44 2015 | #> | Mapset: user1 Login of Creator: yutani | #> | Location: nc_basic_spm_grass7 | #> | DataBase: grassdata | #> | Title: ( sqdemSP ) | #> | Timestamp: none | #> |----------------------------------------------------------------------------| #> | | #> | Type of Map: raster Number of Categories: 0 | #> | Data Type: DCELL | #> | Rows: 1350 | #> | Columns: 1500 | #> | Total Cells: 2025000 | #> | Projection: Lambert Conformal Conic | #> | N: 228500 S: 215000 Res: 10 | #> | E: 645000 W: 630000 Res: 10 | #> | Range of data: min = 7.45511854848878 max = 12.5031941719687 | #> | | #> | Data Description: | #> | generated by RINBIN~1 | #> | | #> | Comments: | #> | RINBIN~1 -d input="grassdata/nc_basic_spm_grass7/user1/.tmp/unknown/\ | #> | X73" output="sqdemSP" bytes=8 header=0 bands=1 order="native" north=\ | #> | 228500 south=215000 east=645000 west=630000 rows=1350 cols=1500 anul\ | #> | l=6 | #> | | #> +----------------------------------------------------------------------------+ ...(略)
が、readVECT
は動きません。。
readVECT("schools", plugin=NULL) #> Error: !is.null(driver) is not TRUE
なにかの識別子を間違えてるというバグのような気がするんですが、深追いしていません。(参考)
※追記(2015/10/17):修正されていました。
結論
WindowsがつらいのかGRASSがつらいのかよく分かりません。つらいです。
ほんとは↓これを使って河川勾配のグラフを描きたかったんですが力尽きました。
GRASS GIS manual: r.stream.channel
追記:readVECT
、直ってました。
head(readVECT("schools", plugin=NULL)) #> WARNING: OGR layer <schools> already exists and will be overwritten #> Exporting 167 features... #> #> VOUTOG~1 complete. 167 features (Point type) written to <schools> #> (ESRI_Shapefile format). #> OGR data source with driver: ESRI Shapefile #> Source: "grassdata/nc_basic_spm_grass7/user1/.tmp/unknown", layer: "schools" #> with 167 features #> It has 29 fields #> coordinates cat TAG NAMESHORT NAMELONG #> 1 (633649.3, 221412.9) 1 568 SWIFT CREEK SWIFT CREEK ELEMENTARY #> 2 (628787.1, 223961.6) 2 340 BRIARCLIFF BRIARCLIFF ELEMENTARY #> 3 (629900.7, 222915.8) 3 414 FARMINGTON WOODS FARMINGTON WOODS ELEMENTARY #> 4 (630686.5, 224447.8) 4 368 CARY CARY HIGH #> 5 (631183.9, 224911.4) 5 304 ADAMS ADAMS ELEMENTARY #> 6 (622534.6, 218794.5) 6 308 APEX APEX ELEMENTARY #> CORECAPACI MOBILEUNIT MOBILECAPA GLEVEL LOGRADE HIGRADE CALENDAR HASBASE ISMAGNET #> 1 448 2 NA E <NA> <NA> T <NA> <NA> #> 2 540 0 NA E <NA> <NA> T <NA> <NA> #> 3 523 7 NA E <NA> <NA> T <NA> <NA> #> 4 2287 4 NA H <NA> <NA> T <NA> <NA> #> 5 722 9 0 E <NA> <NA> Y <NA> <NA> #> 6 586 2 NA E <NA> <NA> T <NA> <NA> #> PHONE ADDRNUMBER ADDRPREFIX ADDRROOT ADDRTYPE ADDRSUFFIX ADDRCITY #> 1 2334320 5601 <NA> Tryon Rd <NA> <NA> Raleigh #> 2 4603443 1220 <NA> Pond St <NA> <NA> Cary #> 3 4603469 1413 <NA> Hampton Valley Rd <NA> <NA> Cary #> 4 4603549 638 <NA> Walnut St <NA> <NA> Cary #> 5 4603431 805 <NA> Cary Towne Blvd <NA> <NA> Cary #> 6 3872150 700 <NA> Tingen Rd <NA> <NA> Apex #> ADDRZIPCOD SPED STATUS NODEID CAPACITYTO ESL BOARDDIS2 PROJ_CAP NOTES #> 1 27606 NA E 422.1 520 N 5 520 <NA> #> 2 27511 NA E 384.3 506 Y 9 506 <NA> #> 3 27511 NA E 384.2 721 Y 9 721 1 #> 4 27511 NA H 370.2 2254 Y 9 2302 15 #> 5 27511 NA E 369.1 830 Y 9 853 2 #> 6 27502 NA E 386.0 632 Y 8 632 <NA> #> Warning message: #> In vColumns(vname) : vColumns: v.info -c output not in two columns: #> Displaying column types/names for database connection of layer <1>: