Update: So, the folder from which I was running the command was wrong, and when ran the script from the correct folder, it ran just fine.
On Tue, Jul 20, 2021 at 10:55 PM Ayush Chauhan <ay...@huviair.com> wrote: > Hi Veronica, everyone, > > I used the below URL to re-install the grass7.8, after deleting the > previous grass6.4.4 and previous grass7.8.5 versions. > > > https://grass.osgeo.org/grass78/source/snapshot/grass-7.8.git_src_snapshot_2021_07_17.tar.gz > > I am trying to run a simple grass script, that will count the number of > points on the geojson file. > > ``` > # %module > > # % description: greets the user and prints the information of a spatial file > # %end > # %option > # % key: test > # % type: string > # % required: yes > # % multiple: no > # % description: Geospatial test file > # %end > > import sys > from grass.pygrass.modules import Module > import grass.script as grass > > > def main(): > # Import raster and vector > Module("v.in.ogr", input=opts["test"], output="test", overwrite=True) > info = grass.vector_info("test") > print("Number of points: %s" % info["points"]) > > > if __name__ == "__main__": > opts, _ = grass.parser() > sys.exit(main()) > > ``` > > Now, when I am running the following command: > ``` > /home/ec2-user/src/grass/bin.x86_64-pc-linux-gnu/grass78 -c EPSG:4326 > location --exec /home/ec2-user/volume_calc/.venv/bin/python3 > /home/ec2-user/volume_calc/simple_test.py > test=/home/ec2-user/volume_calc/media/tour_id/tmpb1civ9id_grass_engine/test.geojson > ``` > > I receive the following error: > > ``` > Starting GRASS GIS... > Creating new GRASS GIS location <location>... > Traceback (most recent call last): > File "/home/ec2-user/src/grass/bin.x86_64-pc-linux-gnu/grass78", line > 2348, in <module> > main() > File "/home/ec2-user/src/grass/bin.x86_64-pc-linux-gnu/grass78", line > 2248, in main > geofile=params.geofile, create_new=True) > File "/home/ec2-user/src/grass/bin.x86_64-pc-linux-gnu/grass78", line > 1002, in set_mapset > create_location(gisdbase, location_name, geofile) > File "/home/ec2-user/src/grass/bin.x86_64-pc-linux-gnu/grass78", line > 804, in create_location > epsg=epsg, datum_trans=datum_trans) > File > "/home/ec2-user/src/grass/dist.x86_64-pc-linux-gnu/etc/python/grass/script/core.py", > line 1541, in create_location > gisdbase = gisenv()['GISDBASE'] > KeyError: 'GISDBASE' > ``` > > I have set all the environment variables for the binary file of grass78 > ("/home/ec2-user/src/grass/bin.x86_64-pc-linux-gnu/grass78") > > GISBASE: /home/ec2-user/src/grass/dist.x86_64-pc-linux-gnu > GUI: text > GRASSBIN: /home/ec2-user/src/grass/bin.x86_64-pc-linux-gnu/grass78 > PYTHONPATH: /home/ec2-user/src/grass/dist.x86_64-pc-linux-gnu/etc/python > GISDBASE: /home/ec2-user/volume_calc/media/tour_id > LD_LIBRARY_PATH: $LD_LIBRARY_PATH:$GISBASE/lib > PATH = $PATH:/usr/bin:$GISBASE/bin:$GISBASE/scripts > LC_ALL: C.UTF-8 > > Still, the python grass > script(/home/ec2-user/src/grass/dist.x86_64-pc-linux-gnu/etc/python/grass/script/core.py) > is giving me the GISDBASE error (I think it is env variable error, not > sure). > Please tell me, is there any environment variable that I am forgetting? Or > this is something else. > > And this is happening after the new installation. In my previous version, > I was able to run this basic script to test my grass installation (which is > failing this time). > Please let me know if you need more information. > Thanks > > On Mon, Jul 19, 2021 at 8:45 PM Veronica Andreo <veroand...@gmail.com> > wrote: > >> Hi Ayush >> >> GRASS 7.8 already has the r.external module, so no need to patch it. I'd >> try first by using a clean installation of grass 7.8.5 (or compilation of >> 7.8.6 for that matter). >> >> Also the same way there's v.import for vector data, there's r.import for >> quick raster import, so you could try that for importing your raster map. >> >> my 0.02 cents >> Vero >> >> El lun, 19 jul 2021 a las 8:16, Ayush Chauhan (<ay...@huviair.com>) >> escribió: >> >>> Hi, >>> >>> I am using the below code in my grass script to calculate volume from >>> the DSM file input into the script and the polygon points on the DSM. >>> ``` >>> >>> # %module >>> # % description: Calculate volume of area and prints the volume to stdout >>> # %end >>> # %option >>> # % key: area_file >>> # % type: string >>> # % required: yes >>> # % multiple: no >>> # % description: Geospatial file containing the area to measure >>> # %end >>> # %option >>> # % key: points_file >>> # % type: string >>> # % required: yes >>> # % multiple: no >>> # % description: Geospatial file containing the points defining the area >>> # %end >>> # %option >>> # % key: dsm_file >>> # % type: string >>> # % required: yes >>> # % multiple: no >>> # % description: GeoTIFF DEM containing the surface >>> # %end >>> >>> import sys >>> from grass.pygrass.modules import Module >>> import grass.script as grass >>> >>> >>> def main(): >>> >>> Module( >>> "v.import", >>> input=opts['area_file'], >>> output="polygon_area", >>> overwrite=True >>> ) >>> Module( >>> "v.import", >>> input=opts['points_file'], >>> output="polygon_points", >>> overwrite=True >>> ) >>> Module( >>> "v.buffer", >>> input="polygon_area", >>> s=True, >>> type="area", >>> output="region", >>> distance=1, >>> minordistance=1, >>> overwrite=True >>> ) >>> Module("r.external", input=opts['dsm_file'], output="dsm", >>> overwrite=True) >>> # Set Grass region and resolution to DSM >>> Module("g.region", raster="dsm") >>> # Set Grass region to vector bbox >>> Module("g.region", vector="region") >>> # Create a mask to speed up computation >>> Module("r.mask", vector="region") >>> # Transfer dsm raster data to vector >>> Module("v.what.rast", map="polygon_points", raster="dsm", >>> column="height") >>> # Decimate DSM and generate interpolation of new terrain >>> Module("v.surf.rst", input="polygon_points", zcolumn="height", >>> elevation="dsm_below_pile", overwrite=True) >>> # Compute difference between dsm and new dsm >>> Module("r.mapcalc", >>> expression='pile_height_above_dsm=dsm-dsm_below_pile', >>> overwrite=True) >>> # Set region to polygon area to calculate volume >>> Module("g.region", vector="polygon_area") >>> # Volume output from difference >>> Module("r.volume", input="pile_height_above_dsm", f=True) >>> >>> return 0 >>> >>> >>> if __name__ == "__main__": >>> opts, _ = grass.parser() >>> sys.exit(main()) >>> >>> ``` >>> >>> The area file I am providing contains the below >>> contents(area_file.geojson): >>> >>> ``` >>> >>> {"type": "Feature", "properties": {}, "geometry": {"type": "Polygon", >>> "coordinates": [[[73.31231666938123, 26.22297239890824], >>> [73.31241572405983, 26.222379996744422], [73.3134282830031, >>> 26.222577464467804], [73.31281194277611, 26.222906576595037], >>> [73.31231666938123, 26.22297239890824]]]}} >>> >>> ``` >>> >>> The points file I am providing contains the below >>> contents(points_file.geojson): >>> >>> ``` >>> >>> {"type": "FeatureCollection", "features": [{"type": "Feature", >>> "properties": {}, "geometry": {"type": "Point", "coordinates": >>> [73.31231666938123, 26.22297239890824]}}, {"type": "Feature", "properties": >>> {}, "geometry": {"type": "Point", "coordinates": [73.31241572405983, >>> 26.222379996744422]}}, {"type": "Feature", "properties": {}, "geometry": >>> {"type": "Point", "coordinates": [73.3134282830031, 26.222577464467804]}}, >>> {"type": "Feature", "properties": {}, "geometry": {"type": "Point", >>> "coordinates": [73.31281194277611, 26.222906576595037]}}, {"type": >>> "Feature", "properties": {}, "geometry": {"type": "Point", "coordinates": >>> [73.31231666938123, 26.22297239890824]}}]} >>> >>> ``` >>> >>> When I run the below command, >>> >>> ``` >>> >>> */home/ec2-user/grass/bin.x86_64-pc-linux-gnu/grass78 -c \* >>> */home/ec2-user/volume_calc/media/tour_id/files/dsm_volume.tif location >>> \* >>> *--exec python3 /home/ec2-user/volume_calc/grass_calc_vol.py \* >>> *area_file=/home/ec2-user/volume_calc/media/tour_id/tmpo99fe5bi_grass_engine/area_file.geojson >>> \* >>> *points_file=/home/ec2-user/volume_calc/media/tour_id/tmpo99fe5bi_grass_engine/points_file.geojson >>> \* >>> *dsm_file=/home/ec2-user/volume_calc/media/tour_id/files/dsm_volume.tif* >>> >>> ``` >>> >>> I get below output. >>> ``` >>> >>> (.venv) [ec2-user@ip-10-0-3-14 volume_calc]$ >>> /home/ec2-user/grass/bin.x86_64-pc-linux-gnu/grass78 -c >>> /home/ec2-user/volume_calc/media/tour_id/files/dsm_volume.tif location >>> --exec python3 /home/ec2-user/volume_calc/grass_calc_vol.py >>> area_file=/home/ec2-user/volume_calc/media/tour_id/tmpo99fe5bi_grass_engine/area_file.geojson >>> points_file=/home/ec2-user/volume_calc/media/tour_id/tmpo99fe5bi_grass_engine/points_file.geojson >>> dsm_file=/home/ec2-user/volume_calc/media/tour_id/files/dsm_volume.tif >>> Starting GRASS GIS... >>> Creating new GRASS GIS location <location>... >>> Cleaning up temporary files... >>> Executing <python3 /home/ec2-user/volume_calc/grass_calc_vol.py >>> area_file=/home/ec2-user/volume_calc/media/tour_id/tmpo99fe5bi_grass_engine/area_file.geojson >>> points_file=/home/ec2-user/volume_calc/media/tour_id/tmpo99fe5bi_grass_engine/points_file.geojson >>> dsm_file=/home/ec2-user/volume_calc/media/tour_id/files/dsm_volume.tif> ... >>> Check if OGR layer <OGRGeoJSON> contains polygons... >>> 100% >>> Creating attribute table for layer <OGRGeoJSON>... >>> Importing 1 features (OGR layer <OGRGeoJSON>)... >>> 100% >>> ----------------------------------------------------- >>> Registering primitives... >>> ----------------------------------------------------- >>> Cleaning polygons >>> ----------------------------------------------------- >>> Breaking polygons... >>> Breaking polygons (pass 1: select break points)... >>> 100% >>> Breaking polygons (pass 2: break at selected points)... >>> 100% >>> ----------------------------------------------------- >>> Removing duplicates... >>> 100% >>> ----------------------------------------------------- >>> Breaking boundaries... >>> 100% >>> ----------------------------------------------------- >>> Removing duplicates... >>> 100% >>> ----------------------------------------------------- >>> Cleaning boundaries at nodes... >>> 100% >>> ----------------------------------------------------- >>> Merging boundaries... >>> 100% >>> ----------------------------------------------------- >>> Removing dangles... >>> 100% >>> ----------------------------------------------------- >>> Building areas... >>> 100% >>> ----------------------------------------------------- >>> Removing bridges... >>> 100% >>> ----------------------------------------------------- >>> Registering primitives... >>> Building areas... >>> 100% >>> Attaching islands... >>> 100% >>> ----------------------------------------------------- >>> Finding centroids for OGR layer <OGRGeoJSON>... >>> 100% >>> ----------------------------------------------------- >>> Writing centroids... >>> 100% >>> ----------------------------------------------------- >>> 1 input polygons >>> Total area: 4106.45 (1 areas) >>> ----------------------------------------------------- >>> Copying features... >>> 100% >>> Building topology for vector map <polygon_area@PERMANENT>... >>> Registering primitives... >>> Building areas... >>> 100% >>> Attaching islands... >>> 100% >>> Attaching centroids... >>> 100% >>> Input >>> >>> </home/ec2-user/volume_calc/media/tour_id/tmpo99fe5bi_grass_engine/area_file.geojson> >>> successfully imported without reprojection >>> Check if OGR layer <OGRGeoJSON> contains polygons... >>> 100% >>> Creating attribute table for layer <OGRGeoJSON>... >>> Importing 5 features (OGR layer <OGRGeoJSON>)... >>> 100% >>> ----------------------------------------------------- >>> Building topology for vector map <polygon_points@PERMANENT>... >>> Registering primitives... >>> Input >>> >>> </home/ec2-user/volume_calc/media/tour_id/tmpo99fe5bi_grass_engine/points_file.geojson> >>> successfully imported without reprojection >>> Note: In latitude-longitude coordinate system specify distances in degree >>> unit >>> WARNING: Option 'minordistance' is not available with GEOS buffering >>> Buffering areas... >>> 100% >>> Cleaning buffers... >>> Building parts of topology... >>> Building topology for vector map <region@PERMANENT>... >>> Registering primitives... >>> Snapping boundaries... >>> Reading features... >>> Snap vertices Pass 1: select points >>> 100% >>> Snap vertices Pass 2: assign anchor vertices >>> 100% >>> Snap vertices Pass 3: snap to assigned points >>> 100% >>> Breaking polygons... >>> Breaking polygons (pass 1: select break points)... >>> 100% >>> Breaking polygons (pass 2: break at selected points)... >>> 100% >>> Removing duplicates... >>> 100% >>> Breaking boundaries... >>> 100% >>> Removing duplicates... >>> 100% >>> Cleaning boundaries at nodes >>> 100% >>> Building topology for vector map <region@PERMANENT>... >>> Building areas... >>> 100% >>> Removing dangles... >>> 100% >>> Removing bridges... >>> 100% >>> Attaching islands... >>> Building topology for vector map <region@PERMANENT>... >>> Attaching islands... >>> 100% >>> Calculating centroids for all areas... >>> 100% >>> Generating list of boundaries to be deleted... >>> 100% >>> Deleting boundaries... >>> 100% >>> Calculating centroids for areas... >>> 100% >>> Building topology for vector map <region@PERMANENT>... >>> Registering primitives... >>> Building areas... >>> 100% >>> Attaching islands... >>> 100% >>> Attaching centroids... >>> 100% >>> WARNING: Unable to open datum table file >>> </home/ec2-user/grass/dist.x86_64-pc-linux-gnu/etc/datum.table> >>> WARNING: Datum <WGS_1984> not recognised by GRASS and no parameters found >>> WARNING: Unable to open ellipsoid table file >>> >>> </home/ec2-user/grass/dist.x86_64-pc-linux-gnu/etc/ellipse.table> >>> Projection of input dataset and current location appear to match >>> Importing band 1 of 1... >>> Link to raster map <dsm> created >>> Reading areas... >>> 100% >>> Writing raster map... >>> 100% >>> Reading areas... >>> 100% >>> Writing raster map... >>> 100% >>> Reading areas... >>> 100% >>> Writing raster map... >>> 100% >>> Reading areas... >>> 100% >>> Writing raster map... >>> ^CTraceback (most recent call last): >>> File "/home/ec2-user/grass/dist.x86_64-pc-linux-gnu/scripts/r.mask", >>> line 199, in <module> >>> main() >>> File "/home/ec2-user/grass/dist.x86_64-pc-linux-gnu/scripts/r.mask", >>> line 179, in main >>> type='area', cats=cats, where=where, env=env) >>> File >>> "/home/ec2-user/grass/dist.x86_64-pc-linux-gnu/etc/python/grass/script/core.py", >>> line 440, in run_command >>> returncode = ps.wait() >>> File "/usr/lib64/python3.7/subprocess.py", line 1019, in wait >>> return self._wait(timeout=timeout) >>> File "/usr/lib64/python3.7/subprocess.py", line 1653, in _wait >>> (pid, sts) = self._try_wait(0) >>> File "/usr/lib64/python3.7/subprocess.py", line 1611, in _try_wait >>> (pid, sts) = os.waitpid(self.pid, wait_flags) >>> KeyboardInterrupt >>> Traceback (most recent call last): >>> File "/home/ec2-user/volume_calc/grass_calc_vol.py", line 80, in >>> <module> >>> sys.exit(main()) >>> File "/home/ec2-user/volume_calc/grass_calc_vol.py", line 61, in main >>> Module("r.mask", vector="region") >>> File >>> "/home/ec2-user/grass/dist.x86_64-pc-linux-gnu/etc/python/grass/pygrass/modules/interface/module.py", >>> line 602, in __init__ >>> self.__call__(*args, **kargs) >>> File >>> "/home/ec2-user/grass/dist.x86_64-pc-linux-gnu/etc/python/grass/pygrass/modules/interface/module.py", >>> line 660, in __call__ >>> return self.run() >>> File >>> "/home/ec2-user/grass/dist.x86_64-pc-linux-gnu/etc/python/grass/pygrass/modules/interface/module.py", >>> line 783, in run >>> self.wait() >>> File >>> "/home/ec2-user/grass/dist.x86_64-pc-linux-gnu/etc/python/grass/pygrass/modules/interface/module.py", >>> line 796, in wait >>> stdout, stderr = self._popen.communicate(input=self.stdin) >>> File "/usr/lib64/python3.7/subprocess.py", line 956, in communicate >>> self.wait() >>> File "/usr/lib64/python3.7/subprocess.py", line 1019, in wait >>> return self._wait(timeout=timeout) >>> File "/usr/lib64/python3.7/subprocess.py", line 1653, in _wait >>> (pid, sts) = self._try_wait(0) >>> File "/usr/lib64/python3.7/subprocess.py", line 1611, in _try_wait >>> (pid, sts) = os.waitpid(self.pid, wait_flags) >>> KeyboardInterrupt >>> Traceback (most recent call last): >>> File "/home/ec2-user/grass/bin.x86_64-pc-linux-gnu/grass78", line >>> 2348, in <module> >>> main() >>> File "/home/ec2-user/grass/bin.x86_64-pc-linux-gnu/grass78", line >>> 2286, in main >>> returncode = run_batch_job(batch_job) >>> File "/home/ec2-user/grass/bin.x86_64-pc-linux-gnu/grass78", line >>> 1635, in run_batch_job >>> returncode = proc.wait() >>> File "/usr/lib64/python3.7/subprocess.py", line 1019, in wait >>> return self._wait(timeout=timeout) >>> File "/usr/lib64/python3.7/subprocess.py", line 1653, in _wait >>> (pid, sts) = self._try_wait(0) >>> File "/usr/lib64/python3.7/subprocess.py", line 1611, in _try_wait >>> (pid, sts) = os.waitpid(self.pid, wait_flags) >>> KeyboardInterrupt >>> >>> ``` >>> >>> I had to hit *CTRL + C *to stop the infinite loop. >>> >>> Few lines from my grass78 bin file inside >>> */home/ec2-user/grass/bin.x86_64-pc-linux-gnu/* >>> >>> ``` >>> >>> GISBASE = >>> os.path.normpath("/home/ec2-user/grass/dist.x86_64-pc-linux-gnu") >>> os.environ['GISBASE'] = GISBASE >>> CMD_NAME = "grass78" >>> GRASS_VERSION = "7.8.6dev" >>> LD_LIBRARY_PATH_VAR = 'LD_LIBRARY_PATH' >>> CONFIG_PROJSHARE = os.environ.get('GRASS_PROJSHARE', "/usr/share/proj") >>> >>> ``` >>> Environment variables that I am setting: >>> >>> ``` >>> env["LC_ALL"] = "C.UTF-8" >>> env["GISBASE"] = "/home/ec2-user/grass/dist.x86_64-pc-linux-gnu" >>> env["GISDBASE"] = self.tmpdir # in the above code eg. >>> *tmpo99fe5bi_grass_engine* >>> env['PATH'] = "$PATH:/usr/bin:$GISBASE/bin:$GISBASE/scripts" >>> env['LD_LIBRARY_PATH'] = "$LD_LIBRARY_PATH:$GISBASE/lib" >>> env['GISRC'] = "$HOME/.grass7" >>> env['PYTHONPATH'] = >>> "$HOME/grass/dist.x86_64-pc-linux-gnu/etc/python" >>> ``` >>> >>> Also, I had copied the r.external file from version grass-6.4.4 that was >>> installed automatically when I ran `sudo yum install grass`. Because it was >>> not present in the bin folder of this location >>> >>> >>> */home/ec2-user/grass/dist.x86_64-pc-linux-gnu/bin/* >>> >>> >>> Is there a way to get the file from outside, thus removing the >>> grass-6.4.4 version and using the grass-7.8.5 version r.external file (can >>> that be a cause of infinite loop)? >>> Any suggestions as to what is going wrong? or anything wrong in the >>> Grass SCRIPT mentioned above, that could potentially lead to an infinite >>> loop. >>> Please let me know if you need more information. >>> >>> -- >>> Regards, >>> Ayush Chauhan >>> >>> _______________________________________________ >>> grass-user mailing list >>> grass-user@lists.osgeo.org >>> https://lists.osgeo.org/mailman/listinfo/grass-user >>> >> > > -- > Regards, > Ayush Chauhan, > Senior Product Engineer, > +91 8269036401 | Huviair Technologies <http://huviair.com> > -- Regards, Ayush Chauhan, Senior Product Engineer, +91 8269036401 | Huviair Technologies <http://huviair.com>
_______________________________________________ grass-user mailing list grass-user@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/grass-user