[GRASS-SVN] r31330 - grass/trunk/scripts/r.in.wms

svn_grass at osgeo.org svn_grass at osgeo.org
Tue May 13 08:15:35 EDT 2008


Author: hamish
Date: 2008-05-13 08:15:35 -0400 (Tue, 13 May 2008)
New Revision: 31330

Modified:
   grass/trunk/scripts/r.in.wms/description.html
   grass/trunk/scripts/r.in.wms/r.in.gdalwarp
   grass/trunk/scripts/r.in.wms/r.in.wms
   grass/trunk/scripts/r.in.wms/wms.download
   grass/trunk/scripts/r.in.wms/wms.request
Log:
* add -g flag for braindead servers which can't handle POST data
* check to see if RGB image has an alpha layer before using it (jpeg)
* parse Channel list properly
* mention better method: gdal_merge.py
* add some more debug msgs
    (merge from devbr6)


Modified: grass/trunk/scripts/r.in.wms/description.html
===================================================================
--- grass/trunk/scripts/r.in.wms/description.html	2008-05-13 12:03:32 UTC (rev 31329)
+++ grass/trunk/scripts/r.in.wms/description.html	2008-05-13 12:15:35 UTC (rev 31330)
@@ -21,6 +21,9 @@
 Some brain-dead servers will only talk to certain web browsers. You can
 fool these by adding "<tt>--user-agent=MSIE5.5</tt>" to <b>wgetoptions</b>
 or for curl adding "<tt>-A "MSIE5.5</tt>" to <b>curloptions</b>.
+Other brain-dead servers will not accept queries in the form of POST data.
+If you get an error try using the <b>-g</b> flag to force <em>r.in.wms</em>
+to send an atomic GET request instead.
 
 
 <H2>EXAMPLES</H2>

Modified: grass/trunk/scripts/r.in.wms/r.in.gdalwarp
===================================================================
--- grass/trunk/scripts/r.in.wms/r.in.gdalwarp	2008-05-13 12:03:32 UTC (rev 31329)
+++ grass/trunk/scripts/r.in.wms/r.in.gdalwarp	2008-05-13 12:15:35 UTC (rev 31330)
@@ -80,6 +80,8 @@
     exec g.parser "$0" "$@"
 fi
 
+g.message -d "[r.in.gdalwarp]"
+
 #### setup temporary file
 TMP="`g.tempfile pid=$$`"
 if [ $? -ne 0 ] || [ -z "$TMP" ] ; then
@@ -171,6 +173,11 @@
 	else
 		ALPHALAYER=${TMPMAPNAME}.alpha
 	fi
+	# test to see if the alpha map exists
+	g.findfile element=cell file="$ALPHALAYER" > /dev/null
+	if [ $? -ne 0 ] ; then
+	    ALPHALAYER=""
+	fi
 
 	# Calculate the new maps:
 	for SUFFIX in $CHANNEL_SUFFIXES ; do
@@ -185,9 +192,16 @@
 		    continue
 		fi
 
-		# Use alpha channel for nulls:
-		GRASS_VERBOSE=1 \
-		  r.mapcalc "${MAP}${sfx} = if( $ALPHALAYER, ${TMPMAPNAME}${sfx}, null() )"
+		g.message -d message="alpha=[$ALPHALAYER]  MAPsfx=[${MAP}${sfx}]  tmpname=[${TMPMAPNAME}${sfx}]"
+		if [ -n "$ALPHALAYER" ] ; then
+		    # Use alpha channel for nulls:
+# problem: I've seen a map where alpha was 1-255; 1 being transparent. what to do?
+#    (Geosci Australia Gold layer, format=tiff)
+		    GRASS_VERBOSE=1 \
+		      r.mapcalc "${MAP}${sfx} = if( $ALPHALAYER, ${TMPMAPNAME}${sfx}, null() )"
+		else
+		    g.copy rast="${TMPMAPNAME}${sfx}","${MAP}${sfx}" --quiet
+		fi		  
 
 		# Copy the color tables:
 		r.colors map=${MAP}${sfx} rast=${TMPMAPNAME}${sfx} --quiet
@@ -210,8 +224,10 @@
 	fi
 
 	# Remove the old channels:
-	CHANNEL_LIST_COMMA=`echo "$CHANNEL_LIST" | sed "s/ /,/g"`
+	CHANNEL_LIST_COMMA=`echo "$CHANNEL_LIST" | tr '\n' ',' | sed -e 's/ /,/g' -e 's/,$//'`
+	g.message -d message="CHANNEL_LIST_COMMA=[$CHANNEL_LIST_COMMA]"
 	g.remove rast="$CHANNEL_LIST_COMMA" --quiet
+
 }
 
 nowarpimport () {
@@ -357,6 +373,8 @@
 	    #   different color tables so patches output end up all freaky.
 	    #	r.mapcalc r#,g#,b# manual patching + r.composite?
 	    #	or d.out.file + r.in.png + r.region?
+	    # *** there is a GDAL utility to do this: gdal_merge.py
+	    #       http://www.gdal.org/gdal_merge.html
 
 	    #r.patch input="$MAPLIST" output="${GIS_OPT_OUTPUT}"
 	    IFS=" "

Modified: grass/trunk/scripts/r.in.wms/r.in.wms
===================================================================
--- grass/trunk/scripts/r.in.wms/r.in.wms	2008-05-13 12:03:32 UTC (rev 31329)
+++ grass/trunk/scripts/r.in.wms/r.in.wms	2008-05-13 12:15:35 UTC (rev 31330)
@@ -29,24 +29,30 @@
 #%end
 #%flag
 #% key: o
-#% description: Don't request transparent data.
+#% description: Don't request transparent data
 #% guisection: Request
 #%end
 #%flag
 #% key: c
-#% description: Clean existing data out of download directory.
+#% description: Clean existing data out of download directory
 #% guisection: Download
 #%end
 #%flag
 #% key: k
-#% description: Keep band numbers instead of using band color names.
+#% description: Keep band numbers instead of using band color names
 #% guisection: Import
 #%end
 #%flag
 #% key: p
-#% description: Don't reproject the data, just patch it.
+#% description: Don't reproject the data, just patch it
 #% guisection: Import
 #%end
+#%flag
+#% key: g
+#% label: Use GET method instead of POST data method
+#% description: This may be needed to connect to servers which lack POST capability
+#% guisection: Request
+#%end
 #%option
 #% key: output
 #% type: string
@@ -317,37 +323,49 @@
 listLayers() {
 
 	CAPABILITIES_FILE="${TMP}capabilities.xml"
-    
+
 	STRING="service=WMS&request=GetCapabilities&${GIS_OPT_WMSQUERY}";
 	g.message -d message="POST-data: [$STRING]"
 
 	### wget or curl the XML and grep the lines with layer names
 	g.message message="List of layers for server <$GIS_OPT_MAPSERVER>:"
 	g.message -v message=""
-	if [ "$USE_WGET" ] ; then
-	    wget $GIS_OPT_WGETOPTIONS --post-data="${STRING}" "$GIS_OPT_MAPSERVER" -O "$CAPABILITIES_FILE";
-	    message 1 "wget $GIS_OPT_WGETOPTIONS --post-data=\"${STRING}\" \"$GIS_OPT_MAPSERVER\" -O \"$CAPABILITIES_FILE\";"
-	else
-	    curl $GIS_OPT_CURLOPTIONS -o "$CAPABILITIES_FILE" -d "${STRING}" "$GIS_OPT_MAPSERVER"
-	    message 1 "curl $GIS_OPT_CURLOPTIONS -o \"$CAPABILITIES_FILE\" -d \"${STRING}\" \"$GIS_OPT_MAPSERVER\""
-	fi
-	g.message -v message=""
 
-	if [ ! -e "$CAPABILITIES_FILE" ] ; then
-	    g.message -e "Downloading XML file"
-	    \rm "$TMP"
-	    exit 1
+	if [ "$GIS_FLAG_G" -eq 0 ] ; then
+	    if [ "$USE_WGET" ] ; then
+		wget $GIS_OPT_WGETOPTIONS --post-data="${STRING}" \
+		  "$GIS_OPT_MAPSERVER" -O "$CAPABILITIES_FILE";
+		message 1 "wget $GIS_OPT_WGETOPTIONS --post-data=\"${STRING}\" \"$GIS_OPT_MAPSERVER\" -O \"$CAPABILITIES_FILE\";"
+	    else
+		curl $GIS_OPT_CURLOPTIONS -o "$CAPABILITIES_FILE" \
+		  -d "${STRING}" "$GIS_OPT_MAPSERVER"
+		message 1 "curl $GIS_OPT_CURLOPTIONS -o \"$CAPABILITIES_FILE\" -d \"${STRING}\" \"$GIS_OPT_MAPSERVER\""
+	    fi
+	    g.message -v message=""
+
+	    if [ ! -e "$CAPABILITIES_FILE" ] ; then
+		g.message -e "Downloading XML file"
+		\rm "$TMP"
+		exit 1
+	    fi
+
+	    # work-around for brain-dead WMSs which want POST-data as part of the GET URL
+	    #   (allowed by OGC WMS def S6.3.4)
+	    if [ `wc -c < "$CAPABILITIES_FILE"` -eq 0 ] ; then
+		g.message -w "Downloaded XML file was empty -- trying another method"
+		GIS_FLAG_G=1
+	    fi
 	fi
 
-	# work-around for brain-dead WMSs which want POST-data as part of the GET URL (allowed by OGC WMS def S6.3.4)
-	if [ `wc -c < "$CAPABILITIES_FILE"` -eq 0 ] ; then
-	    g.message -w "Downloaded XML file was empty -- trying another method"
+	if  [ "$GIS_FLAG_G" -eq 1 ] ; then
 	    g.message -v message=""
 	    if [ "$USE_WGET" ] ; then
-		wget $GIS_OPT_WGETOPTIONS "${GIS_OPT_MAPSERVER}${STRING}" -O "$CAPABILITIES_FILE";
+		wget $GIS_OPT_WGETOPTIONS "${GIS_OPT_MAPSERVER}${STRING}" \
+		  -O "$CAPABILITIES_FILE";
 		message 1 "wget $GIS_OPT_WGETOPTIONS \"${GIS_OPT_MAPSERVER}${STRING}\" -O \"$CAPABILITIES_FILE\";"
 	    else
-		curl $GIS_OPT_CURLOPTIONS -o "$CAPABILITIES_FILE" "${GIS_OPT_MAPSERVER}${STRING}"
+		curl $GIS_OPT_CURLOPTIONS -o "$CAPABILITIES_FILE" \
+		  "${GIS_OPT_MAPSERVER}${STRING}"
 		message 1 "curl $GIS_OPT_CURLOPTIONS -o \"$CAPABILITIES_FILE\" \"${GIS_OPT_MAPSERVER}${STRING}\""
 	    fi
 	    g.message -v message=""
@@ -484,6 +502,7 @@
 	fi
 fi
 
+addflag DOWNLOAD g ${GIS_FLAG_G}
 addargument DOWNLOAD requestfile "${REQUESTFILE}"
 addargument DOWNLOAD wgetoptions "${GIS_OPT_WGETOPTIONS}"
 addargument DOWNLOAD curloptions "${GIS_OPT_CURLOPTIONS}"

Modified: grass/trunk/scripts/r.in.wms/wms.download
===================================================================
--- grass/trunk/scripts/r.in.wms/wms.download	2008-05-13 12:03:32 UTC (rev 31329)
+++ grass/trunk/scripts/r.in.wms/wms.download	2008-05-13 12:15:35 UTC (rev 31330)
@@ -19,6 +19,11 @@
 #%  description: Downloads data from servers.
 #%  keywords: wms
 #%End
+#%flag
+#% key: g
+#% label: Use GET method instead of POST data method
+#% description: This may be needed to connect to servers which lack POST capability
+#%end
 #%option
 #% key: requestfile
 #% type: string
@@ -56,6 +61,8 @@
   exec g.parser "$0" "$@"
 fi
 
+g.message -d "[wms.download]"
+
 #### setup temporary file
 TMP="`g.tempfile pid=$$`"
 if [ $? -ne 0 ] || [ -z "$TMP" ] ; then
@@ -110,13 +117,17 @@
   g.message "Downloading tiles"
 
   # init POST-data vs. GET URL method variable
-  POST_DATA_OK=1
+  if [ "$GIS_FLAG_G" -eq 0 ] ; then
+     POST_DATA_OK=1
+  else
+     POST_DATA_OK=0
+  fi
 
   CONTENTS=`cat "${REQUESTFILE}"`
 
   NUMBER_OF_TILES=0
   for line in $CONTENTS ; do
-	g.message -d message="wget command: [$line]"
+	g.message -d message="wget command: [$line]" debug=2
 	eval "$line"
 
 	emptyness=`file "$OUTPUT_FILE" | grep empty$`
@@ -144,7 +155,7 @@
 #Get the data from the WMS server
 GetData() {
    g.message "Downloading data"
-   g.message -v message="Requesting Data from ${SERVER}:"
+   g.message -v message="Requesting Data from <${SERVER}:>"
    g.message -v message="$STRING"
 
    if [ "$POST_DATA_OK" -eq 1 ] ; then

Modified: grass/trunk/scripts/r.in.wms/wms.request
===================================================================
--- grass/trunk/scripts/r.in.wms/wms.request	2008-05-13 12:03:32 UTC (rev 31329)
+++ grass/trunk/scripts/r.in.wms/wms.request	2008-05-13 12:15:35 UTC (rev 31330)
@@ -130,6 +130,8 @@
   exec g.parser "$0" "$@"
 fi
 
+g.message -d "[wms.request]"
+
 SED="sed"
 GREP="grep"
 # check if we have sed



More information about the grass-commit mailing list