如何将地址转换为纬度/经度?

时间:2008-09-19 00:50:07

标签: geocoding latitude-longitude street-address

我如何将地址或城市转换为纬度/经度?我可以“租用”这项服务的商业服装吗?这将用于具有全时Internet访问权限的Windows PC上的商业桌面应用程序。

18 个答案:

答案 0 :(得分:46)

Google有一个地理编码API,对于他们拥有Google地图数据的大多数地理位置似乎都能很好地运作。

http://googlemapsapi.blogspot.com/2006/06/geocoding-at-last.html

他们提供在线地理编码(通过JavaScript):

http://code.google.com/apis/maps/documentation/services.html#Geocoding

或后端地理编码(通过HTTP请求):

http://code.google.com/apis/maps/documentation/services.html#Geocoding_Direct

数据通常与Google地图本身使用的数据相同。 (请注意,有一些例外情况,例如英国或以色列,其数据来自不同的来源,质量略有下降)

答案 1 :(得分:24)

没有什么新东西要添加,但我在以前的工作中拥有很多关于GIS和地理编码的实际经验。这是我记得的:

如果您的应用程序需要“每隔一段时间”,我肯定会推荐使用Google或Yahoo Geocoding API,但请务必仔细阅读其授权条款。

我知道Google Maps API通常很容易获得商业网页的许可,但不能用于付费访问的情况。换句话说,您可以使用它来宣传或提供可以带来广告收入的服务,但您不能向人们收取访问您网站的费用,甚至不能将其置于密码系统之后。

尽管有这些限制,但它们都是很好的选择,因为它们经常更新街道数据库。大多数免费后端工具和库使用不经常更新的Census和TIGER道路数据,因此您不太可能在快速增长的区域或新的细分区域中成功地对地址进行地理编码。

大多数服务还限制了您每天可以进行的地理编码查询的数量,因此可以查找添加到数据库中的新客户的地址,但是如果您运行的批处理作业可以提供数千个从您的数据库到地址编码器的地址,您将被关闭。

我认为这个问题还没有被提及,但ESRI有ArcWeb web services包括地理编码,虽然它们不是很便宜。上次我使用它们每次查询花费大约1.5美分,但你必须预付一定金额才能开始使用。同样,主要优势在于他们使用的道路数据能够及时更新,您可以在Google不允许的商业环境中使用这些数据。 ArcWeb服务还将提供高分辨率卫星和航空照片 a la Google地图,再次根据要求定价。

如果您想自己推出或有权访问更准确的数据,您可以从TeleAtlas等公司购买GIS数据订阅,但这并不便宜。如果您的需求非常本地化,您只能购买州或县的数据。有几层数据 - 仅GIS功能,GIS加上详细的街道,所有这些加上地理编码数据,所有这些都加上了路由的交通流量/方向/速度限制。当然,随着你上层,价格会上涨。

最后,关于Geocoding的维基百科文章提供了有关算法和技术的一些很好的信息。即使您没有在自己的代码中执行此操作,了解各种数据源可能出现的错误和准确性也很有用。

答案 2 :(得分:11)

Yahoo! Maps Web Services - Geocoding API准确地对英国邮政编码进行地理编码,与谷歌的API不同。

不幸的是,雅虎已弃用此服务,您可以访问http://developer.yahoo.com/geo/placefinder/获取雅虎的服务

答案 3 :(得分:10)

答案 4 :(得分:5)

将地址或对象转换为纬度/经度时,称为地理编码。

周围有很多地理编码解决方案。适合您项目的解决方案取决于每种地理编码解决方案的许可条款的可接受性。 Microsoft Virtual Earth和Google Maps都提供可在非常严格的许可下免费使用的解决方案......

http://code.google.com/apis/maps/documentation/services.html

http://www.microsoft.com/virtualearth/product/faq.aspx

答案 5 :(得分:5)

之前已经为此推出了我自己的解决方案,我可以全心全意地推荐Geo::Coder::US Perl模块。只需下载所有人口普查数据并使用附带的导入程序为您所在的国家/地区创建Berkeley数据库,并将Perl脚本指向它。使用模块的内置地址解析,你就拥有它:一个离线地理编码系统!

答案 6 :(得分:4)

尝试使用此代码,我的工作方式如下:

这是使用GET方法发送请求并获取lat和lng的链接。 http://maps.google.com/maps/api/geocode/json?address=YOUR ADDRES&sensor=false

例如: http://maps.google.com/maps/api/geocode/json?address=W Main St, Bergenfield, NJ 07621&sensor=false

<强> 1。创建您的GET方法。

 public static String GET(String url) throws Exception {//GET Method
        String result = null;
        InputStream inputStream = null;
        try {
            HttpClient httpclient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url);

        Log.v("ExecuteGET: ", httpGet.getRequestLine().toString());

        HttpResponse httpResponse = httpclient.execute(httpGet);
        inputStream = httpResponse.getEntity().getContent();
        if (inputStream != null) {
            result = convertInputStreamToString(inputStream);
            Log.v("Result: ", "result\n" + result);
        } 
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

<强> 2。创建发送请求的方法

@SuppressWarnings("deprecation")
    public static String getLatLng(String accessToken) throws Exception{
        String query=StaticString.gLobalGoogleUrl+"json?address="+URLEncoder.encode(accessToken)+"&sensor=false";
        Log.v("GETGoogleGeocoder", query+"");
        return GET(query);
    }
  

<强> gLobalGoogleUrl =&#34; HTTP://maps.google.com/maps/api/geocode/"

第3。调用方法getLatLng

String result=getLatLng("W Main St, Bergenfield, NJ 07621");

<强> 4。解析JSONObject

现在结果 JSONObject ,其中包含有关地址和lan,lng的信息。 使用gson()解析JSONObject(结果)。 之后使用lat,lng。

如果您对代码有疑问,请询问。

答案 7 :(得分:2)

您需要地理编码应用程序。这些可以在线获得,也可以作为应用程序后端使用。

答案 8 :(得分:2)

您还可以尝试OpenStreetMap NameFinder(或当前的Nominatim),其中包含(可能)整个世界的开源,类似wiki的街道数据。

答案 9 :(得分:2)

Virtual Earth做到了。 geocoder.us

还有一个网络服务

答案 10 :(得分:2)

Maptsraction(http://www.mapstraction.com)允许您在任意数量的地理编码服务之间进行选择。如果您需要大批量生产,这可能会有所帮助,因为我知道Google对您每天可以执行的操作数量有限制。

答案 11 :(得分:1)

您可以使用bing maps soap服务,您可以在其中引用反向地理编码服务以从地址中查找lat / long 链接在这里 http://msdn.microsoft.com/en-us/library/cc980922.aspx

答案 12 :(得分:0)

答案 13 :(得分:0)

您可以使用Microsoft的MapPoint Web服务。

我创建了一个关于如何将地址转换为GeoCode(lat / long)的blog entry

答案 14 :(得分:0)

以为我会在列表中添加一个。 Texas A&amp; M在这里提供价格相当不错的服务:http://geoservices.tamu.edu/Services/Geocode/

如果您有一组非常大的地址编码地址,并且不想将10k邮寄给Google或Microsoft,那么这是一个不错的选择。我们最终还是在谷歌地图中使用了返回的数据。

答案 15 :(得分:0)

你问的是Geocoder。 Google为此提供了API。 其他提供商也是如此。

您可以在 My Current Location .net

中看到实施演示

答案 16 :(得分:-1)

USC WebGIS Geocoder是免费的并提供多个API,或者您可以上传数据库进行在线批处理。

答案 17 :(得分:-1)

如果您需要一次性解决方案,可以尝试:https://addresstolatlong.com/

我已经使用了很长时间,它对我来说效果很好。