这是Ruby上的另一个真正的新手,所以请温柔......我正在使用alexreisner的Geocoder on rails 3.0,我无法调用Geocoder :: Results lib中的方法.我仔细研究了Geocoder文档,但我无法完成一件简单的事情:从用户提交的地址中取出"状态"结果.因此,将"加利福尼亚州旧金山的123 Fake Street"变成"CA"或"California".
(我的程序目前只使用"状态"信息来帮助确定结果,但我希望在以后改进应用程序时使用完整的地址信息,这就是我要求提供完整地址的原因. )
我已经通过我从这里找到的文档和其他答案中收集到的最好的东西建立了我的模型,但是之前的答案类似于这个主题并没有帮助我:
class Project < ActiveRecord::Base
attr_accessible :title, :address, :latitude, :longitude
belongs_to :user
geocoded_by :address
after_validation :fetch_coordinates
reverse_geocoded_by :latitude, :longitude do |obj, geo|
obj.state = geo.state
obj.country_code = geo.country_code
obj.address = [geo.state, geo.country_code].join(",")
end
after_validation :reverse_geocode
end
Run Code Online (Sandbox Code Playgroud)
但是这会出现状态,国家代码和地址的"未定义错误方法".我不明白,因为Geocoder gem的文档清楚地提供了这些方法.我的模型似乎根本无法访问它们.(为了记录,我的模型能够从输入的地址中提取纬度和经度,所以看起来Geocoder配置正确.而且"geocoded_by"方法效果很好.此外,它已正确设置为Google API).
我很确定我在这里缺少一些直截了当的东西.在rails控制台中,我甚至可以使用Geocoder.search("Miami,FL")并提取所有县,州和城市信息,但我似乎无法通过我的模型提取"状态".
谢谢你的帮助!
从昨天开始,Google Geocoder的GeoResult似乎为几何位置值重新标记了不同的标识符标记.在过去,他们使用long/lat值来表示他们的JSON中的Va/Ua标识符,如结果对象.经度标识符昨天从Va改为Ta.这对于任何Google请求结果都是常见的,该标识符会随着时间而改变吗?如果是这种情况,Google如何通知开发人员此类API更改?
在我的代码(Objective-C)中,我将借助JSON解析器解析这些标识符,以接收当前的long/lat值.因此,我必须坚持使用当前使用的这种标识符的表示法,因为JSON对象将被转换为数组或字典,后面的字典导航将通过例如[locationResult objectForKey:@"Va"]调用完成.
使用Google JavaScript API获得任何其他体验.否则,我必须在JavaScript中检查long/lat结果,然后将最终结果返回给我的Objective-C代码.但我仍然会优先选择将整个JSON结果对象返回到Objective-C代码并在那里解析它的方法.
问候
我将用我最新的调查更新我自己的问题:Google将频繁更改JSON对象的内部格式,今天他们再次更改它.因此,我必须通过在JSON解析器的帮助下解析结果来评估JavaScript方面的整个Geocoder结果,而不是Objectiv-C中的结果.对我来说很难过,但我认为坚持使用JavaScript API而不是原始结果会更安全.:-(
谢谢你的答案!
我在我的Android应用程序中使用Geocoder将字符串解析为地址.以下代码片段通过Wifi正常工作,但不能通过3G.当超过3G时,它会抛出一个IOException: Unable to parse response from server.
在关于此的其他讨论中,一个常见的答案是可能的原因是Geocoder被使用了很多次/分钟,超过了阈值,并导致服务暂时抛出异常.我相信这不是我的情况,因为我从来没有得到过我的新手机(Nexus S,android 4.1)的服务,这是几个星期前我得到的.
这是片段:
Geocoder gc = new Geocoder(this);
List<Address> newAddresses = gc.getFromLocationName(arg0.toString(), 10);
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
if @near.nil?
loc, @near, found = get_user_geolocation
else
loc = GeoKit::Geocoders::GoogleGeocoder.geocode(@near)
found = loc.success
@near = loc.full_address
end
Run Code Online (Sandbox Code Playgroud)
在第一个if部分,发生了什么?我的语法可能不太好,但它让我很好奇.提前致谢.
我一直在谷歌搜索这几个小时但到目前为止没有运气.
我想获取触摸/点击地图的位置的地址.
据我所知,为了获得地址,我需要反转地理编码坐标.但是我如何首先从地图中获取坐标?
当我尝试加载此代码时遇到问题,我不知道为什么它不起作用......
<script type="text/javascript">
$(document).ready(function()
{
var geocoder = new google.maps.Geocoder();
$(".textarea-autosize").autosize();
geocoder.geocode({
address: '{$order->address_delivery["address1"]},{$order->address_delivery["postecode"]},{$order->address_delivery["city"]}'
}, function(results, status) {
if (status === google.maps.GeocoderStatus.OK)
{
var delivery_map = new google.maps.Map(document.getElementById('map-canvas'), {
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: results[0].geometry.location
});
var delivery_marker = new google.maps.Marker({
map: delivery_map,
position: results[0].geometry.location,
url: 'http://maps.google.com?q={$order->address_delivery["address1"]},{$order->address_delivery["postcode"]},{$order->address_delivery["city"]}'
});
google.maps.event.addListener(delivery_marker, 'click', function() {
window.open(delivery_marker.url);
});
}
});
});
// Fix wrong maps center when map is hidden
$('#tabAddresses').click(function(){
x = delivery_map.getZoom();
c = delivery_map.getCenter();
google.maps.event.trigger(delivery_map, 'resize');
delivery_map.setZoom(x);
delivery_map.setCenter(c);
});
</script>
Run Code Online (Sandbox Code Playgroud)
错误发生在 …
我正在制作一个iPhone应用程序,我从http://maps.googleapis.com/maps/api/geocode/json?address=canada&sensor=true中检索JSON数据,然后将其存储在NSDictionary对象中.我的代码编译得很好,JSON数据有效.但是,当我查找某些键时,即使键存在也返回nil并且我没有输入错误.这是唯一有效的键(feed是一个NSDictionary对象):
NSString *status = [[NSString alloc] initWithFormat:[feed objectForKey:@"status"]];
Run Code Online (Sandbox Code Playgroud)
但是当我做这样的事情时:
NSString *longName = [[NSString alloc] initWithFormat:[feed objectForKey:@"long_name"]];
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
WebKit在webView中丢弃了一个未捕获的异常:shouldInsertText:replacementDOMRange:givenAction:delegate: * - [NSPlaceholderString initWithFormat:locale:arguments:]:nil参数
我有两个问题:我该如何解决这个问题?此外,由于如果存在多个具有相同名称的位置(即"Springfield"),此Google Geocoder可以返回多个位置,如何选择我想要引用的键?(比如"long_name","lat"等...)
提前致谢!
我想知道,如果有办法让jQuery Deferred使用Google Geocoder.我尝试过类似的东西:
// ...
_geocoder: function( address ) {
if ( !this.props.geocoder ) {
this.props.geocoder = new google.maps.Geocoder();
}
var deferred = $.Deferred(),
geocoder;
geocoder = this.props.geocoder.geocode( { 'address': address }, function( results, status ) {
if ( status === google.maps.GeocoderStatus.OK ) {
deferred.resolve({
lat: results[ 0 ].geometry.location.k,
lng: results[ 0 ].geometry.location.A
});
} else {
deferred.reject();
}
return deferred.promise();
});
$.when( geocoder() ).then(
function( data ) {
alert( status );
},
function() {
alert( "Defer rejected" );
} …Run Code Online (Sandbox Code Playgroud) 我试图从Google地理位置API结果中仅获取县名.不幸的是,县并不总是在结果的同一地点,所以我需要通过识别键来抓住它administrative_area_level_2
这是我的电话:
$.getJSON( {
url : 'http://maps.googleapis.com/maps/api/geocode/json?latlng=' + position.coords.latitude + ',' + position.coords.longitude + '&sensor=true',
data : {
sensor : false
},
success : function( data, textStatus ) {
var county = data.results[0].address_components[4].long_name;
alert('County: ' + county);
}
});
Run Code Online (Sandbox Code Playgroud)
这适用于我所在的县,但不适用于其他县,因为address_components[4]并不总是县.然而,我确实注意到该县始终与之相关administrative_area_level_2
这是一个示例响应:
{
"results" : [
{
"address_components" : [
{
"long_name" : "Edge of Everglades Trail",
"short_name" : "Edge of Everglades Trail",
"types" : [ "route" ]
},
{
"long_name" : "Homestead",
"short_name" : "Homestead",
"types" …Run Code Online (Sandbox Code Playgroud) javascript google-maps google-maps-api-3 google-geocoder google-geocoding-api
我正在尝试建立一个房地产代理网站,并想到将地址保存为数据库的坐标(因为文本地址可能很难)
所以我有两个主要问题:
1)如果地址被保存为坐标,是否可以按街道搜索对象?它有多难?也许你可以用任何网络编程语言提供一个有用的例子,或者建议一个很好的演练.
2)这是一种可行的方法吗?也许它有可怕的缺点,我没有看到.
我们使用 Google Maps API,当用户输入 5 位邮政编码时,结果在绝大多数情况下都是正确的;它将输入视为邮政编码并根据该位置返回结果。
我们注意到的问题是,对某些邮政编码(42025 是我们的主要示例)的查询不会返回预期结果(肯塔基州本顿)。API 调用实际上返回“status”:“ZERO_RESULTS”。在maps.google.com上进行类似的搜索有时会产生积极的结果,但前提是肯塔基州本顿已经消耗了大部分视口。解决方法是在查询字符串中添加术语“zip”。
我的调查显示,失败的结果似乎使用了 5 位数字符串,就像街道地址一样,但什么也没找到。例如,对“42020”的查询最终会显示华盛顿特区附近的某个地址。
有人遇到过这个问题吗?对于如何解决这个问题有什么建议吗?
我无法在 XCode 中显示/获取“XCode 项目(项目 > 签名和功能 >“+ 功能”按钮)并选择“位置更新”功能。
它在链接中
https://pub.dev/packages/geolocator
在 iOS 上,您需要将以下条目添加到您的 Info.plist 文件(位于 ios/Runner 下)才能访问设备的位置。只需打开 Info.plist 文件并添加以下内容(确保更新说明,使其在您的应用程序上下文中有意义):
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to location when open.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>This app needs access to location when in the background.</string>
Run Code Online (Sandbox Code Playgroud)
如果您希望在应用程序处于后台时接收更新,您还需要将后台模式功能添加到您的 XCode 项目(项目 > 签名和功能 >“+ 功能”按钮)并选择位置更新。请小心这一点,在将您的应用程序提交到AppStore时,您需要向Apple详细解释为什么您的应用程序需要这个。如果 Apple 对解释不满意,您的应用程序将被拒绝。
使用 requestTemporaryFullAccuracy({ PurposeKey: "YourPurposeKey"}) 方法时,应将字典添加到 Info.plist 文件中。
<key>NSLocationTemporaryUsageDescriptionDictionary</key>
<dict>
<key>YourPurposeKey</key>
<string>The example App requires temporary access to the device's precise location.</string>
</dict>
Run Code Online (Sandbox Code Playgroud)
第二个键(在此示例中称为 YourPurposeKey)应与 requestTemporaryFullAccuracy() 方法中传递的 PurposeKey 匹配。可以为应用程序中的不同功能定义多个键。更多信息可以在 Apple 的文档中找到。
注意:第一次请求临时完全准确访问时,可能需要几秒钟的时间才会显示弹出窗口。这是因为 iOS …
我正在尝试一个简单的应用程序,我需要显示一个地图.当我点击任何位置时,它应该返回该位置的地址.请你指导我如何继续这个.
google-geocoder ×13
google-maps ×4
android ×3
geocoding ×3
objective-c ×2
ruby ×2
dart ×1
database ×1
flutter ×1
geolocation ×1
javascript ×1
jquery ×1
json ×1
location ×1
maps ×1
nsdictionary ×1
php ×1
prestashop ×1
rubygems ×1
xcode ×1