<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML xmlns="http://www.w3.org/TR/REC-html40" xmlns:v =
"urn:schemas-microsoft-com:vml" xmlns:o =
"urn:schemas-microsoft-com:office:office" xmlns:w =
"urn:schemas-microsoft-com:office:word" xmlns:st1 =
"urn:schemas-microsoft-com:office:smarttags"><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.6000.16414" name=GENERATOR><!--[if !mso]>
<STYLE>v\:* {
BEHAVIOR: url(#default#VML)
}
o\:* {
BEHAVIOR: url(#default#VML)
}
w\:* {
BEHAVIOR: url(#default#VML)
}
..shape {
BEHAVIOR: url(#default#VML)
}
</STYLE>
<![endif]--><o:SmartTagType
namespaceuri="urn:schemas-microsoft-com:office:smarttags"
name="place"></o:SmartTagType><o:SmartTagType
namespaceuri="urn:schemas-microsoft-com:office:smarttags"
name="country-region"></o:SmartTagType><o:SmartTagType
namespaceuri="urn:schemas-microsoft-com:office:smarttags"
name="address"></o:SmartTagType><o:SmartTagType
namespaceuri="urn:schemas-microsoft-com:office:smarttags"
name="City"></o:SmartTagType><o:SmartTagType
namespaceuri="urn:schemas-microsoft-com:office:smarttags"
name="Street"></o:SmartTagType><!--[if !mso]>
<STYLE>st1\:* {
BEHAVIOR: url(#default#ieooui)
}
</STYLE>
<![endif]-->
<STYLE>@page Section1 {size: 612.0pt 792.0pt; margin: 72.0pt 90.0pt 72.0pt 90.0pt; }
P.MsoNormal {
FONT-SIZE: 12pt; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: "Times New Roman"
}
LI.MsoNormal {
FONT-SIZE: 12pt; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: "Times New Roman"
}
DIV.MsoNormal {
FONT-SIZE: 12pt; MARGIN: 0cm 0cm 0pt; FONT-FAMILY: "Times New Roman"
}
A:link {
COLOR: blue; TEXT-DECORATION: underline
}
SPAN.MsoHyperlink {
COLOR: blue; TEXT-DECORATION: underline
}
A:visited {
COLOR: purple; TEXT-DECORATION: underline
}
SPAN.MsoHyperlinkFollowed {
COLOR: purple; TEXT-DECORATION: underline
}
SPAN.EmailStyle17 {
COLOR: windowtext; FONT-FAMILY: Arial; mso-style-type: personal-compose
}
DIV.Section1 {
page: Section1
}
</STYLE>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></HEAD>
<BODY lang=EN-CA vLink=purple link=blue>
<DIV dir=ltr align=left><SPAN class=038044712-11062007><FONT face=Arial
color=#0000ff size=2>typo I spelled RETURN wrong - but evidentally I think I got
that from you :)</FONT></SPAN></DIV><BR>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>From:</B>
postgis-users-bounces@postgis.refractions.net
[mailto:postgis-users-bounces@postgis.refractions.net] <B>On Behalf Of </B>Obe,
Regina<BR><B>Sent:</B> Monday, June 11, 2007 8:42 AM<BR><B>To:</B> PostGIS Users
Discussion<BR><B>Subject:</B> RE: [postgis-users] (no
subject)<BR></FONT><BR></DIV>
<DIV></DIV>
<DIV dir=ltr align=left><SPAN class=302592412-11062007><FONT face=Arial
color=#0000ff size=2>Gary,</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=302592412-11062007><FONT face=Arial
color=#0000ff size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=302592412-11062007><FONT face=Arial
color=#0000ff size=2>1) That's the old way of writing pgsql functions. I
forget the transition period - I think it was around 8.0 - the new way uses $
dollar quoting and doesn't require aliasing in pgsql althought it still
does in sql procedural.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=302592412-11062007><FONT face=Arial
color=#0000ff size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=302592412-11062007><FONT face=Arial
color=#0000ff size=2>2) If you are using RECORD objects, I think you need to
specify the field datatypes before you can use it. </FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=302592412-11062007><FONT face=Arial
color=#0000ff size=2>3) That whole record thing seems like an unnecessary step
anyway.</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=302592412-11062007><FONT face=Arial
color=#0000ff size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=302592412-11062007><FONT face=Arial
color=#0000ff size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=302592412-11062007><FONT face=Arial
color=#0000ff size=2>Try instead - hope I didn't make any mistakes since I
didn't test it in my typing (you might be able to skip the declare part
since I've eradicated all the variables)</FONT></SPAN></DIV>
<DIV dir=ltr align=left><SPAN class=302592412-11062007><FONT face=Arial
color=#0000ff size=2></FONT></SPAN> </DIV>
<DIV dir=ltr align=left><SPAN class=302592412-11062007><FONT face=Arial size=2>
<P class=MsoNormal><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><FONT color=#0000ff>CREATE
OR REPLACE FUNCTION vts_insert_stop(<SPAN class=302592412-11062007>stopnum
</SPAN>text, <SPAN class=302592412-11062007>stopdes </SPAN>text, <SPAN
class=302592412-11062007>stopeasting </SPAN>numeric, <SPAN
class=302592412-11062007>stopnorthing </SPAN>numeric, <SPAN
class=302592412-11062007>projection </SPAN>numeric)<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><FONT color=#0000ff>
RETURNS numeric AS<o:p></o:p></FONT></SPAN></FONT></P>
<P class=MsoNormal><FONT face=Arial color=#0000ff><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN
class=302592412-11062007>$BODY$</SPAN></SPAN></FONT><FONT face="Courier New"
color=#0000ff size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><FONT
color=#0000ff>DECLARE<o:p></o:p></FONT></SPAN></FONT></P>
<P class=MsoNormal>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><FONT
color=#0000ff><o:p></o:p></FONT></SPAN></FONT></P><FONT face="Courier New"
size=2><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><FONT
color=#0000ff>BEGIN<o:p></o:p></FONT></SPAN></FONT>
<P></P>
<P class=MsoNormal>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><FONT
color=#0000ff><o:p></o:p></FONT></SPAN></FONT></P><FONT face="Courier New"
size=2><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><FONT
color=#0000ff> <o:p></o:p></FONT></SPAN></FONT>
<P></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><FONT
color=#0000ff> INSERT INTO
vts_route_stops(stop_number,stop_description,stop_latitude,stop_longitude)</FONT></SPAN></FONT></P>
<P class=MsoNormal><FONT color=#0000ff><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p><SPAN
class=302592412-11062007> <FONT
face=Arial>SELECT stopnum, stopdes, Y(SubSel.transformed_geom),
X(SubSel.transformed_geom)</FONT></SPAN></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT size=+0><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p><SPAN
class=302592412-11062007><FONT
color=#0000ff>
</FONT><FONT face=Arial><FONT color=#0000ff>FROM </FONT></P>
<P class=MsoNormal><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><FONT
color=#0000ff> <SPAN
class=302592412-11062007>(</SPAN>SELECT SetSRID(<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><FONT
color=#0000ff>
Transform(</FONT></SPAN></FONT><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><FONT
color=#0000ff>GeomFromText(</FONT></SPAN></FONT><FONT face="Courier New"
size=2><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><FONT
color=#0000ff>'POINT(' || stopeasting || ' ' stopnorthing || ')',
projection</FONT></SPAN></FONT><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><FONT color=#0000ff>),
4326</FONT></SPAN></FONT><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><FONT
color=#0000ff>),</FONT></SPAN></FONT><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><FONT color=#0000ff>-1) AS
transformed_geom)
SubSel;</FONT></SPAN></FONT></FONT></SPAN></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" color=#0000ff size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><FONT
color=#0000ff> RERTURN
void;<o:p></o:p></FONT></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" color=#0000ff size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><FONT
color=#0000ff>END</FONT></SPAN></FONT></P>
<P class=MsoNormal><FONT color=#0000ff><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN
class=302592412-11062007>$BODY$</SPAN></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><FONT color=#0000ff>
LANGUAGE 'plpgsql'
VOLATILE;<o:p></o:p></FONT></SPAN></FONT></P></FONT></SPAN></DIV><BR>
<DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>From:</B>
postgis-users-bounces@postgis.refractions.net
[mailto:postgis-users-bounces@postgis.refractions.net] <B>On Behalf Of </B>Gary
Townsend<BR><B>Sent:</B> Friday, June 08, 2007 5:17 PM<BR><B>To:</B>
postgis-users@postgis.refractions.net<BR><B>Subject:</B> [postgis-users] (no
subject)<BR></FONT><BR></DIV>
<DIV></DIV>
<DIV class=Section1>
<P class=MsoNormal><FONT face=Arial size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Below is a function I am trying to
create that will take a series of geographic points form a UTM projection and
translate it to lat/long that’s not the problem though the translation works
wonderfully as a separate select statement. I’m trying to encapsulate this into
a function now and I am getting a problem returned saying:
<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face=Arial size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><o:p> </o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face=Arial size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">ERROR: syntax error at or near
"$2"<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face=Arial size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">SQL state:
42601<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face=Arial size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Character:
137<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face=Arial size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Context: PL/pgSQL function
"vts_insert_stop" line 10 at select into variables<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face=Arial size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><o:p> </o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face=Arial size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">I’m not sure where I’ve gone
sideways on this but seeing as how I’m still learning the pgplsql syntax I
figured it could be anywhere I thought maybe someone here may have a better
soloution to what I’m trying to do or can see what I’m doin
wrong.<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">CREATE OR REPLACE FUNCTION
vts_insert_stop(text, text, numeric, numeric,
numeric)<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"> RETURNS numeric
AS<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">DECLARE<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
stopnum ALIAS for $1;<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
stopdes ALIAS for $2;<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
stopeasting ALIAS for $3;<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
stopnorthing ALIAS for $4;<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
projection ALIAS for $5;<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
transCoord RECORD;<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">BEGIN<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
SELECT INTO transCoord X(SubSel.transformed_geom), Y(SubSel.transformed_geom)
FROM (<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
SELECT SetSRID(<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
Transform(<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
GeomFromText(<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
''POINT('' || stopeasting || '' '' stopnorthing || '')'',
projection<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
), 4326<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
),<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
-1) AS transformed_geom) SubSel;<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
INSERT INTO
vts_route_stops(stop_number,stop_description,stop_latitude,stop_longitude)<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
VALUES(stopnum,stopdes,transCoord.Y,transCoord.X);<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
RERTURN void;<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p> </o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">END'<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face="Courier New" size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"> LANGUAGE 'plpgsql'
VOLATILE;<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face=Arial size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><o:p> </o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face=Arial size=2><SPAN
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><o:p> </o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face=Arial color=maroon size=3><SPAN
style="FONT-SIZE: 12pt; COLOR: maroon; FONT-FAMILY: Arial">
<o:p></o:p></SPAN></FONT></P>
<TABLE class=MsoTableGrid style="BORDER-COLLAPSE: collapse" cellSpacing=0
cellPadding=0 border=0>
<TBODY>
<TR style="HEIGHT: 64.15pt" height=86>
<TD
style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 53.3pt; PADDING-TOP: 0cm; HEIGHT: 64.15pt"
vAlign=top width=71 height=86>
<P class=MsoNormal><FONT face=Arial color=maroon size=3><SPAN
style="FONT-SIZE: 12pt; COLOR: maroon; FONT-FAMILY: Arial"><IMG
id=_x0000_i1025 height=45 src="cid:038044712@11062007-2890"
width=50><o:p></o:p></SPAN></FONT></P></TD>
<TD
style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 297pt; PADDING-TOP: 0cm; HEIGHT: 64.15pt"
vAlign=top width=396 height=86>
<P class=MsoNormal><B><FONT face=Arial color=maroon size=2><SPAN
style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: maroon; FONT-FAMILY: Arial">Gary
Townsend (Systems Programmer &
Developer )<o:p></o:p></SPAN></FONT></B></P>
<P class=MsoNormal><B><FONT face=Arial color=#333300 size=2><SPAN
style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #333300; FONT-FAMILY: Arial">Spatial
Mapping Ltd.<o:p></o:p></SPAN></FONT></B></P>
<P class=MsoNormal><st1:address
style="BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x"
tabIndex=0 w:st="on"><st1:Street w:st="on"><FONT face=Arial size=1><SPAN
style="FONT-SIZE: 8pt; FONT-FAMILY: Arial">#200 484 2<SUP>nd</SUP>
Ave.</SPAN></FONT></st1:Street><FONT face=Arial size=1><SPAN
style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"> <st1:City w:st="on">Prince
George</st1:City></SPAN></FONT></st1:address><FONT face=Arial size=1><SPAN
style="FONT-SIZE: 8pt; FONT-FAMILY: Arial">, B.C., <st1:place
w:st="on"><st1:country-region
w:st="on">Canada</st1:country-region></st1:place> V2L
2Z7<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face=Arial size=1><SPAN
style="FONT-SIZE: 8pt; FONT-FAMILY: Arial">Phone: 250 564
1928<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face=Arial size=1><SPAN
style="FONT-SIZE: 8pt; FONT-FAMILY: Arial">Fax: 250 564
0751<o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal><FONT face=Arial color=maroon size=3><SPAN
style="FONT-SIZE: 12pt; COLOR: maroon; FONT-FAMILY: Arial"><o:p> </o:p></SPAN></FONT></P></TD></TR></TBODY></TABLE>
<P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN
style="FONT-SIZE: 12pt"><o:p> </o:p></SPAN></FONT></P></DIV>
<P>
<HR SIZE=1>
<P></P>
<P><STRONG>The substance of this message, including any attachments, may be
confidential, legally privileged and/or exempt from disclosure pursuant to
Massachusetts law. It is intended solely for the addressee. If you received this
in error, please contact the sender and delete the material from any computer.
</STRONG></P></BODY></HTML>
<HTML><BODY><P><hr size=1></P>
<P><STRONG>
The substance of this message, including any attachments, may be confidential, legally privileged and/or exempt from disclosure pursuant to Massachusetts law. It is intended solely for the addressee. If you received this in error, please contact the sender and delete the material from any computer.
</STRONG></P></BODY></HTML>