nettopologysuite ( JTS Topology Suiteのポート)を使用しています。SRTtree 実装を使用して、タイムゾーンのリストと対応する座標を格納しています (この提案に基づいています)。geonames から都市のリストを取得し、都市のタイムゾーンと座標を取り出して、それらを STRtree に保存しています。私が抱えている問題は、この実装が「最も近い」関数を提供しないことです。クエリを実行するには、開始点と円周を指定する必要があります。現在、いくつかの結果が見つかるまでループ内で円周を .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;
}