首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 地理位置:計算經緯度距離與海量坐標篩選優化

     編輯:程式設計綜合問答

1. 計算兩點距離

使用 android.location.Location 靜態方法:

float[] results = new float[1];
Location.distanceBetween(lat1, lng1, lat2, lng2, results);
float distanceInMeters = results[0];

底層採用 Haversine 公式,精度滿足大多數應用。

2. 海量坐標篩選優化策略

方案 A:數據庫空間索引(推薦)

  • MongoDB:內建 2dsphere 索引,geoNear 命令毫秒級返回最近 N 個點。
  • PostgreSQL + PostGIS:專業地理空間擴展,支持複雜幾何查詢。
  • SQLite + SpatiaLite:移動端輕量級選擇。

方案 B:客戶端簡易過濾(小數據量)

若 N < 10000 且頻率低,可在內存中遍歷計算距離,配合經度緯度邊界框預過濾(Math.abs(lat - targetLat) < delta)減少計算次數。

方案 C:幾何網格/Geohash 分桶

將坐標編碼為 Geohash 字符串,按前綴分桶存儲。查詢時只需檢查目標 Geohash 及其相鄰桶,大幅縮小掃描範圍。Redis、Elasticsearch 均支持 Geohash 索引。

參考資源

經緯度距離計算公式詳解:movable-type.co.uk/scripts/latlong.html

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved