From: <bma...@us...> - 2008-08-14 09:54:09
|
Revision: 3799 http://fudaa.svn.sourceforge.net/fudaa/?rev=3799&view=rev Author: bmarchan Date: 2008-08-14 09:54:18 +0000 (Thu, 14 Aug 2008) Log Message: ----------- Renomme et generalise InterpolationPtAdapter Added Paths: ----------- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/InterpolationTargetGISAdapter.java Removed Paths: ------------- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/InterpolationTargetPtAdapter.java Copied: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/InterpolationTargetGISAdapter.java (from rev 3798, branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/InterpolationTargetPtAdapter.java) =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/InterpolationTargetGISAdapter.java (rev 0) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/InterpolationTargetGISAdapter.java 2008-08-14 09:54:18 UTC (rev 3799) @@ -0,0 +1,159 @@ +/* + * @creation 5 sept. 2005 + * @modification $Date: 2007-06-05 08:57:43 $ + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.ctulu.interpolation; + +import java.util.ArrayList; + +import org.fudaa.ctulu.gis.GISCoordinateSequenceContainerInterface; +import org.fudaa.ctulu.gis.GISLib; +import org.fudaa.ctulu.gis.GISZoneCollection; + +import com.vividsolutions.jts.algorithm.SIRtreePointInRing; +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.Envelope; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.LinearRing; +import com.vividsolutions.jts.geom.Point; +import com.vividsolutions.jts.geom.Polygon; + +/** + * Un adapteur pour une cible d'interpolation a partir d'un modele contenant des + * g\xE9om\xE9tries. + * + * @author Fred Deniger + * @version $Id: InterpolationSupportGISAdapter.java,v 1.2 2007-06-11 13:03:29 deniger Exp $ + */ +public class InterpolationTargetGISAdapter implements InterpolationTarget { + + Envelope env_; + LinearRing extern_; + final GISZoneCollection geometries_; + SIRtreePointInRing tester_; + /** Si le modele ne contient que des points, optimisation de la cible */ + final boolean onlyPoints_; + /** Si le modele continet autre chose que des points */ + int[][] idx2geom_; + + final Coordinate tmp_ = new Coordinate(); + final Coordinate tmpX1_ = new Coordinate(); + final Coordinate tmpX2_ = new Coordinate(); + + /** + * @param _geoms + */ + public InterpolationTargetGISAdapter(final GISZoneCollection _geoms) { + super(); + geometries_ = _geoms; + + onlyPoints_=containsOnlyPoints(); + if (!onlyPoints_) initIndexes(); + } + + /** + * Retourne vrai si le modele ne contient que des points. + * @return True : Si vide ou uniquement des points. + */ + public boolean containsOnlyPoints() { + int nb=geometries_.getNumGeometries(); + for (int i=0; i<nb; i++) { + if (!(geometries_.getGeometry(i) instanceof Point)) return false; + } + return true; + } + + private void initIndexes() { + ArrayList<int[]> vidx2geom=new ArrayList<int[]>(); + + int nb=geometries_.getNumGeometries(); + for (int i=0; i<nb; i++) { + Geometry g=geometries_.getGeometry(i); + int nbpts=g.getNumPoints(); + for (int j=0; j<nbpts; j++) { + vidx2geom.add(new int[]{i,j}); + } + } + idx2geom_=vidx2geom.toArray(new int[0][0]); + } + + private void buildEnvs() { + env_ = geometries_.getEnvelopeInternal(); + final Geometry g = geometries_.convexHull(); + if (g instanceof LinearRing) { + extern_ = (LinearRing) g; + } else if (g instanceof Polygon) { + extern_ = (LinearRing) ((Polygon) g).getExteriorRing(); + } + tester_ = new SIRtreePointInRing(extern_); + } + + private double getDistanceFromFrontier(final double _xref, final double _yref) { + tmp_.x = _xref; + tmp_.y = _yref; + return GISLib.getDistanceFromFrontier(extern_.getCoordinateSequence(), tmp_, tmpX1_, tmpX2_); + } + + public int getPtsNb() { + int nb; + + if (onlyPoints_) + nb=geometries_.getNumPoints(); + else + nb=idx2geom_.length; + + return nb; + } + + public double getPtX(final int _i) { + if (onlyPoints_) { + return ((Point)geometries_.getGeometry(_i)).getX(); + } + else { + CoordinateSequence seq= + ((GISCoordinateSequenceContainerInterface)geometries_.getGeometry(idx2geom_[_i][0])).getCoordinateSequence(); + return seq.getX(idx2geom_[_i][1]); + } +// return geometries_.getX(_i); + } + + public double getPtY(final int _i) { + if (onlyPoints_) { + return ((Point)geometries_.getGeometry(_i)).getY(); + } + else { + CoordinateSequence seq= + ((GISCoordinateSequenceContainerInterface)geometries_.getGeometry(idx2geom_[_i][0])).getCoordinateSequence(); + return seq.getY(idx2geom_[_i][1]); + } +// return geometries_.getY(_i); + } + + public boolean isInBuffer(final double _xToTest, final double _yToTest, final double _maxDist) { + if (env_ == null) { + buildEnvs(); + } + // le point n'appartient pas a l'enveloppe du maillage + if (!env_.contains(_xToTest, _yToTest)) { + if (GISLib.getDistance(_xToTest, _yToTest, env_) > _maxDist) { + return false; + } + + return getDistanceFromFrontier(_xToTest, _yToTest) <= _maxDist; + + } + tmp_.x = _xToTest; + tmp_.y = _yToTest; + // le point est contenu dans la forme: ok + if (tester_.isInside(tmp_)) { + return true; + } + // test distance + return getDistanceFromFrontier(_xToTest, _yToTest) <= _maxDist; + } + +} Property changes on: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/InterpolationTargetGISAdapter.java ___________________________________________________________________ Added: svn:mergeinfo + Deleted: branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/InterpolationTargetPtAdapter.java =================================================================== --- branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/InterpolationTargetPtAdapter.java 2008-08-14 07:32:00 UTC (rev 3798) +++ branches/Br_FudaaModeleur_TF/fudaa_devel/ctulu/src/org/fudaa/ctulu/interpolation/InterpolationTargetPtAdapter.java 2008-08-14 09:54:18 UTC (rev 3799) @@ -1,93 +0,0 @@ -/* - * @creation 5 sept. 2005 - * @modification $Date: 2007-06-05 08:57:43 $ - * @license GNU General Public License 2 - * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne - * @mail de...@fu... - */ -package org.fudaa.ctulu.interpolation; - -import com.vividsolutions.jts.algorithm.SIRtreePointInRing; -import com.vividsolutions.jts.geom.Coordinate; -import com.vividsolutions.jts.geom.Envelope; -import com.vividsolutions.jts.geom.Geometry; -import com.vividsolutions.jts.geom.LinearRing; -import com.vividsolutions.jts.geom.Polygon; - -import org.fudaa.ctulu.gis.GISLib; -import org.fudaa.ctulu.gis.GISZoneCollectionPoint; - -public class InterpolationTargetPtAdapter implements InterpolationTarget { - - Envelope env_; - LinearRing extern_; - final GISZoneCollectionPoint pts_; - SIRtreePointInRing tester_; - - final Coordinate tmp_ = new Coordinate(); - - final Coordinate tmpX1_ = new Coordinate(); - - final Coordinate tmpX2_ = new Coordinate(); - - /** - * @param _pts - */ - public InterpolationTargetPtAdapter(final GISZoneCollectionPoint _pts) { - super(); - pts_ = _pts; - } - - private void buildEnvs() { - env_ = pts_.getEnvelopeInternal(); - final Geometry g = pts_.convexHull(); - if (g instanceof LinearRing) { - extern_ = (LinearRing) g; - } else if (g instanceof Polygon) { - extern_ = (LinearRing) ((Polygon) g).getExteriorRing(); - } - tester_ = new SIRtreePointInRing(extern_); - } - - public double getDistanceFromFrontier(final double _xref, final double _yref) { - tmp_.x = _xref; - tmp_.y = _yref; - return GISLib.getDistanceFromFrontier(extern_.getCoordinateSequence(), tmp_, tmpX1_, tmpX2_); - } - - public int getPtsNb() { - return pts_.getNumPoints(); - } - - public double getPtX(final int _i) { - return pts_.getX(_i); - } - - public double getPtY(final int _i) { - return pts_.getY(_i); - } - - public boolean isInBuffer(final double _xToTest, final double _yToTest, final double _maxDist) { - if (env_ == null) { - buildEnvs(); - } - // le point n'appartient pas a l'enveloppe du maillage - if (!env_.contains(_xToTest, _yToTest)) { - if (GISLib.getDistance(_xToTest, _yToTest, env_) > _maxDist) { - return false; - } - - return getDistanceFromFrontier(_xToTest, _yToTest) <= _maxDist; - - } - tmp_.x = _xToTest; - tmp_.y = _yToTest; - // le point est contenu dans la forme: ok - if (tester_.isInside(tmp_)) { - return true; - } - // test distance - return getDistanceFromFrontier(_xToTest, _yToTest) <= _maxDist; - } - -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |