home products news downloads documentation support gallery online maps resellers search
TNTmips Downloads Menu

HOME

CONTACT US

CURRENT RELEASE
  TNT 2013

DEVELOPMENT VERSION
  TNT 2014

TNTmips Pro
PRIOR RELEASES
  TNT 2012

FREE SOFTWARE
  TNTmips Free
  TNTatlas
  TNTsdk

MORE DOWNLOADS
  HASP Key Driver
  Screen Recorder
  TNT Language Kits
  Sample Geodata
  TNT Scripts

DOCUMENTATION
  TNTmips Tutorials
  Tutorial Datasets
  Technical Guides
  Scripts
  Quick Guides

MORE INFO
  Download FAQs
  FTP
  Download Managers
  Find Reseller

SITE MAP


DB2.sml


# DB2.SML
# Sample script for tutorial "Writing Scripts with SML".
# Illustrates creating database table, fields,
# and attaching records.

# Script creates a new vector with implied georeference
# read from the input vector. A point database table called
# "SoilTypes" is created for the new vector with fields
# "SYMBOL" (string), "SOIL" (string), and "WHEAT_YLD"
# (integer).  In the main processing loop the script reads
# centroid location for each polygon in the input vector
# and creates a point at that location. The value for the
# SYMBOL field is read from the Class polygon table, the
# value for the SOIL field is read from the DESCRIPTN polygon
# table, and the value for the WHEAT_YLD field is read from 
# the YIELD polygon table.  These values are read into a new
# record for the SoilTypes table and the record is
# attached to the current vector point.

### Declarations
class VECTOR VectIn, VectOut;

clear();
PopupMessage("Select / CB_DATA / CB_SOILS.RVC / CBSOILS_Lite" );

### Get input vector object with polygons.
GetInputVector(VectIn);

### Get georeference parameters for input vector.
class GEOREF georefV;
georefV = GetLastUsedGeorefObject( VectIn );

### Get information about "DESCRIPTN" polygon table;
### This is needed later to check if attached records exist.
class DATABASE polydb;					# handle for polygon database.
polydb = OpenVectorPolyDatabase( VectIn );
class DBTABLEINFO descriptn;			# handle for DESCRIPT table.
descriptn = TableGetInfo( VectIn.poly.DESCRIPTN );

### Get new output vector object initialized for use with
### with the Vector Toolkit, and create implied 
### georeference using parameters from input vector.
GetOutputVector( VectOut, "VectorToolkit,Planar" );
CreateImpliedGeoref( VectOut, georefV.Projection );

# Create point database for VectOut.
class DATABASE pdb;							# handle for point database
pdb = OpenVectorPointDatabase( VectOut );

# Create blank table "SoilTypes" in point database.
class DBTABLEINFO soiltype;				# handle for table
soiltype = TableCreate(pdb,"SoilTypes","Table created by SML script");
soiltype.OneRecordPerElement = 1;  		# set attachment type for records

# Create string field "SYMBOL" in "SoilTypes".
class DBFIELDINFO symbol;					# handle for field
symbol = TableAddFieldString(soiltype,"SYMBOL",6,6);

# Create string field "SOIL" in "SoilTypes".
class DBFIELDINFO soil;						# handle for field
soil = TableAddFieldString(soiltype,"SOIL",80,80);

# Create integer field "WHEAT_YLD" in "SoilTypes".
class DBFIELDINFO wheat;					# handle for field
wheat = TableAddFieldInteger(soiltype,"WHEAT_YLD",10);

array numeric polyrecords[1]; 	# array to hold polygon record number
array numeric ptrecords[1];		# array to hold point record number for attachment.

numeric numpolys;					# number of polygons in input vector
numeric i;							# counter for processing loop
string soil$;						# value for soil field
numeric wheatnum;					# value for wheat field
string symbol$;					# value for symbol field
numeric x, y;						# object coordinates of polygon centroid
numeric mapX, mapY;				# map coordinates of polygon centroid
numeric pointnum;					# counter for number of points added to outut vector
numeric recordnum;				# record number created by TableNewRecord() function call

numpolys = NumVectorPolys(VectIn);

# Main processing loop
for i = 1 to numpolys {
	soil$ = "";
	wheatnum = 0;

	x = VectIn.poly[i].POLYSTATS.CentX;
	y = VectIn.poly[i].POLYSTATS.CentY;
	ObjectToMap( VectIn, x, y, georefV, mapX, mapY );

	VectorAddPoint( VectOut, mapX, mapY );
	pointnum = pointnum + 1;

	symbol$ = VectIn.poly[i].CLASS.Class$;

	# polygons in WATER class don't have records in the
	# DESCRIPTN and YIELD tables so check for attached
	# record before trying to read values.

	if (TableReadAttachment( descriptn, i, polyrecords) > 0 ) {
		soil$ = VectIn.poly[i].DESCRIPTN.NAME$;
		wheatnum = VectIn.poly[i].YIELD.WHEAT;
	}

	# Create new record in SoilType table with current field
	# values.
	recordnum = TableNewRecord( soiltype, symbol$, soil$, wheatnum );
	ptrecords[1] = recordnum;

	# Attach this new record to current point element.
	TableWriteAttachment( soiltype, pointnum, ptrecords, 1, "point");
}
VectorValidate (VectOut);
print(TableReadFieldStr(soiltype, "SOIL", 371)); # Internal Automated Tests Check
CloseVector( VectOut );
# End



Back Home ©MicroImages, Inc. 2013 Published in the United States of America
11th Floor - Sharp Tower, 206 South 13th Street, Lincoln NE 68508-2010   USA
Business & Sales: (402)477-9554  Support: (402)477-9562  Fax: (402)477-9559
Business info@microimages.com  Support support@microimages.com  Web webmaster@microimages.com

25 March 2009

page update: 26 May 11