I have an existing Python script that processes raster images with Gdal / Numpy. Now I want to extend the script with Grass. The python script is developed on Windows 7 with Eclipse/Pydev. The script is executed from within Eclipse. I installed Grass with the OSGeo4W installer (Version 6.4.3). I’m new to Grass, but as far as I understand I first need to create a new GRASS location. I try to do this with:
grass.core.create_location("C:\grassdata", “test”, epsg=21781)
however this throws the following error:
IOError: [Errno 2] No such file or directory:'C:\\grassdata\\test\\PERMANENT\\MYNAME'
create_location first runs g.gisenv, then g.proj and then again g.gisenv and finally tries to open C:\grassdata\test\PERMANENT\MYNAME that does not exists. Actually nothing was created in C:\grassdata. This is the complete script:
import os, sys import numpy as np import gdal def get_env(env): value = "" if env in os.environ: value = os.environ[env] + os.pathsep return value input_data = r"C:\data\dom_eth\DOM_Clip.tif" # start configure grass gisbase = os.environ['GISBASE'] = r'C:\OSGeo4W64\apps\grass\grass-6.4.3' os.environ['GISRC'] = r'C:\Users\Username\AppData\Roaming\GRASS6\grassrc6' grass_dirs = [os.path.join(os.environ['GISBASE'], i) for i in ['etc', os.path.join('etc', 'python'), 'lib', 'bin', 'scripts']] path = get_env('PATH') + os.pathsep.join(grass_dirs) os.environ['PATH'] = path os.environ['GRASS_SH'] = r'C:\OSGeo4W64\apps\msys\bin\sh.exe' if not os.path.exists(gisbase): os.mkdir(gisbase) sys.path.append(os.path.join(os.environ['GISBASE'], "etc", "python")) import grass.script as grass import grass.script.array as garray import grass.script.setup as gsetup gisdbase = r"C:\grassdata" location = "test" grass.core.create_location(gisdbase, location, epsg=21781)
A grep -rl "MYNAME" over the source code of Grass did not reveal something useful to me. What is the correct way to use Grass with Python from the "outside"?