当前位置:  开发笔记 > 编程语言 > 正文

如何找到给定半径内的最近城市?

如何解决《如何找到给定半径内的最近城市?》经验,为你挑选了1个好方法。

你知道一些实用工具或网站,我可以用英里作为输入给美国城市,州和径向距离,它会让我回到那个半径范围内的所有城市吗?

谢谢!



1> Sheldon Ross..:

我就是这样做的.

您可以获取城市,圣,邮政编码及其纬度和经度的列表.(我不记得我们得到的是我的头顶)

编辑:http://geonames.usgs.gov/domestic/download_data.htm 就像上面提到的人可能会工作.

然后,您可以编写一种方法,根据半径计算最小和最大纬度和经度,并查询最小和最大之间的所有城市.然后循环并计算距离并移除任何不在半径内的距离

double latitude1 = Double.parseDouble(zipCodes.getLatitude().toString());
double longitude1 = Double.parseDouble(zipCodes.getLongitude().toString());

//Upper reaches of possible boundaries
double upperLatBound = latitude1 + Double.parseDouble(distance)/40.0;
double lowerLatBound = latitude1 - Double.parseDouble(distance)/40.0;

double upperLongBound = longitude1 + Double.parseDouble(distance)/40.0;
double lowerLongBound = longitude1 - Double.parseDouble(distance)/40.0;

//pull back possible matches
SimpleCriteria zipCriteria = new SimpleCriteria();
zipCriteria.isBetween(ZipCodesPeer.LONGITUDE, lowerLongBound, upperLongBound);
zipCriteria.isBetween(ZipCodesPeer.LATITUDE, lowerLatBound, upperLatBound);
List zipList = ZipCodesPeer.doSelect(zipCriteria);
ArrayList acceptList = new ArrayList();

if(zipList != null)
{
    for(int i = 0; i < zipList.size(); i++)
    {
        ZipCodes tempZip = (ZipCodes)zipList.get(i);
        double tempLat = new Double(tempZip.getLatitude().toString()).doubleValue();
        double tempLon = new Double(tempZip.getLongitude().toString()).doubleValue();
        double d = 3963.0 * Math.acos(Math.sin(latitude1 * Math.PI/180) * Math.sin(tempLat * Math.PI/180) + Math.cos(latitude1 * Math.PI/180) * Math.cos(tempLat * Math.PI/180) *  Math.cos(tempLon*Math.PI/180 -longitude1 * Math.PI/180));

        if(d < Double.parseDouble(distance))
        {
            acceptList.add(((ZipCodes)zipList.get(i)).getZipCd());  
        }
    }
}

我的代码有一段摘录,希望你能看到正在发生的事情.我从一个ZipCodes(我的数据库中的一个表)开始,然后我撤回可能的匹配,最后我清除那些不在半径范围内的人.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有