gm_envelope.java
来自「用于GIS(全球地理系统)的分析和处理的代码。」· Java 代码 · 共 406 行 · 第 1/2 页
JAVA
406 行
double Xmax = upperCorner.getX();
double Ymin = lowerCorner.getY();
double Ymax = upperCorner.getY();
if (x<Xmin) return false;
if (x>Xmax) return false;
if (y<Ymin) return false;
if (y>Ymax) return false;
return true;
}
/** Indique si self contient le point de coordonnees x,y,z passees en parametre (3D). */
public boolean contains (double x, double y, double z) {
double Xmin = lowerCorner.getX();
double Xmax = upperCorner.getX();
double Ymin = lowerCorner.getY();
double Ymax = upperCorner.getY();
double Zmin = lowerCorner.getZ();
double Zmax = upperCorner.getZ();
if (x<Xmin) return false;
if (x>Xmax) return false;
if (y<Ymin) return false;
if (y>Ymax) return false;
if (z<Zmin) return false;
if (z>Zmax) return false;
return true;
}
/** Indique si self contient entierement l'enveloppe passee en parametre. */
public boolean contains (GM_Envelope env) {
if (!this.contains(env.getLowerCorner())) return false;
if (!this.contains(env.getUpperCorner())) return false;
return true;
}
/** Indique si self et l'enveloppe passee en parametre se recouvrent, en 2D. */
public boolean overlaps (GM_Envelope env) {
if (this.getUpperCorner().getX() < env.getLowerCorner().getX()) return false;
if (this.getLowerCorner().getX() > env.getUpperCorner().getX()) return false;
if (this.getUpperCorner().getY() < env.getLowerCorner().getY()) return false;
if (this.getLowerCorner().getY() > env.getUpperCorner().getY()) return false;
return true;
}
////////////////////////////////////////////////////////////////////////////////////////////////
// Methodes expand /////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////
/** Agrandit l'enveloppe pour contenir le point en entree. Si le point est deja dans l'enveloppe, ne fait rien. */
public void expand (DirectPosition thePoint) {
if (!this.contains(thePoint)) {
int n = this.getDimension();
for (int i=0; i<n; i++) {
double theCoord = thePoint.getCoordinate(i);
double theMin = lowerCorner.getCoordinate(i);
double theMax = upperCorner.getCoordinate(i);
if (theCoord > theMax) upperCorner.setCoordinate(i,theCoord);
else if (theCoord < theMin) lowerCorner.setCoordinate(i,theCoord);
}
}
}
/** Agrandit l'enveloppe pour contenir le point en entree. Si le point est deja dans l'enveloppe, ne fait rien. */
public void expand (double x, double y) {
if (!this.contains(x,y)) {
double Xmin = lowerCorner.getX();
double Xmax = upperCorner.getX();
double Ymin = lowerCorner.getY();
double Ymax = upperCorner.getY();
if (y > Ymax) upperCorner.setY(y);
else if (y < Ymin) lowerCorner.setY(y);
if (x > Xmax) upperCorner.setX(x);
else if (x < Xmin) lowerCorner.setX(x);
}
}
/** Agrandit l'enveloppe pour contenir le point en entree. Si le point est deja dans l'enveloppe, ne fait rien. */
public void expand (double x, double y, double z) {
if (!this.contains(x,y,z)) {
double Xmin = lowerCorner.getX();
double Xmax = upperCorner.getX();
double Ymin = lowerCorner.getY();
double Ymax = upperCorner.getY();
double Zmin = lowerCorner.getZ();
double Zmax = upperCorner.getZ();
if (z > Zmax) upperCorner.setZ(z);
else if (z < Zmin) lowerCorner.setZ(z);
if (y > Ymax) upperCorner.setY(y);
else if (y < Ymin) lowerCorner.setY(y);
if (x > Xmax) upperCorner.setX(x);
else if (x < Xmin) lowerCorner.setX(x);
}
}
/** Agrandit l'enveloppe pour contenir l'enveloppe en entree. Si elle est deja contenue, ne fait rien. */
public void expand (GM_Envelope env) {
if (!this.contains(env)) {
this.expand(env.getUpperCorner());
this.expand(env.getLowerCorner());
}
}
/** Effectue une homothetie de facteur h sur l'enveloppe. */
public void expandBy (double h) {
DirectPosition theCenter = this.center();
int n = this.getDimension();
for (int i=0; i<n; i++) {
double center = theCenter.getCoordinate(i);
double delta = upperCorner.getCoordinate(i)-center;
upperCorner.setCoordinate(i,center + h*delta);
lowerCorner.setCoordinate(i,center - h*delta);
}
}
/** Effectue une homothetie de w sur l'axe des X et de l sur l'axe des Y. */
public void expandBy (double w, double l) {
DirectPosition theCenter = this.center();
double centerX = theCenter.getX();
double deltaX = this.maxX() - centerX;
upperCorner.setX(centerX + w*deltaX);
lowerCorner.setX(centerX - w*deltaX);
double centerY = theCenter.getY();
double deltaY = this.maxY() - centerY;
upperCorner.setY(centerY + l*deltaY);
lowerCorner.setY(centerY - l*deltaY);
}
/** Effectue une homothetie de w sur l'axe des X, de l sur l'axe des Y, et de h sur l'axe des Z. */
public void expandBy (double w, double l, double h) {
DirectPosition theCenter = this.center();
double centerX = theCenter.getX();
double deltaX = this.maxX() - centerX;
upperCorner.setX(centerX + w*deltaX);
lowerCorner.setX(centerX - w*deltaX);
double centerY = theCenter.getY();
double deltaY = this.maxY() - centerY;
upperCorner.setY(centerY + l*deltaY);
lowerCorner.setY(centerY - l*deltaY);
double centerZ = theCenter.getZ();
double deltaZ = this.maxZ() - centerZ;
upperCorner.setZ(centerZ + h*deltaZ);
lowerCorner.setZ(centerZ - h*deltaZ);
}
////////////////////////////////////////////////////////////////////////////////////////////////
// Divers //////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////
/** Renvoie True si l'enveloppe est vide, c'est-a-dire : les coordonnees du lowerCorner
sont plus grandes que celles du upperCorner. */
public boolean isEmpty() {
int n = this.getDimension();
for (int i=0; i<n; i++) {
double theMin = lowerCorner.getCoordinate(i);
double theMax = upperCorner.getCoordinate(i);
if (theMin > theMax) return true;
}
return false;
}
/** Clone l'enveloppe. */
public Object clone() {
DirectPosition up = (DirectPosition)upperCorner.clone();
DirectPosition low = (DirectPosition)lowerCorner.clone();
return new GM_Envelope(up,low);
}
/** Affiche les coordonnees */
public String toString() {
return samplePoint().toString();
}
/** Renvoie la liste des DirectPosition de l'objet. */
public DirectPositionList samplePoint() {
DirectPositionList dpl = new DirectPositionList();
DirectPosition dp;
dpl.add(lowerCorner);
if (!Double.isNaN(lowerCorner.getZ()))
dp = new DirectPosition(upperCorner.getX(), lowerCorner.getY(), lowerCorner.getZ() ); // a revoir
else
dp = new DirectPosition(upperCorner.getX(), lowerCorner.getY());
dpl.add(dp);
dpl.add(upperCorner);
if (!Double.isNaN(upperCorner.getZ()))
dp = new DirectPosition(lowerCorner.getX(), upperCorner.getY(), upperCorner.getZ() ); // a revoir
else
dp = new DirectPosition(lowerCorner.getX(), upperCorner.getY());
dpl.add(dp);
return dpl;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?