@Nullable
        protected Double createCoordinate(@NonNull final String signGroup, @NonNull final String degreesGroup, @NonNull final String minutesGroup, @NonNull final String secondsGroup) {
            try {
                final double seconds = Double.parseDouble(StringUtils.defaultIfEmpty(secondsGroup, "0"));
                if (seconds >= 60.0) {
                    return null;
                }

                final double minutes = Double.parseDouble(StringUtils.defaultIfEmpty(minutesGroup, "0"));
                if (minutes >= 60.0) {
                    return null;
                }

                final double degrees = Double.parseDouble(StringUtils.defaultIfEmpty(degreesGroup, "0"));
                final double sign = signGroup.equalsIgnoreCase("S") || signGroup.equalsIgnoreCase("W") ? -1.0 : 1.0;
                return sign * (degrees + minutes / 60.0 + seconds / 3600.0);
            } catch (final NumberFormatException ignored) {
                // We might have encountered too large a number
            }

            return null;
        }
Creates latitude or longitude out of matches groups for sign, degrees, minutes and seconds.

@param signGroup    a string representing the sign of the coordinate, ignored if empty
@param degreesGroup a string representing the degrees of the coordinate, ignored if empty
@param minutesGroup a string representing the minutes of the coordinate, ignored if empty
@param secondsGroup a string representing the seconds of the coordinate, ignored if empty
@return the latitude/longitude in decimal degrees, or null if creation failed
main/src/main/java/cgeo/geocaching/location/GeopointParser.java