关于地理编码:如何将地址转换为纬度/经度?

关于地理编码:如何将地址转换为纬度/经度?

How to convert an address to a latitude/longitude?

如何将地址或城市转换为纬度/经度? 我可以从中"租借"该服务的商业机构吗? 这将用于具有全时Internet访问的Windows PC上的商用台式机应用程序中。


Google有一个地理编码API,对于他们拥有Google Maps数据的大多数位置来说,它似乎都可以很好地工作。

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 Maps本身使用的数据相同。 (请注意,有一些例外情况,例如英国或以色列,它们的数据来自其他来源且质量略有下降)


没什么新添加的,但是我在以前的工作中在GIS和地理编码方面有很多实际经验。这是我记得的内容:

如果您的应用程序中"偶尔需要",我绝对会推荐Google或Yahoo Geocoding API,但请务必仔细阅读其许可条款。

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

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

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

我认为还没有提到这一点,但是ESRI拥有包括地理编码的ArcWeb Web服务,尽管它们并不便宜。上次我使用它们时,每次查询的费用约为1.5美分,但您必须预先支付一定的费用才能开始使用。再次,主要优点是,他们使用的道路数据会及时更新,并且您可以在Google不允许的商业情况下使用这些数据。 ArcWeb服务还将在Google地图中提供高分辨率的卫星和航拍照片,并根据请求再次定价。

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

最后,有关地理编码的Wikipedia文章对算法和技术提供了一些很好的信息。即使您不是在自己的代码中执行此操作,了解各种数据源可能会出现的错误和准确性也很有用。


雅虎! Maps Web服务-与Google的API不同,地理编码API可以对英国的邮政编码进行准确的地理编码。

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


试试看:http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false

此处提供更多信息:http://code.google.com/apis/maps/documentation/geocoding/


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

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

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

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


之前针对此问题推出了自己的解决方案,我可以为此全心全意地推荐Geo :: Coder :: US Perl模块。只需下载所有人口普查数据,然后使用随附的导入程序为您所在的国家/地区创建Berkeley数据库,然后将Perl脚本指向该数据库即可。使用模块的内置地址解析,即可轻松实现:离线地理编码系统!


尝试使用此代码,我这样处理地址:

在该链接中,您将使用GET方法发送请求并获取经纬度。 http://maps.google.com/maps/api/geocode/json?address=您的地址&sensor = false

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

1.创建您的GET方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 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
" + result);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

2.创建发送请求的方法

1
2
3
4
5
6
@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="http://maps.google.com/maps/api/geocode/"

3.调用方法getLatLng

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

4.解析JSONObject

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

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


虚拟地球做到了。 geocoder.us上还有一个Web服务


Maptsraction(http://www.mapstraction.com)使您可以在任意数量的地理编码服务之间进行选择。如果您需要做大量工作,这可能会有所帮助,因为我知道Google每天最多可以做多少次。


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

  • 在线申请:

    • Google有地理编码API
  • 后端应用程序:

    • GeoStan

您也可以尝试使用OpenStreetMap NameFinder(或当前的Nominatim),它包含(可能)整个世界的开源,类似Wiki的街道数据。


您可以使用bing maps soap服务,您可以在其中引用反向地址解析服务以从地址中查找经纬度
链接在这里
http://msdn.microsoft.com/en-us/library/cc980922.aspx


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

我创建了一个有关如何将地址转换为GeoCode(经纬度)的博客条目。


以为我会再增加一个。德克萨斯州A&M在这里提供价格合理的服务:http://geoservices.tamu.edu/Services/Geocode/

如果您有大量地址要进行地理编码并且不想将10k拍给Google或Microsoft,则是一个不错的选择。我们仍然最终在Google Map中使用了返回的数据。


雅虎! Maps Web服务-地理编码API


您在询问有关Geocoder的信息。
Google为此提供了一个API。
其他提供商也是如此。

您可以在"我当前的位置.net"中查看实施演示


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


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

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


推荐阅读