2008-11-29 124 views

回答

7

有在SourceForge上的一個項目,可以幫助此:

http://sourceforge.net/projects/zips/

它爲您提供了郵政編碼和它們的緯度/經度數據庫,以及如何計算距離編碼示例在兩組座標之間。可能有更好的辦法,但你可以讓你的功能檢索郵政編碼及其座標,然後遍歷列表中的每個郵政編碼,並將郵政編碼添加到列表中,如果郵政編碼落在指定的英里數內。

3

如果你想這是準確的,你必須從多邊形數據開始,包括每個郵政編碼的位置和形狀。我有一個這樣的數據庫(過去由美國人口普查公佈,但他們不再這樣做),並在其上面建立了類似的東西,但沒有確切的要求。

如果你不關心是確切(我猜你沒有),你可以得到由great circle距離排序拉鍊碼和查詢點的中心點表。 PostGIS爲此提供了很好的工具,但您可以針對其他將執行類似任務的數據庫構建查詢。

我使用的另一種方法是構建一個包含所需圓的框,使用lon/lat中的between子句進行查詢,然後在應用代碼中進行大圓圈查詢。

0

也許這可以提供幫助。該項目以千米爲單位進行配置。您可以在CityDAO.java

修改這些
public List<City> findCityInRange(GeoPoint geoPoint, double distance) { 
    List<City> cities = new ArrayList<City>(); 
    QueryBuilder queryBuilder = geoDistanceQuery("geoPoint") 
      .point(geoPoint.getLat(), geoPoint.getLon()) 
      //.distance(distance, DistanceUnit.KILOMETERS) original 
      .distance(distance, DistanceUnit.MILES) 
      .optimizeBbox("memory") 
      .geoDistance(GeoDistance.ARC); 

    SearchRequestBuilder builder = esClient.getClient() 
      .prepareSearch(INDEX) 
      .setTypes("city") 
      .setSearchType(SearchType.QUERY_THEN_FETCH) 
      .setScroll(new TimeValue(60000)) 
      .setSize(100).setExplain(true) 
      .setPostFilter(queryBuilder) 
      .addSort(SortBuilders.geoDistanceSort("geoPoint") 
        .order(SortOrder.ASC) 
        .point(geoPoint.getLat(), geoPoint.getLon()) 
        //.unit(DistanceUnit.KILOMETERS)); Original 
        .unit(DistanceUnit.MILES)); 

    SearchResponse response = builder 
      .execute() 
      .actionGet(); 


    SearchHit[] hits = response.getHits().getHits(); 

    scroll: 
    while (true) { 

     for (SearchHit hit : hits) { 
      Map<String, Object> result = hit.getSource(); 
      cities.add(mapper.convertValue(result, City.class)); 
     } 

     response = esClient.getClient().prepareSearchScroll(response.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet(); 
     if (response.getHits().getHits().length == 0) { 
      break scroll; 
     } 
    } 

    return cities; 
} 

的 「LocationFinder的\ src \主\資源\ JSON \ cities.json」 文件包含來自比利時的所有城市。如果您想要,也可以刪除或創建條目。只要您不更改名稱和/或結構,就不需要更改代碼。

請務必閱讀自述文件https://github.com/GlennVanSchil/LocationFinder

相關問題