这个怎么样。我会在数据库中存储 3 列,即 (Latitude, Longitude, TextLocation),但它是对 (Latitude, Longitude) 被视为表的键。当地理编码器被要求输入与给定(纬度、经度)相对应的文本时,TextLocation 只是反向地理编码器的最后一个已知结果。
当一个新位置(New_Latitude,New_Longitude)到达时,我会搜索数据库以查找数据库中所有最近的行。要计算 (New_Latitude, New_Longitude) 到 (Latitude, Longitude) 的距离,我将使用以下代码
float LatDiff = New_Latitude - Latitude;
float LongDiff = New_Longitude - Longitude;
float CosNewLat = Math.cos(New_Latitude);
float ConversionFac = 6371000 * Math.PI / 180; // 6371000 is earth radius in metres
float Dist_metres = ConversionFac * Math.sqrt(LatDiff*LatDiff + LongDiff*LongDiff*CosNewLat*CosNewLat);
然后对于每个最接近(New_Latitude,New_Longitude)的点,我将使用反向地理编码更新数据库中的 TextLocation。如果新位置与任何现有位置的当前反向地理编码不匹配,我会将其添加到数据库中。
我的部分想法是,即使存储包含一列文本的 3 列,与现代存储容量相比,数据库仍然很小。