2008-11-29 76 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

相关问题