Я использую nettopologysuite (порт JTS Набор топологий). Я использую реализацию SRTtree для хранения списка часовых поясов и соответствующих координат (на основе этого предложение). Я взял список городов из геоназваний, вытащил часовой пояс города и координаты и храню их в STRtree. проблема, с которой я сталкиваюсь, заключается в том, что эта реализация не предоставляет функцию «Ближайший». Чтобы сделать запрос, я должен указать начальную точку и окружность. В настоящее время я увеличиваю окружность на 0,1 в цикле, пока не найду какие-то результаты, а затем возьму первый. Есть ли лучший способ сделать это?
Вот что я делаю:
public static SRTtree Cities { get; set; }
public static string GetTimezone(double lat, double lng)
{
var envelope = new Envelope(new Coordinate(lat, lng));
IList results;
do
{
envelope.ExpandBy(.1);
results = Cities.Query(envelope);
} while (results.Count == 0);
return results[0] as string;
}