<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:odc="urn:schemas-microsoft-com:office:odc" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:D="DAV:" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:Z="urn:schemas-microsoft-com:" xmlns:st="" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Verdana;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
code
        {mso-style-priority:99;
        font-family:"Courier New";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
span.EmailStyle20
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.EmailStyle21
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle22
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#993366;}
span.EmailStyle23
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle24
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle25
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle26
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle27
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle28
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle29
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle30
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle31
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle32
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#003300;}
span.EmailStyle33
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle34
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle35
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:olive;}
span.EmailStyle36
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle37
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:teal;}
span.EmailStyle38
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle39
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle40
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:purple;}
span.EmailStyle41
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle43
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
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-US link=blue vlink=purple>
<div class=Section1>
<p class=MsoNormal><span style='color:#1F497D'>This is for FDO expressions. The
parameter is an object of type geometry, which could be the property of a
feature or a computed property.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
fdo-internals-bounces@lists.osgeo.org
[mailto:fdo-internals-bounces@lists.osgeo.org] <b>On Behalf Of </b>Dan Stoica<br>
<b>Sent:</b> Wednesday, November 05, 2008 11:14 AM<br>
<b>To:</b> FDO Internals Mail List<br>
<b>Subject:</b> RE: [fdo-internals] Request review of RFC
28-AddStart/EndExpressionFunctions<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><span style='color:#1F497D'>By </span><span
style='color:purple'>geometry </span><span style='color:#1F497D'>you mean the </span><span
style='color:#7030A0'>geometry column</span><span style='color:#1F497D'> or a</span><span
style='color:purple'> geometry value </span><span style='color:#1F497D'>which
definitely has to be a point?<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Dan.<o:p></o:p></span></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
fdo-internals-bounces@lists.osgeo.org
[mailto:fdo-internals-bounces@lists.osgeo.org] <b>On Behalf Of </b>Robert
Fortin<br>
<b>Sent:</b> Wednesday, November 05, 2008 11:03 AM<br>
<b>To:</b> FDO Internals Mail List<br>
<b>Subject:</b> RE: [fdo-internals] Request review of RFC
28-AddStart/EndExpressionFunctions<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><span style='color:purple'>I’m all for trying to use
existing standard and applying to our case.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:purple'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:purple'>In order to address my use case
which is only concerned with point geometry, I would have to do and
implement the following:<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:purple'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:purple'>X(geometry)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:purple'>Y(geometry)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:purple'>Z(geometry)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:purple'>(and M(geometry) by extension)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:purple'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:purple'>Everything else is additional to
the use case.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:purple'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:purple'>So the RFC should only be about
these 3 functions and mention the additional ones and trying to match the OGC
standard.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:purple'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:purple'>RF<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:purple'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:purple'><o:p> </o:p></span></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
fdo-internals-bounces@lists.osgeo.org
[mailto:fdo-internals-bounces@lists.osgeo.org] <b>On Behalf Of </b>Orest
Halustchak<br>
<b>Sent:</b> Wednesday, November 05, 2008 9:13 AM<br>
<b>To:</b> FDO Internals Mail List<br>
<b>Subject:</b> RE: [fdo-internals] Request review of RFC 28-AddStart/EndExpressionFunctions<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><span style='color:#1F497D'>Hi,<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>I agree with Jason’s suggestion
to mimic OGC functions as much as possible.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>The OGC Simple Feature spec
(06-103r3, which is the most recent version) has different functions for
different geometry types.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Methods that apply to all
geometry types include these (among others):<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
Dimension(): Int<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
GeometryType(): String<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
SRID(): Int<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
Envelope(): Geometry<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
IsEmpty(): Int<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
IsSimple(): Int<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
Is3D(): Int<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
IsMeasured(): Int<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Geometry collection types such
as multi-geometry, multi-point, multi-polygon etc. include:<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
NumGeometries(): Int<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
GeometryN(N): Geometry<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Point includes:<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
X(): double<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
Y(): double<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
Z(): double<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
M(): double<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Z() and M() return null if the
geometry does not include them. Jason, you mentioned returning null rather than
throwing exceptions for cases that are not defined, and this is consistent with
OGC.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Curve includes:<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
Length(): double<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
StartPoint(): Point<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
EndPoint(): Point<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
IsClosed(): Int (true if start point equals end point)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
IsRing(): Int (true if IsClosed and IsSimple)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>LineString includes:<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
NumPoints(): Int<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
PointN(N): Point<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>MultiCurve is interesting:<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
IsClosed(): Int (true if each element curve is closed)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
Length(): double (sum of lengths of the elements)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Surface and MultiSurface
include:<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
Area(): double<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
Centroid(): Point (mathematical centroid, not guaranteed to be on the
surface)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
PointOnSurface(): Point (a point guaranteed to be on the surface)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Polygon (sub-type of Surface)
includes:<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
ExteriorRing(): LineString<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
NumInteriorRing(): Int<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
InteriorRing(N): LineString<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Interestingly, there are no
MinX, MinY type functions. The Envelope of a geometry is meant to include them,
but an Envelope is a geometry type so you have to process it to get specific
minx, miny, etc. values. Envelope geometry typically is a polygon, but I think
OGC allows it to be two points as well.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>So, what should we include for
FDO? It makes sense for the long term to support all of the above functions.
Some of these such as Length and Area we already support. However, for this
particular RFC, it would be a fair amount of work to add all of these. From
Jason’s last email, maybe we change this RFC to add the following. The rest can
be done as they are needed using other RFCs to add them.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
StartPoint(Geometry): Point, returning null for multi-type geometries<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
EndPoint(Geometry): Point, returning null for multi-type geometries<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
NumPoints(Geometry): Int64, returning null for non-linestrings, e.g. if input
is a curve with an arc, result would be null; point geometries could be
supported<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
PointN(Geometry, N): Point, returning null for non-linestrings and if N is out
of range; point geometries could be supported<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
X(Geometry): double, returning null if geometry is not a point<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
Y(Geometry): double, returning null if geometry is not a point<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
Z(Geometry): double, returning null if geometry is not a point or does not have
Z<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
M(Geometry): double, returning null if geometry is not a point or does not have
M<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Possibly NumPoints and PointN
also could be done later.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>It’s odd to have an M value on a
point, but because you can do something like M(PointN(geometry, 4)), it does
make sense.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Thanks,<br>
Orest.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
fdo-internals-bounces@lists.osgeo.org
[mailto:fdo-internals-bounces@lists.osgeo.org] <b>On Behalf Of </b>Jason Birch<br>
<b>Sent:</b> Tuesday, November 04, 2008 7:21 PM<br>
<b>To:</b> FDO Internals Mail List<br>
<b>Subject:</b> RE: [fdo-internals] Request review of RFC
28-AddStart/EndExpressionFunctions<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><span lang=EN-CA style='color:#1F497D'>It seems like it
would be a good idea to mimic these OGC spatial functions as much as possible.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-CA style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-CA style='color:#1F497D'>Instead of a “last”
argument, it may be better to create the helper functions (StartPoint,
EndPoint). The EndPoint function could be “equivalent” to
PointN(geom,(NumPoints(geom)) but have an optimized implementation.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-CA style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-CA style='color:#1F497D'>I wonder if FDO
should consider further mimicking the OGC functions by also implementing
something like their STX and STY to get the individual dimensions of explicit
points, rather than shortcuts that have to make assumptions about which point
the ordinates are pulled from. For instance XCOORD(PointN(geom,1))
or XCOORD(StartPoint(geom)) instead of PointX(geom)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-CA style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-CA style='color:#1F497D'><a
href="http://msdn.microsoft.com/en-us/library/bb933828.aspx">http://msdn.microsoft.com/en-us/library/bb933828.aspx</a><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-CA style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-CA style='color:#1F497D'>I _<i>do</i>_ like
that these functions return NULL for non-point geometries rather than throwing
exceptions.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-CA style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-CA style='color:#1F497D'>Jason<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-CA style='color:#1F497D'><o:p> </o:p></span></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
fdo-internals-bounces@lists.osgeo.org
[mailto:fdo-internals-bounces@lists.osgeo.org] <b>On Behalf Of </b>Robert
Fortin<br>
<b>Sent:</b> Tuesday, November 04, 2008 15:51<br>
<b>To:</b> FDO Internals Mail List<br>
<b>Subject:</b> RE: [fdo-internals] Request review of RFC
28-AddStart/EndExpressionFunctions<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><span lang=EN-CA><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:teal'>Dan,<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:teal'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:teal'>Interesting that you found this
info. I believe the STPointN definition is similar to what I was
proposing since it depends on the order of output. I was suggesting the
same thing just in different word just applying to FDO.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:teal'>I think adding the NumPoint
function is also interesting and could be useful. I’m worried about the
performance of the nested function compare to a simple “last” argument.
So I still think it would useful to have the “last” point as argument.
“1” for the first point is obvious.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:teal'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:teal'>RF<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:teal'><o:p> </o:p></span></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
fdo-internals-bounces@lists.osgeo.org
[mailto:fdo-internals-bounces@lists.osgeo.org] <b>On Behalf Of </b>Dan Stoica<br>
<b>Sent:</b> Tuesday, November 04, 2008 6:14 PM<br>
<b>To:</b> FDO Internals Mail List<br>
<b>Subject:</b> RE: [fdo-internals] Request review of RFC 28
-AddStart/EndExpressionFunctions<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><span style='color:#1F497D'>I had a look into SqlServer2008
documentation for inspiration. It has a number of interesting functions:<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><strong><span style='font-size:8.0pt;font-family:"Verdana","sans-serif";
color:black'>STStartPoint()</span></strong><span style='color:#1F497D'><o:p></o:p></span></p>
<p style='line-height:140%;vertical-align:top'><strong><span style='font-size:
8.0pt;line-height:140%;font-family:"Verdana","sans-serif";color:black'>STEndPoint()</span></strong><span
style='font-size:8.0pt;line-height:140%;font-family:"Verdana","sans-serif";
color:black'> is the equivalent of <a
href="http://msdn.microsoft.com/en-us/library/bb933844.aspx"
id="ctl00_rs1_mainContentContainer_ctl10">STPointN</a></span><code><span
style='font-size:10.0pt;line-height:140%;color:black'>(x.STNumPoints())</span></code><span
style='font-size:8.0pt;line-height:140%;font-family:"Verdana","sans-serif";
color:black'>.<o:p></o:p></span></p>
<p class=MsoNormal><strong><span style='font-size:8.0pt;font-family:"Verdana","sans-serif";
color:black'>STNumPoints() </span></strong><span style='font-size:8.0pt;
font-family:"Verdana","sans-serif";color:black'>This method counts the points
in the description of a <b>geography</b> instance. Duplicate points are
counted. If this instance is a <b>geometry</b> collection, this method returns
of the total number of points in each of the elements in the collection.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal style='margin-bottom:7.5pt;line-height:140%;vertical-align:
top'><b><span style='font-size:8.0pt;line-height:140%;font-family:"Verdana","sans-serif";
color:black'>STPointN()</span></b><span style='font-size:8.0pt;line-height:
140%;font-family:"Verdana","sans-serif";color:black'> returns the point
specified by <i>expression</i> by ordering all the points in the same order
they would be output: </span><span style='font-size:8.0pt;line-height:140%;
font-family:"Verdana","sans-serif";color:red'>first by <b>geography</b> instance,
then by ring within the instance (if appropriate), and then by point within the
ring. </span><span style='font-size:8.0pt;line-height:140%;font-family:"Verdana","sans-serif";
color:black'>This order is deterministic.<br>
If this method is called with a value less than 1, it throws an <b>ArgumentOutOfRangeException</b>.<br>
If this method is called with a value greater than the number of points in the
instance, it returns null.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>I hope this clarifies a
little the desired behavior for polygons and multi part geometries (</span><span
style='color:red'>see in red</span><span style='color:#1F497D'>).<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>As a minimal number of
functions, I guess these ones will suffice:<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal style='margin-left:.5in'><span style='color:#1F497D'>NumPoints(geom)<o:p></o:p></span></p>
<p class=MsoNormal style='margin-left:.5in'><span style='color:#1F497D'>PointX(geom,
N) etc.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Note the expression engine
supports embedded functions, therefore for getting the Start/End points
we can say:<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal style='margin-left:.5in'><span style='color:#1F497D'>PointX(geom,
1) etc.<o:p></o:p></span></p>
<p class=MsoNormal style='margin-left:.5in'><span style='color:#1F497D'>PointX(geom,
NumPoints(geom)) etc.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Dan.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
fdo-internals-bounces@lists.osgeo.org [mailto:fdo-internals-bounces@lists.osgeo.org]
<b>On Behalf Of </b>Robert Fortin<br>
<b>Sent:</b> Tuesday, November 04, 2008 4:41 PM<br>
<b>To:</b> FDO Internals Mail List<br>
<b>Subject:</b> RE: [fdo-internals] Request review of RFC 28
-AddStart/EndExpressionFunctions<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><span style='color:olive'>Guys,<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:olive'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:olive'>Unless there is standard out
there, we can come up with whatever definition we want as long as it is
consistant and it makes sense.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:olive'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:olive'>The RFC proposes the following:<o:p></o:p></span></p>
<p><span lang=EN style='font-size:10.0pt;font-family:"Verdana","sans-serif";
color:black'>If the provided geometry is a point geometry, the result of the
Start/End functions is the x, y, z values of the point.<br>
If the provided geometry is a multi-point geometry, the result of the Start/End
functions is the x, y, z values of the first point.<o:p></o:p></span></p>
<p><span lang=EN style='font-size:10.0pt;font-family:"Verdana","sans-serif";
color:black'>>> I think Start should be referencing the first point and
End the last point in case of multi-point. <o:p></o:p></span></p>
<p><span lang=EN style='font-size:10.0pt;font-family:"Verdana","sans-serif";
color:black'>If the provided geometry is a line geometry, the result of the
Start/End functions is the x, y, z values of the start and end points of the
first line.<br>
If the provided geometry is a multi-line geometry, the result of the Start/End
functions is the x, y, z values of the start and end points of the first line.<o:p></o:p></span></p>
<p><span lang=EN style='font-size:10.0pt;font-family:"Verdana","sans-serif";
color:black'>>> Same here. Start – first point of first line, End –
last point of last line.<o:p></o:p></span></p>
<p><span lang=EN style='font-size:10.0pt;font-family:"Verdana","sans-serif";
color:black'>If the provided geometry is a polygon geometry, the result of the
Start/End functions is the x, y, z values of the start and end points of the
exterior ring of the polygon.<br>
If the provided geometry is a multi-polygon geometry, the result of the
Start/End functions is the x, y, z values of the start and end points of the
exterior ring of the first polygon.<o:p></o:p></span></p>
<p><span lang=EN style='font-size:10.0pt;font-family:"Verdana","sans-serif";
color:black'>>> Same again. Start – first point of first ring, End
– last point of last ring.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:olive'>But we all know that it is not
valuable to use those on polygon or circle (which is just an arc) but I don’t
want the function to throw an error because a polygon geometry is passed as input.
<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:olive'>Let’s agree on what it should be
and return it.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:olive'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:olive'>RF<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:olive'><o:p> </o:p></span></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
fdo-internals-bounces@lists.osgeo.org
[mailto:fdo-internals-bounces@lists.osgeo.org] <b>On Behalf Of </b>Traian
Stanev<br>
<b>Sent:</b> Tuesday, November 04, 2008 3:15 PM<br>
<b>To:</b> FDO Internals Mail List<br>
<b>Subject:</b> RE: [fdo-internals] Request review of RFC 28
-AddStart/EndExpressionFunctions<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Moreover, what if the geometry
is a circle? </span><span style='font-family:Wingdings;color:#1F497D'>J</span><span
style='color:#1F497D'><o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<div style='border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt'>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
fdo-internals-bounces@lists.osgeo.org
[mailto:fdo-internals-bounces@lists.osgeo.org] <b>On Behalf Of </b>Dan Stoica<br>
<b>Sent:</b> Tuesday, November 04, 2008 3:14 PM<br>
<b>To:</b> FDO Internals Mail List<br>
<b>Subject:</b> RE: [fdo-internals] Request review of RFC 28
-AddStart/EndExpressionFunctions<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><span style='color:#1F497D'>Robert, returning to the
original issue: what is the meaning of PointX(geometry, ‘end’) for a
polygon?<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Dan.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
fdo-internals-bounces@lists.osgeo.org
[mailto:fdo-internals-bounces@lists.osgeo.org] <b>On Behalf Of </b>Robert
Fortin<br>
<b>Sent:</b> Tuesday, November 04, 2008 2:46 PM<br>
<b>To:</b> FDO Internals Mail List<br>
<b>Subject:</b> RE: [fdo-internals] Request review of RFC 28 -AddStart/EndExpressionFunctions<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><span style='color:#003300'>I think there was plenty of good
idea of how far we can go with these kind of functions. But, trying to go
back to the original issue we were trying to resolve by RFC-28 which is simply to
get the coordinates values for the first and last point…<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#003300'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#003300'>I think Romy has an interesting
proposal that makes the function evolutive over time and avoid over populating
the list of functions with new names each time we think of a new possibility.
It also makes it clear that it is about the points on the geometry and not
computed point as other functions like MidX or CentroidX would be (but
that a matter for another debate).<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#003300'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#003300'>I was thinking of even
rationalizing it further (by adding another enumeration parameter to indicate
x,y and z – we forgot about “m” by the way!) but I think the name of the
function PointX, PointY and PointZ are just clear enough.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#003300'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#003300'>Can we go for that as far as the
RFC is concerned?<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#003300'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#003300'>RF<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#003300'><o:p> </o:p></span></p>
<div style='border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt'>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
fdo-internals-bounces@lists.osgeo.org [mailto:fdo-internals-bounces@lists.osgeo.org]
<b>On Behalf Of </b>Romica Dascalescu<br>
<b>Sent:</b> Tuesday, November 04, 2008 11:27 AM<br>
<b>To:</b> FDO Internals Mail List<br>
<b>Subject:</b> RE: [fdo-internals] Request review of RFC 28
-AddStart/EndExpressionFunctions<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><span style='color:#1F497D'>Hi,<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>A different approach is to
create functions which takes a geometry and an enumeration, this way each
provider can implement all cases or just a few of them, e.g.:<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>PointX(geom, enum)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>PointY(geom, enum)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>PointZ(geom, enum)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Where enum can be: ‘start’,
‘end’, ‘min’, ‘max’, ‘centroid’, …<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>For now we may implement just a
few of them (start, end) and in the future we could implement more cases.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Romy.<o:p></o:p></span></p>
</div>
</div>
</div>
</body>
</html>