我在使用 Google map 时遇到了一个奇怪的问题,他们的文档似乎没有涵盖该问题。
我们的应用程序中有一个页面,当最终用户输入邮政编码时,该页面会返回按距离排序的工程师位置列表。我们最近注意到一些最终用户正在输入部分英国邮政编码(L1、BB7 或 SE10)。
这些往往很好并且按预期工作,但如果用户搜索曼彻斯特地区的部分邮政编码,他们会得到奇怪的结果,返回超过 100 英里的距离。
我对此进行了研究,Google 似乎正在返回高速公路网络的位置,其中道路名称与曼彻斯特的邮政区域相匹配。例如:M4 正在返回布里斯托尔以北的高速公路,而不是市中心区域。
我发送给谷歌的负载如下:
$url="https://maps.google.com/maps/api/geocode/json?address={$address}&components=country:GB&key={$apikey}";
如果我将负载更改为:
$url="https://maps.google.com/maps/api/geocode/json?components=country:GB|postal_code:{$address}&key={$apikey}";
我从 API 得到了 ZERO_RESULTS。
我看到了这个question从 2014 年开始,这是相同的问题,但似乎没有找到解决方案。
我做错了什么?是否有任何变通方法可以尝试获得稍微更准确的结果?我最好只将输入限制为完整的邮政编码吗?
最佳答案
我想出了一个相当困惑的 hack,似乎可以解决我的问题。
// Check if the postcode is a partial Mancunian postcode
if($postcode[0]==="M" && strlen($postcode) <= 4){
if($postcode[1]==6){
$manchester_postcode = "Salford ".$postcode;
}else{
$manchester_postcode = "Manchester ".$postcode;
}
$address=urlencode($manchester_postcode);
}else{
$address=urlencode($postcode);
}
$apikey=urlencode(env('GOOGLE_MAP_API'));
$url="https://maps.google.com/maps/api/geocode/json?address={$address}&components=country:GB&key={$apikey}";
如果邮政编码可识别为部分(4 个字符或更少)并以字母 M 开头,我会在其前面加上“曼彻斯特”。这解决了除 M6 之外的所有错误编码,它仍然顽固地选择高速公路。
所以我添加了第二个字符的检查并将前缀更改为“Salford”。这解决了问题。
关于php - 从部分英国邮政编码返回的结果不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50842474/
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我正在使用ruby1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参
我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西:
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent
导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri
我在OSX上(如果重要的话)。如果我使用RVM安装Ruby,它会默认将Bundler安装到@globalgemset假设我想要一个不同版本的bundler。我假设我需要做的就是执行geminstallbundler--version但是,这会将bundler安装到默认gemset并且RVM不会为其设置路径。因此,如果我键入bundler,它仍会启动一个与Ruby一起安装到@global中的bundler两个问题:如何将bundler安装到@globalgemset。将bundler安装到@globalgemset中的模式是否正确,或者我遗漏了什么 最佳答案