I Updated the php wrapper for this support. Details in
http://mapserver.gis.umn.edu/bugs/show_bug.cgi?id=1623 for more details.
example of usage :
<?php
dl("php_mapscript_48.dll");
$shape1 = ms_shapeObjFromWkt("POLYGON((0.0 0.0, 0.0 2.0, 2.0 2.0, 2.0
0.0, 0.0 0.0))");
$shape2 = ms_shapeObjFromWkt("POLYGON((0.5 0.5, 0.5 1.5, 1.5 1.5, 1.5
0.5, 0.5 0.5))");
if ($shape1->containsShape($shape2))
echo "1\n";
else
echo "0\n";
if ($shape2->containsShape($shape1))
echo "1\n";
else
echo "0\n";
if ($shape2->containsShape($shape2))
echo "1\n";
else
echo "0\n";
?>
Later,
Stephen Lime wrote:
Well, a nice bottle of scotch would be a good start. ;-)
For grins I added the conains operator to the geos wrapper and to Swig-based
mapscript. That support is in CVS head (not 4.8, too late for that, sorry).
I hesitate to touch the PHP wrapper though. You'll have to convince one of
the other developers to make that change (or have them ok me doing it).
Anyway in a language like Perl you can do:
shape1 = mapscript::shapeObj::fromWKT('POLYGON((0.0 0.0, 0.0 2.0, 2.0 2.0,
2.0 0.0, 0.0 0.0))') or die("Shape 1: ". mapscript::msGetErrorString("\n")
."\n");
$shape2 = mapscript::shapeObj::fromWKT('POLYGON((0.5 0.5,0.5 1.5,1.5 1.5,1.5
0.5,0.5 0.5))') or die("Shape 2:". mapscript::msGetErrorString("\n") ."\n");
print $shape1->contains($shape2) ."\n";
print $shape2->contains($shape1) ."\n";
print $shape2->contains($shape2) ."\n";
Which outputs:
1
0
1
as expected. This is only exposing the operator. Nothing is itegrated into
the MapServer query functions. However, in MapScript you could:
1) use the bounds of shape 1 to do a rect-based query and then
2) loop through the result set doing contains
I'm not going to do a full implementation of GEOS until I convert the cpp
interface to c (sometime soon). However, it seems like contains might be
interesting to folks in the meantime so...
Steve
On Thu, 19 Jan 2006 19:21:26 -0600, Mark Adams <[EMAIL PROTECTED]> wrote:
This is a timely discussion for me. I urgently need to provide support for
a "contains" query specifically in an application I am developing (other
GEOS supported operators would be great, but the contains query is
critical). What would it take to add this functionality into mapserver and
mapscript? (We use PHP Mapscript here.)
Thanks.
------------------------------
Mark Adams
Senior Analyst & Project Manager
Cuesta Systems (DPRA Canada)
5230 South Service Road
Burlington, ON L7L 5K2
Phone: 905-333-4544 x14
Fax: 905-333-0455
Email: [EMAIL PROTECTED]
On Thu, 19 Jan 2006 10:34:39 -0600, Steve Lime
<[EMAIL PROTECTED]> wrote:
The only GEOS methods exposed are convex hull and a buffer. I didn't
want to go nuts until I received some feedback about the usefulness of
that type of functionality. They are not difficult to add. Are there
specific
operators you are interested in and would be willing to test? Let me know
if so and we can work in the 4.9 branch.
A full list of operators supported by GEOS is available at
geos.refractions.net.
As for mapfile integration. My idea was to expose a few operators that
work of a single shape (e.g. buffer, convex hull, etc...) via the
PROCESSING
block that is currently used for defining raster operations. That way you
could basically apply a GEOS operator to all features of a particular
layer as
they are read from the data source- for any data source.
Steve
listuser HH <[EMAIL PROTECTED]> 01/19/06 5:49 AM >>>
Hello all,
I would like to know how much of the GEOS functions (and which) are
already available in the MapScript API and in PHP MapScript. I found
only intersects and cointains for both. The shapeObj in PHP Mapscript
also has buffer and convexhull.
Can someone tell me what the plans for including more of the GEOS
functions are?
Are there plans to use some functions (i.e. buffer) directly in the
mapfile?
Are there any docs that give some more information?
Regards
Norbert
--
----------------------------------------------------------------
Assefa Yewondwossen
Software Analyst
Email: [EMAIL PROTECTED]
http://www.dmsolutions.ca/
Phone: (613) 565-5056 (ext 14)
Fax: (613) 565-0925
----------------------------------------------------------------