|
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.
|