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

如何将地址或城市转换为纬度/经度?我可以从哪些商业机构“租用”这项服务?这将用于商业桌面应用程序上的 Windows 个人电脑与全时互联网接入。

168650 次浏览

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

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

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

映射(http://www.mapstraction.com)允许您在任意数量的地理编码服务中进行选择。如果你需要做大量的工作,这可能是有帮助的,因为我知道谷歌有一个限制,你一天可以做多少。

Virtual Earth 做到了这一点,在 Geocoder.us 也有一个网络服务

当您将一个地址或对象转换为 lat/long 时,它被称为 Geocoding。

有很多地理编码解决方案。项目的解决方案权利将取决于每个地理编码解决方案的许可条款的可接受性。微软虚拟地球和谷歌地图都提供了解决方案,这些解决方案可以在非常严格的许可下免费使用..。

Https://developers.google.com/maps/documentation/javascript/tutorial

雅虎地图 Web 服务-地理编码 API 精确地编码英国邮政编码,不像谷歌的 API。

不幸的是,雅虎已经否决了这项服务,您可以访问 http://developer.yahoo.com/geo/placefinder/获取雅虎的服务

在此之前,我已经为此推出了自己的解决方案,因此我完全可以推荐 地理位置: : 编码器: : US Perl 模块。只需下载所有的人口普查数据,并使用包含的导入程序为您的国家创建 Berkeley DB,然后将 Perl 脚本指向它。使用该模块的内置地址解析,并在那里您有它: 离线地理编码系统!

没有什么新的补充,但我有很多现实世界的经验,在地理信息系统和地理编码从以前的工作。这是我记得的:

如果您的应用程序“偶尔”需要使用 Google 或 Yahoo Geocoding API,那么我一定会推荐它们,但是要仔细阅读它们的许可条款。

我知道 Google Maps API 通常很容易为商业网页授权,但是不能在付费访问的情况下使用。换句话说,你可以用它来做广告或者提供服务来增加广告收入,但是你不能向访问你网站的人收费,甚至不能把它放在密码系统后面。

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

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

我认为这个还没有被提到,但 ESRI 有 ArcWeb Web 服务,包括地理编码,虽然他们不是很便宜。上次我使用它们时,每次查找大约花费1.5美分,但是你必须预付一定的费用才能开始。同样,主要的优势在于,他们使用的道路数据是及时更新的,你可以在谷歌不允许的商业情况下使用这些数据。ArcWeb 服务还将提供高分辨率卫星和航拍照片 啊啦谷歌地图,同样按请求定价。

如果你想自己滚动或访问更准确的数据,你可以从像 电信地图集这样的公司购买 GIS 数据的订阅,但这并不便宜。如果您的需求非常本地化,那么您只能购买一个州或县的数据。有几个层次的数据-地理信息系统的功能,地理信息系统加上详细的街道,所有这一切加上地理编码数据,所有这一切加上交通流量/方向/速度限制的路由。当然,价格随着层次的增加而上升。

最后,关于 地理编码的 Wikipedia 文章提供了一些关于算法和技术的好信息。即使不是在自己的代码中执行,了解可以从各种数据源中预期的错误和准确性也是很有用的。

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

南加州大学网络地理信息系统地理编码器是免费的,并提供了几个 API 的,或者你可以上传一个数据库进行在线批处理。

您可以使用微软的 MapPointWeb 服务。

我创建了一个关于如何将地址转换为 GeoCode (lat/long)的 博客日志

你可以使用 bing 地图肥皂服务,在这里你可以引用反向地理编码服务来查找 lat/long from address 链接在这里 Http://msdn.microsoft.com/en-us/library/cc980922.aspx

德州农工大学在这里有一个相当不错的定价服务: http://geoservices.tamu.edu/Services/Geocode/

如果你有一个相当大的地址集地理代码,不想轻拍10k 到谷歌或微软的一个很好的选择。我们最终还是使用了 Google Map 中返回的数据。

尝试使用这个代码,我是这样处理地址的:

在这个链接中,使用 GET 方法可以发送请求并获取 lat 和 lng。地址 = 你的20ADDRES & amp; Sensor = false”rel = “ nofollow”> http://maps.google.com/maps/api/geocode/json?address=your ADDRES & Sensor = false

例如: 地址 = W% 20Main% 20St,% 20Bergenfield,% 20NJ% 2007621 & amp

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 = “ http://maps.google.com/maps/api/geocode/”

3. 调用方法 getLatLng

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

4. 解析 JSONObject

现在 结果JSONObject有关地址和局域网的信息。 用 解析 JSONObject (result)。 用完之后再用。

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

你问的是地理编码器。 Google 为此提供了一个 API。 另一个提供商也是如此。

您可以在 我的当前位置.net 中看到实现的演示

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

我已经使用它很长时间了,它对我来说非常有效。