有没有Java API可以从邮政编码获取纬度和经度?

4
我正在开发一个小程序,需要输入位置信息。但是由于我使用的特定API,输入必须是纬度和经度。问题在于,用户找出自己的纬度和经度并键入会很不方便,但每个人都知道自己的邮政编码。是否有Java API可以根据邮政编码返回纬度和经度(可以是邮政编码内的任意随机点,精度并不重要,只要该点位于邮政编码区域内)。另一种方法是根据用户的IP地址获取位置信息。我还考虑过另一种方式,即查找该邮政编码中的业余无线电台,并获取其纬度和经度。我的朋友曾向我介绍过一个网站(点击此处),他认为这样做是可行的。

2
哪个国家的邮政编码?您可以随时使用例如谷歌的服务来实现此目的,但需要记住的一件事是邮政编码并不唯一,远非如此。 - Esko
2
这将是太多的数据存储在客户端,基本上是为所有邮政编码存储经度和纬度信息。你要找的是地理编码 http://code.google.com/apis/maps/documentation/geocoding/。你可以发送一个带有邮政编码的ajax请求,并获得经度和纬度。 - aziz punjani
1
Google搜索“Java GIS”..你应该能找到很多链接。 - CoolBeans
如果我使用IP地址来获取用户的位置,是否有一种方法/ API可以实现? - Chan....
IP地址?呵呵,没有可靠的方法。 - Ingo
1
我找到了一个做同样事情的不同程序,但问题是是否可以在Java中完成。它位于http://www.levinecentral.com/ham/grid_square.php。 - Chan....
3个回答

4

我用了你回答中的数据库来写我的回答,谢谢。我不知道可以有一个简单的csv文件包含所有这些数据而不占用几个GB的空间。这是否确实是所有(至少在美国)? - Ephraim
1
@Ephraim - 邮政编码不断地添加到系统中。那个sourceforge项目更新频率如何?我们在几年前的内部项目中使用过它。当时它是最新的。如果SF项目被放弃了,那么你可能有一个过时的文件。 - ring bearer

3
这是在常规应用程序中进行操作的方式,小程序也应该一样。
public static void main(String[] args) {
  /** let's use the following zip code simply for the purpose of this 
      example (its the zip code for hollywood callifornia) */
  String zipCode = 91601
  String latitude = "0";
  String longitude = "0";
try {
                    /**
                      JavaCVS api is required in order to read this, it can
                      be found at http://sourceforge.net/projects/javacsv/
                     **/
        CsvReader products = new CsvReader("zips.csv");
                    /** a cvs containing all the zip codes and latitudes
                        and longitudes can be found at: 
                        http://sourceforge.net/projects/zips/files/zips/zips.csv.zip/
                    **/
        products.readHeaders();
        int numOfHeaders = products.getHeaderCount();
        System.out.println("Number of headers" + numOfHeaders);
        try {
            while (products.readRecord())
            {

            String lookedupZip = products.get(products.getHeader(0));
            if (lookedupZip.equals(zipCode)) {
                latitude = products.get(products.getHeader(2));
                longitude = products.get(products.getHeader(3));
            }

            }
        } catch (IOException e1) {
            e1.printStackTrace();
        }

    } catch (FileNotFoundException e1) {
        e1.printStackTrace();
    } catch (IOException e2) {
        e2.printStackTrace();
    }
}

感谢@Ring Bearer提供的CSV文件链接。


1

据我所知,Google在他们的地理编码响应中不提供邮政编码。 因为我目前正在处理类似的事情,所以我不得不决定一些相似的东西并找到了一个解决方法:区域。 地理编码响应包含国家,州和区域的名称,因此您的用户可以缩小范围。 链式选择是很好的添加。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接