所以我已经在网上搜索了一段时间,以寻找一个 Python 库来返回你当前的确切位置,但发现没有任何可用的东西,除非你采用廉价且不准确的方法通过你的 IP 地址找到你的位置我已经在我的移动热点上进行了测试,它偏离了 100 英里。
我有另一个解决方案,但它需要将 JavaScript 与 Python 混合,我需要帮助,我才使用 Python/Django 几天。
由于 Python 是服务器端的,我一直没能找到任何可以精确定位您的精确经度和纬度的库。然而,对于客户端 JavaScript,这非常容易,并且不需要任何库:
所以我想知道是否有任何经验丰富的 Python 程序员可以在这里解释如何运行上面的 javascript 代码,并将 javascript 输出作为 Python 字符串返回:
python
>>>javascriptOutput = runJavaScript("<script> function showPosition(position) </script>")
>>>print javascriptOutput
<p id="long">-122.15563439999998</p> <p id="lat">37.4458668</p>
>>>
所以我的想法是在我在单个 python 函数中提供的 JSfiddle URL 中运行整个 HTML block ,该函数将返回 JSfiddle 提供的相同结果。
有了这个结果,我可以将它存储在一个 python 变量中,并对它进行一些字符串连接,最终存储我准确的客户端经纬度坐标。
那么是否可以在 Python 函数中运行一些 JavaScript?
或
您能否使用 Python/Django 以某种方式读取用户在运行 javascript/HTML5 地理定位后看到的 HTML 源代码?
现在我越想这个,我就越开始认为 Javascript 将不得不通过 AJAX 将某些东西传递给 Django 服务器...
最佳答案
现在我脑子里有 4 种方法。我不知道如何实现所有这些。但是,如果您在线搜索,您可能会找到实现它们的方法。
JavaScript 方法(客户端)
您在 javascript 中调用地理定位(就像您实现的那样),然后搜索与该坐标最近的位置的数据库。
另一个 MySQL 查询:latitude/longitude find nearest latitude/longitude - complex sql or complex calculation
然而,这可能有点偏离。您可以通过 ajax 将信息发送回服务器。请记住,用户可能会拒绝分享他/她的位置。
如果您需要示例代码,请告诉我,我会为您编写一个。
IP 地址查找(服务器端)
获取该用户的 IP 地址,并查找远程用户的城市。这并不总能给你一个好的结果。有时它相距数百英里。
如果您不想使用数据库,您可以使用 whois 信息来查找用户所在的城市。
三角测量 WiFi MAC 地址(需要智能手机)
如果您正在构建将作为 Android 或 iPhone 应用程序后端的网络服务,则可以使用他们(Google 或 Apple)的服务,通过使用附近的 GPS 或无线信息来获取用户的确切位置用户。 Android 和 iPhone 上传公共(public) WiFi 的 MAC 地址及其对应的坐标。这是非常准确的,但需要智能手机
在PC上也可以使用同样的方法,但是你必须控制无线网卡,然后扫描附近的SSID,然后用MAC地址查询谷歌服务(这是谷歌的付费服务)
使用网络延迟对互联网上的计算机进行三角测量
有一种方法已获得美国国家安全局的专利。我可以给你一个关于它是如何工作的提示,我可能是错的。
简化版:
在用户的地理位置范围内拥有 3 台服务器。然后尝试从每个服务器打开一个连接并测量连接到客户端需要多快。之后,通过使用光穿过每段距离的时间将该时间转换为距离。创建一个半径为该距离的圆,并根据 3 个圆的交点对用户位置进行三角测量。
您需要从您的 TCP 连接采用的每个路由器计算传播延迟(路由器处理和发送网络数据包的时间),然后从您从连接中获得的数字中减去它。考虑到用户的网速可能很慢。我附上了专利链接
关于python - Python 的最终 "Find My Geolocation"解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21198956/
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas