/** * This method is used to determine the x/y range which completely covers the * area of interest specified by the lat/lon range. The latitude/longitude * range may be obtained from the labels. The purpose of this method is to * return the x/y range so it can be used to compute how large a map may need * to be. For example, how big a piece of paper is needed or how large of an * image needs to be created. The method may fail as indicated by its return * value. * * @param minX Minimum x projection coordinate which covers the latitude * longitude range specified in the labels. * * @param maxX Maximum x projection coordinate which covers the latitude * longitude range specified in the labels. * * @param minY Minimum y projection coordinate which covers the latitude * longitude range specified in the labels. * * @param maxY Maximum y projection coordinate which covers the latitude * longitude range specified in the labels. * * @return bool */ bool TransverseMercator::XYRange(double &minX, double &maxX, double &minY, double&maxY){ // Check the corners of the lat/lon range XYRangeCheck (p_minimumLatitude,p_minimumLongitude); XYRangeCheck (p_maximumLatitude,p_minimumLongitude); XYRangeCheck (p_minimumLatitude,p_maximumLongitude); XYRangeCheck (p_maximumLatitude,p_maximumLongitude); // convert center latitude to degrees & test double clat = p_centerLatitude * 180.0 / Isis::PI; if (clat > p_minimumLatitude && clat < p_maximumLatitude) { XYRangeCheck (clat, p_minimumLongitude); XYRangeCheck (clat, p_maximumLongitude); } // convert center longitude to degrees & test double clon = p_centerLongitude * 180.0 / Isis::PI; if (clon > p_minimumLongitude && clon < p_maximumLongitude) { XYRangeCheck (p_minimumLatitude, clon); XYRangeCheck (p_maximumLatitude, clon); } // Make sure everything is ordered if (p_minimumX >= p_maximumX) return false; if (p_minimumY >= p_maximumY) return false; // Return X/Y min/maxs minX = p_minimumX; maxX = p_maximumX; minY = p_minimumY; maxY = p_maximumY; return true; }
/** * This method is used to determine the x/y range which completely covers the * area of interest specified by the lat/lon range. The latitude/longitude * range may be obtained from the labels. The purpose of this method is to * return the x/y range so it can be used to compute how large a map may need * to be. For example, how big a piece of paper is needed or how large of an * image needs to be created. The method may fail as indicated by its return * value. * * @param minX Minimum x projection coordinate which covers the latitude * longitude range specified in the labels. * * @param maxX Maximum x projection coordinate which covers the latitude * longitude range specified in the labels. * * @param minY Minimum y projection coordinate which covers the latitude * longitude range specified in the labels. * * @param maxY Maximum y projection coordinate which covers the latitude * longitude range specified in the labels. * * @return bool */ bool PointPerspective::XYRange(double &minX, double &maxX, double &minY, double &maxY) { double lat, lon; // Check the corners of the lat/lon range XYRangeCheck(m_minimumLatitude, m_minimumLongitude); XYRangeCheck(m_maximumLatitude, m_minimumLongitude); XYRangeCheck(m_minimumLatitude, m_maximumLongitude); XYRangeCheck(m_maximumLatitude, m_maximumLongitude); // Walk top and bottom edges for (lat = m_minimumLatitude; lat <= m_maximumLatitude; lat += 0.01) { lat = lat; lon = m_minimumLongitude; XYRangeCheck(lat, lon); lat = lat; lon = m_maximumLongitude; XYRangeCheck(lat, lon); } // Walk left and right edges for (lon = m_minimumLongitude; lon <= m_maximumLongitude; lon += 0.01) { lat = m_minimumLatitude; lon = lon; XYRangeCheck(lat, lon); lat = m_maximumLatitude; lon = lon; XYRangeCheck(lat, lon); } // Walk the limb for (double angle = 0.0; angle <= 360.0; angle += 0.01) { double x = m_equatorialRadius * cos(angle * PI / 180.0); double y = m_equatorialRadius * sin(angle * PI / 180.0); if (SetCoordinate(x, y) == 0) { if (m_latitude > m_maximumLatitude) continue; if (m_longitude > m_maximumLongitude) continue; if (m_latitude < m_minimumLatitude) continue; if (m_longitude < m_minimumLongitude) continue; XYRangeCheck(m_latitude, m_longitude); } } // Make sure everything is ordered if (m_minimumX >= m_maximumX) return false; if (m_minimumY >= m_maximumY) return false; // Return X/Y min/maxs minX = m_minimumX; maxX = m_maximumX; minY = m_minimumY; maxY = m_maximumY; return true; }
/** * This method is used to determine the x/y range which completely covers the * area of interest specified by the lat/lon range. The latitude/longitude * range may be obtained from the labels. The purpose of this method is to * return the x/y range so it can be used to compute how large a map may need * to be. For example, how big a piece of paper is needed or how large of an * image needs to be created. The method may fail as indicated by its return * value. * * @param minX Minimum x projection coordinate which covers the latitude * longitude range specified in the labels. * * @param maxX Maximum x projection coordinate which covers the latitude * longitude range specified in the labels. * * @param minY Minimum y projection coordinate which covers the latitude * longitude range specified in the labels. * * @param maxY Maximum y projection coordinate which covers the latitude * longitude range specified in the labels. * * @return bool */ bool LunarAzimuthalEqualArea::XYRange(double &minX, double &maxX, double &minY, double &maxY) { // Check the corners of the lat/lon range XYRangeCheck(m_minimumLatitude, m_minimumLongitude); XYRangeCheck(m_maximumLatitude, m_minimumLongitude); XYRangeCheck(m_minimumLatitude, m_maximumLongitude); XYRangeCheck(m_maximumLatitude, m_maximumLongitude); // If the latitude range contains 0 if ((m_minimumLatitude < 0.0) && (m_maximumLatitude > 0.0)) { XYRangeCheck(0.0, m_minimumLongitude); XYRangeCheck(0.0, m_maximumLongitude); } // If the longitude range contains 0 if ((m_minimumLongitude < 0.0) && (m_maximumLongitude > 0.0)) { XYRangeCheck(m_minimumLatitude, 0.0); XYRangeCheck(m_maximumLatitude, 0.0); } // Make sure everything is ordered if (m_minimumX >= m_maximumX) return false; if (m_minimumY >= m_maximumY) return false; // Return X/Y min/maxs minX = m_minimumX; maxX = m_maximumX; minY = m_minimumY; maxY = m_maximumY; return true; }
/** * This method is used to determine the x/y range which completely covers the * area of interest specified by the lat/lon range. The latitude/longitude * range may be obtained from the labels. The purpose of this method is to * return the x/y range so it can be used to compute how large a map may need * to be. For example, how big a piece of paper is needed or how large of an * image needs to be created. The method may fail as indicated by its return * value. * * @param minX Minimum x projection coordinate which covers the latitude * longitude range specified in the labels. * * @param maxX Maximum x projection coordinate which covers the latitude * longitude range specified in the labels. * * @param minY Minimum y projection coordinate which covers the latitude * longitude range specified in the labels. * * @param maxY Maximum y projection coordinate which covers the latitude * longitude range specified in the labels. * * @return bool */ bool SimpleCylindrical::XYRange(double &minX, double &maxX, double &minY, double &maxY) { // Check the corners of the lat/lon range XYRangeCheck(m_minimumLatitude, m_minimumLongitude); XYRangeCheck(m_maximumLatitude, m_minimumLongitude); XYRangeCheck(m_minimumLatitude, m_maximumLongitude); XYRangeCheck(m_maximumLatitude, m_maximumLongitude); // Make sure everything is ordered if (m_minimumX >= m_maximumX) return false; if (m_minimumY >= m_maximumY) return false; // Return X/Y min/maxs minX = m_minimumX; maxX = m_maximumX; minY = m_minimumY; maxY = m_maximumY; return true; }
/** * This method is used to determine the x/y range which completely covers the * area of interest specified by the lat/lon range. The latitude/longitude * range may be obtained from the labels. The purpose of this method is to * return the x/y range so it can be used to compute how large a map may need * to be. For example, how big a piece of paper is needed or how large of an * image needs to be created. The method may fail as indicated by its return * value. * * @param minX Minimum x projection coordinate which covers the latitude * longitude range specified in the labels. * * @param maxX Maximum x projection coordinate which covers the latitude * longitude range specified in the labels. * * @param minY Minimum y projection coordinate which covers the latitude * longitude range specified in the labels. * * @param maxY Maximum y projection coordinate which covers the latitude * longitude range specified in the labels. * * @return bool */ bool Sinusoidal::XYRange(double &minX, double &maxX, double &minY, double &maxY) { // Check the corners of the lat/lon range XYRangeCheck(m_minimumLatitude, m_minimumLongitude); XYRangeCheck(m_maximumLatitude, m_minimumLongitude); XYRangeCheck(m_minimumLatitude, m_maximumLongitude); XYRangeCheck(m_maximumLatitude, m_maximumLongitude); // If the latitude crosses the equator check there if ((m_minimumLatitude < 0.0) && (m_maximumLatitude > 0.0)) { XYRangeCheck(0.0, m_minimumLongitude); XYRangeCheck(0.0, m_maximumLongitude); } // Make sure everything is ordered if (m_minimumX >= m_maximumX) return false; if (m_minimumY >= m_maximumY) return false; // Return X/Y min/maxs minX = m_minimumX; maxX = m_maximumX; minY = m_minimumY; maxY = m_maximumY; return true; }