如何将地址或城市转换为纬度/经度?我可以从中“租用”这项服务的商业机构吗?这将用于具有全时Internet访问的Windows PC上的商业桌面应用程序中。
如何将地址或城市转换为纬度/经度?我可以从中“租用”这项服务的商业机构吗?这将用于具有全时Internet访问的Windows PC上的商业桌面应用程序中。
Answers:
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/以获得雅虎的服务
API has been deprecated
之前针对此问题推出了自己的解决方案,我可以为此全心全意地推荐Geo :: Coder :: US Perl模块。只需下载所有人口普查数据,然后使用随附的导入程序为您所在的国家/地区创建Berkeley数据库,然后将Perl脚本指向该数据库即可。使用模块的内置地址解析,即可轻松使用:离线地理编码系统!
将地址或对象转换为经/纬度时,称为地理编码。
周围有很多地理编码解决方案。您的项目的解决方案权利将取决于每个地理编码解决方案的许可条款的可接受性。Microsoft Virtual Earth和Google Maps都提供了在严格限制的许可下免费使用的解决方案...
https://developers.google.com/maps/documentation/javascript/tutorial
尝试使用此代码,我这样处理地址:
在该链接中,您将使用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方法。
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
现在结果是带有地址和lan,lng信息的JSONObject。用gson()解析JSONObject(结果)。之后,使用lat,lng。
如果您对代码有疑问,请询问。
sensor=false
?
Maptsraction(http://www.mapstraction.com)使您可以在任意数量的地理编码服务之间进行选择。如果您需要做大量工作,这可能会有所帮助,因为我知道Google每天最多可以做多少次。
虚拟地球做到了。还有一个在Web服务geocoder.us
您还可以尝试使用OpenStreetMap NameFinder(或当前的Nominatim),它包含(可能)整个世界的开源,类似Wiki的街道数据。
您可以使用bing maps soap服务,在这里您可以引用反向地理编码服务从地址中查找经纬度,此处是链接 http://msdn.microsoft.com/zh-cn/library/cc980922.aspx
您可以使用Microsoft的MapPoint Web服务。
我创建了有关如何将地址转换为GeoCode(经/纬度)的博客条目。
以为我会再增加一个。德克萨斯州A&M在这里提供价格合理的服务:http : //geoservices.tamu.edu/Services/Geocode/
如果您有大量地址要进行地理编码并且不想将10k拍给Google或Microsoft,则是一个不错的选择。我们仍然最终在Google Map中使用了返回的数据。
您正在询问有关Geocoder的信息。Google为此提供了一个API。其他提供商也是如此。
您可以在“我当前的位置.net”中查看实施演示
在南加州大学的WebGIS地理编码是免费的,提供了几个API的,或者你可以上传网上批量处理的数据库。
如果您需要一次性解决方案,则可以尝试:https : //addresstolatlong.com/
我已经使用了很长时间,对我来说效果很好。