对于一次性项目,我需要对数千个地址进行地址解析。过去,我已经使用了各种在线资源(例如Google Maps API),但是我正在使用的地址必须保密-这意味着除非存在某些问题,否则不要通过Internet发送它保证隐私。我还有什么其他选择?
对于一次性项目,我需要对数千个地址进行地址解析。过去,我已经使用了各种在线资源(例如Google Maps API),但是我正在使用的地址必须保密-这意味着除非存在某些问题,否则不要通过Internet发送它保证隐私。我还有什么其他选择?
Answers:
如果您更喜欢使用Google Geocoding API或其他在线资源,而不是本地选项,那么我建议您研究Tor项目(可通过名为“ Vidalia软件包”的软件包轻松安装)。
Tor通过绕开由世界各地志愿者运营的分布式中继网络的通信来保护您的通信:它可以防止...您访问的站点了解您的地理位置。
除了注入随机地址并使用ssl(https)加密到其端点的通信(确保您也正在执行此操作)之外,我无法想到一种更安全的远程地理编码方式。无论您使用的是哪种地理编码服务,都将永远无法识别请求的最终来源,并且使用https也不会。注意:请勿使用需要api键的地理编码服务,否则您将不再是匿名的。 (Google不再需要api密钥)。
此过程的另一个好处是,您将不再受限于任何数量的地理编码请求,因为您的请求看起来就像来自多个IP地址。但是,我不建议也不赞成滥用这些可爱的免费API!如果API限制速率,则速率仍将受到限制(尽管使用Tor的传输速度比直接连接要慢很多)。
Python案例研究-安装Vidalia捆绑包并在127.0.0.1:8118(默认)上运行代理后,在Python 2.7或更高版本中,您可以使用以下命令设置https urllib2代理:
import urllib2
proxy = urllib2.ProxyHandler({'https': '127.0.0.1:8118'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
response = urllib2.urlopen("https://maps.google.com/maps/geo?q=Los+Angeles&sensor=false&gl=us")
请注意,直到至少Python 2.7左右,urllib2代理才可与https一起使用,因此此方法仅适用于最新的Python版本。确保上面示例中的两个地方都有“ https”(不是“ http”)。我仅使用Python 2.7.1进行了测试。
Vidalia每10分钟更改一次您的身份/明显的IP地址来源,但是如果您遇到速度慢或其他问题(超出配额的错误),或者如果您特别偏执并且想更频繁地更改身份,则可以更改Tor身份在这里使用python代码(在下面稍作修改)。您需要通过输入Vidalia设置将Tor密码更改为静态密码(而不是随机生成的密码)。完成所有更改后,可能还需要重新启动Vidalia。
p = "MySuperSecurePassword"
def renewTorIdentity():
success = False
try:
s = socket.socket()
s.connect(('localhost', 9051))
s.send('AUTHENTICATE "' + p + '"\r\n')
resp = s.recv(1024)
if resp.startswith('250'):
s.send("signal NEWNYM\r\n")
resp2 = s.recv(1024)
if resp2.startswith('250'):
success = True
except:
success = False
return success
一种选择是使用Geo-Coder-US,这是一个开源Perl模块,它使用美国人口普查的Tiger / Line数据进行地理编码。我没有亲自使用过,但是看起来很棒。上面的链接包括一个不错的概述,以及指向已经组装了必要的人口普查文件的版本的链接。
Geokit库可以使用Google,Yahoo,Geocoder.us,Geocoder.ca和Geonames中的任何一个。它是用Ruby编写的,还有一个用于Ruby on Rails项目的姊妹库:
为了保护隐私,您可以通过将查询分成不太可能与您的活动链接的集合来将查询分散到所有提供程序。您还可以通过从在线电话目录中添加真实地址来在地址中注入噪音。而且我建议您在各个地方(例如网吧)运行此脚本,最后结合结果。
真正保护您隐私的唯一方法是下载完整的数据集并针对它运行脚本。OpenStreetMap提供了Nominatim系统。并非所有城市都完整,但是您可以使用它来减少发送给其他提供商的地址列表。
尽管http://openaddresses.org/仍处于开发的早期阶段,但其目的是提供一个包含全球地址和相关地理编码服务的开放数据库。
尽管不是私有的,但开放地址数据库的性质可能意味着它可以全部下载(或至少对于选定区域而言),以允许离线地理编码。
根据地址所在的位置,您可以下载和使用OpenStreetMap功能。
签出:http : //www.openstreetmap.org/
另外,如果您在美国,那么还有TIGER项目和PostGIS TigerGeocoding API。 http://svn.osgeo.org/postgis/trunk/extras/tiger_geocoder/
我认为可以下载http://geocoder.us/后面的代码,这样您就可以下载它和TIGER数据文件,或多或少设置您自己的本地安装。重新访问该网站后,我没有立即看到它,但是您可能需要四处看看。
为什么不使用以前使用的相同地理编码器,而只是删除所有其他元数据?
不要发送“秘密位置;某城市大街123号”,而只是发送“某城市主大街123号”?无论如何,这些地址都是公共信息。只是不要告诉地理编码器您有核基地清单或所有NSA位置。结果将以表格格式显示,然后您可以重新附加所有其他秘密元数据。
在OpenStreetMap主页上的搜索是一个名为Nominatim的系统。您可以将其称为地理编码服务(如果您比较礼貌),但是它都是开源的,因此您也可以在自己的服务器上进行设置。
这是使用OpenStreetMap数据加载到postGiS数据库中。它相对较新并且仍在开发中,并且设置和加载数据的过程并不是那么简单,而且非常浪费资源。...但是它是免费开放的!
大多数答案都将您引向本地数据库。尽管这肯定会起作用,但您还必须考虑地理编码是否是您的核心领域。(这就是您的专长吗?为了解决问题并且不想花大量时间进行生产,仍然可以选择通过API来完成,而不会影响安全性。
首先,坚持使用HTTPS,因为您需要在到达API的过程中确保数据安全,然后再返回给您。其次,请确保您正在向API发送POST请求,而不是GET请求。使用POST,您只是传递了带有有效负载的URL请求,并且唯一会影响服务器日志的结果是,在某个时间和某个IP上发出了地址验证和地址解析请求。提交的地址和返回的地址都不会存储到磁盘或写入服务器日志。它没有比这更安全的了。
因此,尽管本地机器肯定是安全的,但可能需要进行大量开发才能完成所需的工作。由于可以消除安全隐患,因此您可能想要(再次)考虑使用API的选项。
我为一家专门从事安全API地理编码的地址验证公司-SmartyStreets工作。
旧线程,但值得一提。http://www.tigergeocoder.com/,使用TIGER 2013数据,可以在Amazon EC2云中运行您自己的服务器实例。