Писал лет десять назад, достал из чулана...
Вариант для квадрата:
double lat1 = 55.77;
double lon1 = 37.77;
double lat2 = 55.66;
double lon2 = 37.66;
double d = 0.300; // - проверяемое расстояние в километрах
double dx1km = 1.0f / (108.307 * Math.Cos(lon1 * 3.14159 / 180.0));// 108.307 - км между 1 градусом по долготе на широте Москвы
double dy1km = 1.0 / 111; // 111 км - расстояние между 1 градусом по широте
double dx = d * dx1km/2;
double dy = d * dy1km;
if (lat2 >= lat1 - dx && lat2 <= lat1 + dx && lon2 >= lon1 - dy && lon2 <= lon1 + dy) {
//we are together!
}
Для окружности Измеряем расстояние между двумя точками и сверяем его с заданным радиусом. Если это расстояние меньше радиуса, то точки находятся рядом.
Здесь предполагается, что расстояние небольшое и вычисления происходят вдали от полюсов, т.к. там придётся учитывать искажения, т.к. квадрат превратится в параллелограмм, а окружность - в эллипс, вписанный в такой параллелограмм.