WKT RFC - Call for a vote...
Sean Gillies
sgillies at FRII.COM
Sun Sep 4 12:12:26 EDT 2005
Hi Steve,
Comment inline ...
On Sep 2, 2005, at 9:59 PM, Steve Lime wrote:
> This is a MIME message. If you are reading this text, you may want to
> consider changing to a mail reader or gateway that understands how to
> properly handle MIME multipart messages.
>
> --=__Part9FBDC8B2.0__=
> Content-Type: text/plain; charset=US-ASCII
> Content-Transfer-Encoding: quoted-printable
> Content-Disposition: inline
>
> Hi all: I've integrated the comments from Franks and Sean (many
> thanks!) =
> into the attached version (can also be found in CVS HEAD). I'd like to
> =
> call for a vote from technical committee members on the proposal.
> Since =
> this is a holiday weekend I propose letting voting continue through
> next =
> Tuesday. I'll start things off with a +1...
>
> Steve
>
> Stephen Lime
> Data & Applications Manager
>
> Minnesota DNR
> 500 Lafayette Road
> St. Paul, MN 55155
> 651-297-2937
>
> --=__Part9FBDC8B2.0__=
> Content-Type: text/plain; name="ms-rfc-2.txt"
> Content-Transfer-Encoding: 8bit
> Content-Disposition: attachment; filename="ms-rfc-2.txt"
>
> ===============================================================
> MS RFC 2: Creating line features and/or shapes using WKT
> ===============================================================
>
> :Date: 2005/07/13
> :Author: Steve Lime
> :Contact: steve.lime at DNR.STATE.MN.US
> :Last Edited: $Date: 2005/09/03 03:48:24 $
> :Status: Proposed
>
> Description: Developing inline features or shapes within MapScript can
> be a
> bit cumbersome. One alternative would be to allow users to define
> feature
> using the Well-Known Text format. The proposed solution would allow
> users
> to use this format:
>
> 1) within a mapfile
> 2) via URL
> 3) via MapScript
> 4) via MapServer query template
>
> Instead of writing a new WKT parser we would provide access to
> underlying GEOS
> or OGR functionality to do this. Notes about the actual implementation
> are
> included below.
>
> Files affected
> ~~~~~~~~~~~~~~~~~
>
> - mapfile.h => new constant, WKT
> - maplexer.l => recognize the new constant
> - mapfile.c => process new mapfile parameter with FEATURE block (WKT),
> and
> update URL parsing in a similar manner
> - mapgeos.cpp => wrap GEOS WKT reading/writing code
> - mapogr.cpp => wrap OGR WKT reading/writing code
> - mapprimitive.c => wrap the GEOS and OGR WKT writer/reading code,
> this would
> be the "public" interface
> - maptemplate.c => update the shpxy tag with a "-wkt" option so it
> would output
> the WKT version of a shape. Placing here would allow us to take
> advantage of
> the projection support already in place, plus any future options
> (thining, buffers
> and so on).
> - mapscript/swiginc/shape.i => update constructor to pass a WKT string
> and to
> define a "toString" method that would output a WKT string. Similar
> modifications
> would have to be made within PHP/MapScript, patterned after the
> SWIG-based
> interface.
>
> Backwards compatabilty issues
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> N/A, new functionality
>
> Implementation Details
> ~~~~~~~~~~~~~~~~~~~~~~
>
> - The C API will take the form:
>
> shapeObj *msShapeFromWKT( const char * );
> char *msShapeToWKT( shapeObj * );
>
> These are contrary to some of the older code (e.g.
> msLayerNextShape()). However there
> are 2 places the WKT APIs will be used: 1) MapScript and 2) creating
> inline features
> via URL or MapFiles. In both cases the above functions would be
> prefered.
>
> - In MapScript, creating a shape will take the form of an overloaded
> constructor, e.g.:
>
> $shape = new shapeObj($mapscript::MS_SHAPE_LINE); OR
> $shape = new shapeObj('LINESTRING(0 0,1 1,1 2)');
>
I think this will be fine, but for Python we'll need to set a default
value for the shape type, and use a keyword arg like
shape = mapscript.shapeObj(wkt='LINESTRING (...)')
I vote +1.
> - In MapScript, a toWKT() method will be added to shapeObj object.
>
> - WKT is geometry only. The attributes, index, tileindex, classindex,
> and text fields do not exist in WKT and will have to be set
> "elsewhere".
> - There is no widely supported, or standardized approach to "measure"
> values in WKT though Refractions does support it in "EWKT". For
> now it
> is assumed that measure values will not be preserved from WKT.
>
> - There is a well defined way of including Z coordinates and these
> should
> be carried through if MapServer is built with Z and M support
> enabled.
>
> - Development will be accompanied by a set of tests. Sean Gillies has
> already created
> a test case or two.
>
> Transformations shapeObj to WKT
> -------------------------------
>
> - MS_SHAPE_POINT: If numlines and numpoints are one, then this is
> converted
> to a POINT object in WKT. If there are more points, this is
> converted
> to a MULTIPOINT object.
>
> - MS_SHAPE_LINE: if numlines is 1 then this will be translated to a
> LINESTRING
> otherwise it will be translated to a MULTILINESTRING.
>
> - MS_SHAPE_POLYGON: MapServer does not keep track of interior and
> exterior
> rings in a shape, since the scanline rasterization mechanism of GD
> does not require this information. However, when converting to WKT
> we
> need to know whether we have a single polygon with holes, or
> multiple
> polygons (more than one exterior ring). If numlines is 1, we can
> directly
> translate to POLYGON(), otherwise the rings will need to be
> analysed to
> identify outer rings, and to associate inner rings with their
> outher ring.
> If more than one outer ring exist, a MULTIPOLYGON will be produced,
> otherwise a POLYGON will be produced.
>
> - MS_SHAPE_NULL: This results in an empty WKT string.
>
> Transformations WKT to shapeObj
> -------------------------------
>
> - POINT: Translates to an MS_SHAPE_POINT object with one point and
> one line.
>
> - LINESTRING: Translates to an MS_SHAPE_LINE object with one line.
>
> - POLYGON: Translates to an MS_SHAPE_POLYGON object with one line for
> the
> outer ring and one line for each inner ring.
>
> - MULTIPOINT: Translates to an MS_SHAPE_POINT object with one line,
> and one
> point for each line.
>
> - MULTILINESTRING: Translates to an MS_SHAPE_LINE object with one
> line for
> each linestring in the container.
>
> - MULTIPOLYGON: Translates into an MS_SHAPE_POLYGON with each ring of
> each
> polygon being a line in the resulting polygon object.
>
> - GEOMETRYCOLLECTION: Treat as MULTIPOINT, MULTILINESTRING or
> MULTIPOLYGON if
> the contents are all compatible, otherwise throw an exception.
>
> Bug ID
> ~~~~~~~~
>
> unassigned
>
> Voting history
> ~~~~~~~~~~~~~~~~~
>
> None
>
>
>
> --=__Part9FBDC8B2.0__=--
>
>
--
Sean Gillies
sgillies at frii dot com
http://zcologia.com
More information about the mapserver-dev
mailing list