[GRASS-SVN] r66033 - in grass-addons/grass7/vector: . v.in.gbif

svn_grass at osgeo.org svn_grass at osgeo.org
Wed Aug 26 13:59:29 PDT 2015


Author: hellik
Date: 2015-08-26 13:59:29 -0700 (Wed, 26 Aug 2015)
New Revision: 66033

Added:
   grass-addons/grass7/vector/v.in.gbif/
   grass-addons/grass7/vector/v.in.gbif/Makefile
   grass-addons/grass7/vector/v.in.gbif/v.in.gbif.html
   grass-addons/grass7/vector/v.in.gbif/v.in.gbif.py
Log:
new addon: v.in.gbif to import GBIF species distribution data via GDAL vector VRT

Added: grass-addons/grass7/vector/v.in.gbif/Makefile
===================================================================
--- grass-addons/grass7/vector/v.in.gbif/Makefile	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.gbif/Makefile	2015-08-26 20:59:29 UTC (rev 66033)
@@ -0,0 +1,7 @@
+MODULE_TOPDIR = ../..
+
+PGM = v.in.gbif
+
+include $(MODULE_TOPDIR)/include/Make/Script.make
+
+default: script

Added: grass-addons/grass7/vector/v.in.gbif/v.in.gbif.html
===================================================================
--- grass-addons/grass7/vector/v.in.gbif/v.in.gbif.html	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.gbif/v.in.gbif.html	2015-08-26 20:59:29 UTC (rev 66033)
@@ -0,0 +1,44 @@
+<h2>DESCRIPTION</h2>
+
+<em>v.in.gbif</em> imports <a href="http://www.gbif.org/">GBIF</a> 
+species distribution data. The location must be in latlon (WGS84). 
+
+<p>
+The species distribution data downloaded from <a href="http://www.gbif.org/">GBIF</a> 
+hast to be unzipped before importing the csv file.
+</p>
+
+<p>
+<em>v.in.gbif</em> saves the data to a <a href="http://www.gdal.org">GDAL</a> 
+<a href="http://www.gdal.org/drv_vrt.html">VRT - Virtual Datasource</a> 
+which will be imported by <a href="v.in.ogr.html">v.in.ogr</a>. The VRT data set
+can be used in any GDAL aware software.
+
+As some column names in the original data set are similar to <a 
+href="http://www.postgresql.org/docs/devel/static/sql-keywords-appendix.html">SQL reserverd key words</a>, 
+the columns will renamed with the prefix <i>g_</i>. 
+</p>
+
+<h2>EXAMPLE</h2>
+
+<div class="code">
+ <pre>
+  v.in.gbif vector= cat=40102 dir=C:\tmp distance=25
+  v.in.gbif input=C:\data\0004248-150811131857512\0004248-150811131857512.csv output_vrt=chondrilla.vrt dir=C:\data\0004248-150811131857512\ output=chondrilla
+ </pre>
+</div>
+
+<h2>SEE ALSO</h2>
+
+<em>
+<a href="v.in.ascii.html">v.in.ascii</a>
+<a href="v.in.ogr.html">v.in.ogr</a>
+</em>
+
+<h2>AUTHOR</h2>
+
+Helmut Kudrnovsky
+
+<p>
+<i>Last changed: $Date: 2014-11-13 23:06:04 +0100 (Do, 13 Nov 2014) $</i>
+</p>
\ No newline at end of file

Added: grass-addons/grass7/vector/v.in.gbif/v.in.gbif.py
===================================================================
--- grass-addons/grass7/vector/v.in.gbif/v.in.gbif.py	                        (rev 0)
+++ grass-addons/grass7/vector/v.in.gbif/v.in.gbif.py	2015-08-26 20:59:29 UTC (rev 66033)
@@ -0,0 +1,174 @@
+#!/usr/bin/env python
+
+"""
+MODULE:    v.in.gbif
+
+AUTHOR(S): Helmut Kudrnovsky <alectoria AT gmx at>
+
+PURPOSE:   Imports GBIF species distribution data by saving original data to
+           a GDAL VRT and importing the VRT by v.in.ogr
+
+COPYRIGHT: (C) 2015 by the GRASS Development Team
+
+           This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+"""
+
+#%module
+#% description: importing of GBIF species distribution data
+#% keyword: vector
+#% keyword: geometry
+#%end
+
+#%option G_OPT_F_INPUT 
+#% key: input
+#% required: yes
+#%end
+
+#%option G_OPT_F_OUTPUT
+#% key: output_vrt
+#% description: VRT file (with vrt extension)
+#% required: yes
+#%end
+
+#%option G_OPT_M_DIR
+#% key: dir
+#% description: Directory where the output will be found
+#% required : yes
+#%end
+
+#%option G_OPT_V_OUTPUT
+#% key: output
+#% description: name of imported GBIF data set
+#% required : yes
+#%end
+
+import sys
+import os
+import csv
+import math
+import grass.script as grass
+
+if not os.environ.has_key("GISBASE"):
+    grass.message( "You must be in GRASS GIS to run this program." )
+    sys.exit(1)
+
+def main():
+
+    # check for unsupported locations
+    in_proj = grass.parse_command('g.proj', flags='g')
+    if in_proj['unit'].lower() == 'Meter':
+        grass.fatal(_("Projected locations are not supported"))
+    if in_proj['unit'].lower() == 'US survey foot':
+        grass.fatal(_("Projected locations are not supported"))
+    if in_proj['name'].lower() == 'xy_location_unprojected':
+        grass.fatal(_("xy-locations are not supported"))
+
+    gbifraw = options['input']
+    directory = options['dir']
+    gbifvrt = options['output_vrt']
+    gbifimported = options['output']
+    gbif_vrt_layer = options['output_vrt'].split('.')[0]
+    gbifcsv = gbif_vrt_layer+'.csv'	
+    global tmp	 
+	
+    # Extract vector line
+    grass.message( "Starting importing GBIF data ..." )
+    grass.message( "preparing data for vrt ..." )
+
+    # new quoted GBIF csv file
+    new_gbif_csv = os.path.join( directory, gbifcsv )
+
+    # quote raw data
+    with open('%s' % (gbifraw), 'rb') as csvinfile:
+		gbifreader = csv.reader(csvinfile, delimiter='\t')
+		with open ('%s' % (new_gbif_csv), 'wb') as csvoutfile:
+			gbifwriter = csv.writer(csvoutfile, quotechar='"', quoting=csv.QUOTE_ALL)
+			for row in gbifreader:
+				gbifwriter.writerow(row)
+    grass.message( "----" )
+
+    # write	vrt		
+    grass.message( "writing vrt ..." )
+    new_gbif_vrt = os.path.join( directory, gbifvrt )
+    
+    f = open('%s' % (new_gbif_vrt), 'wt')
+    f.write("""<OGRVRTDataSource>
+    <OGRVRTLayer name="%s">
+        <SrcDataSource relativeToVRT="1">%s</SrcDataSource>
+        <GeometryType>wkbPoint</GeometryType> 
+        <LayerSRS>WGS84</LayerSRS>
+		<Field name="g_gbifid" src="gbifid" type="Integer" />
+		<Field name="g_datasetkey" src="datasetkey" type="String" width="255" />
+		<Field name="g_occurrenceid" src="occurrenceid" type="String" width="255" />
+		<Field name="g_kingdom" src="kingdom" type="String" width="50" />
+		<Field name="g_phylum" src="phylum" type="String" width="50" />
+		<Field name="g_class" src="class" type="String" width="50" />
+		<Field name="g_order" src="order" type="String" width="50" />
+		<Field name="g_family" src="family" type="String" width="100" />
+		<Field name="g_genus" src="genus" type="String" width="255" />
+		<Field name="g_species" src="species" type="String" width="255" />
+		<Field name="g_infraspecificepithet" src="infraspecificepithet" type="String" width="100" />
+		<Field name="g_taxonrank" src="taxonrank" type="String" width="50" />
+		<Field name="g_scientificname" src="scientificname" type="String" width="255" />
+		<Field name="g_countrycode" src="countrycode" type="String" width="25" />
+		<Field name="g_locality" src="locality" type="String" width="255" />
+		<Field name="g_publishingorgkey" src="publishingorgkey" type="String" width="255" />
+		<Field name="g_decimallatitude" src="decimallatitude" type="Real" />
+		<Field name="g_decimallongitude" src="decimallongitude" type="Real" />
+		<Field name="g_elevation" src="elevation" type="Real" />
+		<Field name="g_elevationaccuracy" src="elevationaccuracy" type="String" width="50" />
+		<Field name="g_depth" src="depth" type="String" width="255" />
+		<Field name="g_depthaccuracy" src="depthaccuracy" type="String" width="255" />
+		<Field name="g_eventdate" src="eventdate" type="String" width="255" />
+		<Field name="g_day" src="day" type="Integer" width="255" />
+		<Field name="g_month" src="month" type="Integer" width="255" />
+		<Field name="g_year" src="year" type="Integer" width="255" />
+		<Field name="g_taxonkey" src="taxonkey" type="String" width="100" />
+		<Field name="g_specieskey" src="specieskey" type="String" width="100" />
+		<Field name="g_basisofrecord" src="basisofrecord" type="String" width="100" />
+		<Field name="g_institutioncode" src="institutioncode" type="String" width="100" />
+		<Field name="g_collectioncode" src="collectioncode" type="String" width="100" />
+		<Field name="g_catalognumber" src="catalognumber" type="String" width="255" />
+		<Field name="g_recordnumber" src="recordnumber" type="String" width="255" />
+		<Field name="g_identifiedby" src="identifiedby" type="String" width="255" />
+		<Field name="g_rights" src="rights" type="String" width="255" />
+		<Field name="g_rightsholder" src="rightsholder" type="String" width="255" />
+		<Field name="g_recordedby" src="recordedby" type="String" width="255" />
+		<Field name="g_typestatus" src="typestatus" type="String" width="255" />
+		<Field name="g_establishmentmeans" src="establishmentmeans" type="String" width="255" />
+		<Field name="g_lastinterpreted" src="lastinterpreted" type="String" width="255" />
+		<Field name="g_mediatype" src="mediatype" type="String" width="100" />
+		<Field name="g_issue" src="issue" type="String" width="255" />
+		<GeometryField encoding="PointFromColumns" x="decimallongitude" y="decimallatitude"/>
+	</OGRVRTLayer>	
+	</OGRVRTDataSource>""" % (gbif_vrt_layer, gbifcsv) )
+	
+    f.close()
+
+    grass.message( "----" )
+    # Give information where output file are saved								 
+    grass.message( "GBIF vrt files:" )
+    grass.message( gbifvrt )
+    grass.message( "-" )	
+    grass.message( gbifcsv )
+    grass.message( "are saved in:" )
+    grass.message( directory )	
+    grass.message( "----" )
+
+    # import GBIF vrt
+    grass.message( "importing GBIF vrt ..." )
+
+    grass.run_command("v.in.ogr", input = new_gbif_vrt,
+                                     layer = gbif_vrt_layer,
+                                     output = gbifimported,
+                                     quiet = True)
+
+    grass.message( "..." )
+    # v.in.gbif done!	
+    grass.message( "importing GBIF data done!" )	
+
+if __name__ == "__main__":
+    options, flags = grass.parser()
+    sys.exit(main())



More information about the grass-commit mailing list