vecfocal.sml

  Download

More scripts: Advanced

Syntax Highlighing:

comments, key words, predefined symbols, class members & methods, functions & classes
            
# VecFocal.sml
#
# for each corresponding point in a vector layer - calculates focal mean around that
# same point in a corresponding raster layer
#
# a sample case would be extract maximum points from an elevation raster then use 
# the resulting vector points and the original raster
#
# a sample RVC project file called VecFocal.rvc has these two such files
#
#
# AUTHOR: 			David Wilson
# 						MicroImages, Inc.
# REQUESTED BY:
# CREATION DATE: 	Jan. 20, 1997
# REVISION LIST: 
#
# procedure and function definitions
#
#
# Global Variables
#
raster R;
vector V;
# set to true if you want to see output on console
numeric debugPrintToConsole = true;
# get the input raster and vector
GetInputRaster(R);
GetInputVector(V);
# get the desired output file name
string outFileName$ = PopupString("Input output file Name: ");
# open file for write
class FILE fHandle;
fHandle = fopen(outFileName$, "w");
clear(); # clear the console
# get georef object id's for raster and vector
class Georef georefR, georefV;
georefR = GetLastUsedGeorefObject(R);
georefV = GetLastUsedGeorefObject(V);
# determine number of points in vector
numeric numVectorPoints = NumVectorPoints(V);
array numeric focalOut[numVectorPoints];	# array to output for each point
# print to screen
if (debugPrintToConsole) {
	printf("%s\n\n", "Point   Vector X    Vector Y    georef X  " $2
							+ " georef Y   Raster Row   Raster Col  Focal median");
	}
# print to file
fprintf(fHandle, "%s\n\n", "Point   Vector X    Vector Y    georef X  " $2
							+ " georef Y   Raster Row   Raster Col  Focal median");
# loop over all points - compute mean in 5x5 area around each point
numeric i;
for i = 1 to numVectorPoints {
	# get the vector coordinates
	numeric x, y, xVector, yVector;
	x = V.point[i].Internal.x;
	y = V.point[i].Internal.y;
	# convert vector coordinates to georef
	ObjectToMap(V, x, y, georefV, xVector, yVector);
	# convert raster  coordinates to georef
	# note the reversal of rCol and rLine
	numeric rLine, rCol;
	MapToObject(georefR, xVector, yVector, R, rCol, rLine);
	# round rCol, rLine - could use floor() to force to upper left corner
	rLine = round(rLine);
	rCol = round(rCol);
	# calculate focal mean
	focalOut[i] = FocalMean(R, 5, 5, rLine, rCol);
	# print to screen
	if (debugPrintToConsole) {
		printf("%5d %10.2f  %10.2f  %10.2f  %10.2f  %10d   %10d %e\n", $2
					 i, x, y, xVector, yVector, rLine, rCol, focalOut[i]);
		}
	# print to file
	fprintf(fHandle, "%5d %10.2f  %10.2f  %10.2f  %10.2f  %10d   %10d %e\n", $2
					 i, x, y, xVector, yVector, rLine, rCol, focalOut[i]);
	}
GeorefFree(georefR);	# must free up id's
GeorefFree(georefV);
CloseRaster(R);	# close raster
fclose(fHandle);	# close text file