Как передать геоданные (координаты) в HTTP GET-запросе?

«Как передать геоданные (координаты) в HTTP GET-запросе?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, геоданные можно передать в GET-запросе через query-параметры URL. Это стандартный подход для простых пространственных запросов.

Распространенные форматы передачи:

  • Отдельные параметры: Наиболее читаемый вариант.
    GET /api/places?latitude=55.7558&longitude=37.6176&radius=1000
  • Параметр bbox: Для запроса области (границы).
    GET /api/features?bbox=minLon,minLat,maxLon,maxLat

Пример формирования запроса на Java с кодированием:

String baseUrl = "https://api.example.com/poi";
String latitude = "55.7558";
String longitude = "37.6176";

// Важно: кодировать значения параметров
String urlWithParams = baseUrl +
        "?lat=" + URLEncoder.encode(latitude, StandardCharsets.UTF_8) +
        "&lon=" + URLEncoder.encode(longitude, StandardCharsets.UTF_8);

HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create(urlWithParams))
        .GET()
        .build();

Ограничения и рекомендации:

  • Длина URL: Ограничена (~2048 символов в большинстве браузеров). Для сложных геообъектов (полигонов) используйте POST с телом запроса (например, в формате GeoJSON).
  • Кэширование: GET-запросы кэшируются, что может быть полезно для часто запрашиваемых локаций.
  • Безопасность: Координаты видны в истории браузера и логах сервера.