题
什么是得到像下面这样工作的最佳方式:
def getNearest(zipCode, miles):
即,给定一个邮政编码(07024)和半径,返回其是半径内的所有邮编?
解决方案
有是在SourceForge上的一个项目,可以帮助这样的:
http://sourceforge.net/projects/zips/
它给你与邮政编码和他们的纬度/经度的数据库,以及如何计算两个坐标之间的距离的编码的例子。有可能是一个更好的方式来做到这一点,但你可以有你的函数检索邮政编码和它的坐标,然后通过列表中的每个邮编步骤和邮政编码添加到列表中,如果它落在指定的里程数内。
其他提示
这也许可以提供帮助。该项目是在配置公里不过。可以在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” 文件包含来自比利时的所有城市。您可以删除,或者如果你想太多创建条目。只要不改变的名称和/或结构,无代码的变化是必需的。
不隶属于 StackOverflow