我有一堆坐标,我想将它们转换为人类可读的地址.有没有办法实现这个目标?如果我能得到坐标所在城市的名称,那就太好了.
我需要反转地理编码两个位置"从"和"到".
使用geocoder gem(http://www.rubygeocoder.com/)我尝试过:
reverse_geocoded_by :from_lat, :from_long, :address => :from_string
reverse_geocoded_by :to_lat, :to_long, :address => :to_string
after_validation :reverse_geocode
Run Code Online (Sandbox Code Playgroud)
但只有第二个(to_string)成功反向编码.
地理编码器宝石可以支持多个地理编码步骤吗?
ruby-on-rails reverse-geocoding ruby-on-rails-3 rails-geocoder
我正在开发一个具有地理意识的高分服务器,并且希望能够列出诸如“Dutchess 县第一名”或“纽约州第三名”之类的分数。我可以对用户的位置进行反向地理编码并获得一个列出管理区域等的地标。
对于上述示例,iOS 和 Google 使用的反向地理编码器将返回“Dutchess”和“New York”,因此我需要为美国提供“County”和“State”。
但是,游戏是全球性的,所以我需要知道其他英语国家的每个地理组织级别的名称。
因此,在美国,Google / iOS 地标级别将描述如下:
行政区 = "州"
SubAdministrativeArea =“县”(或路易斯安那州的“教区”)
Locality =“城市”或“城镇”
Sublocality =(我称之为“邻里”)
PostalCode = "邮政编码"
所有这些级别在其他英语国家叫什么?(加拿大、英国、澳大利亚、新西兰、新加坡等)。如果有列出所有这些的资源,我很想知道。我想我可能只是不知道在网上搜索什么。
这是我在此处找到的另一个问题的扩展: Finding Nearest street given a lat-long location
OP 要求提供最近的街道名称,但给出的答案对我不起作用。我需要我住在爱尔兰的应用程序的街道名称,我们所有的道路都用一个字母和道路编号命名。根据道路等级,字母是 L、R、N 或 M。这是我的应用程序所需的信息。
使用地理编码器类对这些坐标进行反向地理编码: 53.286288,-6.801891(就在“R”道路上)给了我区域名称但不是道路名称。在谷歌地图上,如果你输入坐标,它会说它是“R403”。
我的问题是如何使用与 google api 的 co-ords 获得最近的道路名称?如果在线谷歌地图可以报告道路名称,我有办法吗?
我已经查看了 Directions API,我还想知道我是否提供了上述坐标作为起点和目的地(因为我的应用程序将只有当前位置并且没有目的地)API返回道路名称?
我正在为这种情况寻找一两个好的习语:
我想使用异步反向地理定位调用将 CLLocationCooperative2D 转换为 CLPlacemark,作为一系列其他操作的一部分。
转换步骤在很大程度上是一个“实用”步骤,因此在处理程序中放入大量代码来执行“其他操作”感觉结构很差。
我可以将结果存储在类变量中,但我需要知道异步步骤何时完成,这意味着某种事件触发或主线程排队超时或其他什么,这也看起来很尴尬。
有标准方法吗?将代码放入处理程序中是否很常见?
谢谢!
这是我的上下文的具体代码,FWIW。
func getPlaceFromCoordinate(coordinate: CLLocationCoordinate2D) -> CLPlacemark? {
var loc = CLLocation(
latitude: coordinate.latitude,
longitude: coordinate.longitude
)
var mightBeAPlace: CLPlacemark? = nil
CLGeocoder().reverseGeocodeLocation(loc, completionHandler: {(placemarks, error) -> Void in
if(error != nil) {
println("Reverse geocoding error.")
}
else if (placemarks.count == 0) {
println("no placemarks")
}
else { // if (placemarks.count > 0)
println("we have placemarks")
mightBeAPlace = CLPlacemark(placemark: placemarks[0] as! CLPlacemark)
println("Inside closure place: \(mightBeAPlace?.locality)")
lastUserSelectedPlace = mightBeAPlace // This stores …Run Code Online (Sandbox Code Playgroud) 我的问题:需要多个节点反向地理编码.我使用nominatim API
我有很多鬃毛节点(约800 000),我想反转所有这些节点的地理编码,以便拥有这样的数据库
节点| 城市| 区| 街道| lat | LON
"lat"和"lon"我已经有了,但是我的大多数节点都没有街道,城市,区域,我想拥有它们.
我提出的一个解决方案如下.我可以发出大约1000个请求然后我的ip被阻止,在一个小时内我可以再次发出1000个请求.我也使用代理,从而从不同的IP地址发出请求.所有这些同时发生,所以我总共可以每天更新30 000 - 40 000个节点.如您所见,要更新我的节点,我需要很多天.
这种解决方案有一些缺点:速度,时间和重载名义服务器.
那么更好的想法是什么?也可以下载已经反转地理编码的特定多边形(具有max lat,lon,min lat,lon的区域)的节点.在这种情况下,我不需要制作多个地理编码请求.
如果您有任何想法,我可以使用其他API,谷歌,Yandex,无论如何,请告诉我.
最好的祝福
我正在尝试从Google反向地理编码API获取城市名称,我的代码显示的是该位置的完整地址,但我只需要城市。波纹管是我的代码
<?php
session_start();
if(!empty($_POST['latitude']) && !empty($_POST['longitude'])){
//Send request and receive json data by latitude and longitude
$url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='.trim($_POST['latitude']).','.trim($_POST['longitude']).'&sensor=false';
$json = @file_get_contents($url);
$data = json_decode($json);
$status = $data->status;
if($status=="OK"){
//Get address from json data
//$location = $data->results[0]->formatted_address;
$location = $data->results[0]->address_components;
}else{
$location = '';
}
//Print city
$_SESSION['getgeoloc']=$location[6]->long_name;
echo $location;
}
?>
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下代码显示城市,但有时会显示邮政编码,有时还会显示城市名称
$_SESSION['getgeoloc']=$location[6]->long_name;
Run Code Online (Sandbox Code Playgroud)
有什么最好的办法吗?
我已经在互联网上寻找一个简单的答案,但我似乎无法在任何地方找到它.我做了一个经度和经度的简单反向地理编码,我返回了巨大的结果对象.我从哪里去?这是我到目前为止所拥有的.目前,zipcode返回"undefined".
geocoder.geocode( {'latLng' : event.latLng}, function(results, status) {
for(var i; i < results.length; i++){
for(var j=0;j < results[i].address_components.length; j++){
for(var k=0; k < results[i].address_components[j].types.length; k++){
if(results[i].address_components[j].types[k] == "postal_code"){
var zipcode = results[i].address_components[j].short_name;
}
}
}
}
});
Run Code Online (Sandbox Code Playgroud) 我正在使用ReverseGeocodeQuery检索许多位置的地址.问题是我得到了一个例外,结果如下:
来自HRESULT的异常:0x80041B57
看看MSDN中的ReverseGeocodeQuery类引用,我可以看到它列在可能的错误结果中,符号代码为EErrorIndexFailure.但是,它没有给我更多关于错误的信息,StackTrace也是null.
我的代码如下:
foreach (var ev in events)
{
ReverseGeocodeQuery query = new ReverseGeocodeQuery();
query.GeoCoordinate = ev.Location;
query.QueryCompleted += (s, e)=>
{
if (e.Error != null)
return;
ev.city = e.Result[0].Information.Address.City;
};
query.QueryAsync();
}
Run Code Online (Sandbox Code Playgroud)
为什么我会收到此错误,我怎么能让这个工作?
在Google表格中,我有一列包含经纬度坐标。列表来自A2:A1000。我还分别在B1,C1和D1中有城市,州和国家/地区的列。我可以运行一个公式或脚本来读取坐标并在其各自的列中提供城市,州和国家/地区吗?我不知道如何使用JavaScript,XML,JSON,序列化PHP等,因此,如果您的建议包括其中之一,请提供一些说明。提前致谢。
geocoding latitude-longitude google-sheets reverse-geocoding
clgeocoder ×2
google-maps ×2
ios ×2
android ×1
asynchronous ×1
c# ×1
city ×1
geocoding ×1
geolocation ×1
java ×1
javascript ×1
jquery ×1
nominatim ×1
php ×1
python ×1
swift ×1