什么是得到像下面这样工作的最佳方式:

def getNearest(zipCode, miles):

即,给定一个邮政编码(07024)和半径,返回其是半径内的所有邮编?

有帮助吗?

解决方案

有是在SourceForge上的一个项目,可以帮助这样的:

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

它给你与邮政编码和他们的纬度/经度的数据库,以及如何计算两个坐标之间的距离的编码的例子。有可能是一个更好的方式来做到这一点,但你可以有你的函数检索邮政编码和它的坐标,然后通过列表中的每个邮编步骤和邮政编码添加到列表中,如果它落在指定的里程数内。

其他提示

如果您希望这是正确的,你必须使用包括每个邮政编码的位置和形状的多边形数据开始。我有一个这样的数据库(用于美国人口普查公布,但他们不再这样做),并建立了类似的事情之上,但不是确切的请求。

如果你不关心是的确切的(我猜你不这样做),你可以得到通过的大圆距离。 PostGIS的这样做提供了很好的工具,虽然你可能对构建将执行类似任务的其他数据库的查询。

我已经使用的另一种方法是构造一个盒,它包括所需的圆形,上LON / LAT,然后做在应用代码大圆子句之间与查询。

这也许可以提供帮助。该项目是在配置公里不过。可以在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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top