/**
   * look through the list of coordinate, and see if any are contained within the currently visible
   * area
   */
  private boolean isVisible(
      final LatLonPoint tl, final LatLonPoint br, final CoordFloatString coords) {
    boolean res = false;
    final MWC.GenericData.WorldLocation _tl =
        new MWC.GenericData.WorldLocation(tl.getLatitude(), tl.getLongitude(), 0);
    final MWC.GenericData.WorldLocation _br =
        new MWC.GenericData.WorldLocation(br.getLatitude(), br.getLongitude(), 0);
    final MWC.GenericData.WorldArea area = new MWC.GenericData.WorldArea(_tl, _br);
    area.normalise();

    for (int i = 0; i < coords.maxIndex(); i++) {
      final float x = coords.getXasFloat(i);
      final float y = coords.getYasFloat(i);

      _workingLocation.setLat(y);
      _workingLocation.setLong(x);

      if (area.contains(_workingLocation)) {
        res = true;
        continue;
      }
    }

    return res;
  }
  private boolean overlaps(
      final LatLonPoint tl, final LatLonPoint br, final CoordFloatString coords) {
    boolean res = false;
    float maxLat = 0, minLat = 0, maxLong = 0, minLong = 0;
    boolean first = true;

    // create our area of interest
    _workingArea.getTopLeft().setLat(tl.getLatitude());
    _workingArea.getTopLeft().setLong(tl.getLongitude());
    _workingArea.getBottomRight().setLat(br.getLatitude());
    _workingArea.getBottomRight().setLong(br.getLongitude());

    // build up the area of the coords
    final int len = Math.abs(coords.maxIndex());

    for (int i = 0; i < len; i++) {
      // retrieve the x and y values
      final float x = coords.getXasFloat(i);
      final float y = coords.getYasFloat(i);

      // initialise our values if this is the first pass
      if (first) {
        first = false;
        maxLat = minLat = y;
        maxLong = minLong = x;
      } else {
        // else update our extreme values
        minLat = Math.min(minLat, y);
        maxLat = Math.max(maxLat, y);

        minLong = Math.min(minLong, x);
        maxLong = Math.max(maxLong, x);
      }
    }

    // put our limits into the area of this line
    _otherWorkingArea.getTopLeft().setLat(maxLat);
    _otherWorkingArea.getTopLeft().setLong(minLong);
    _otherWorkingArea.getBottomRight().setLat(minLat);
    _otherWorkingArea.getBottomRight().setLong(maxLong);

    // so, we've now got our two areas, see if they overlap
    res = _workingArea.overlaps(_otherWorkingArea);

    // well done!
    return res;
  }