无法通过互联网对美国地址进行地址解析?


46

对于一次性项目,我需要对数千个地址进行地址解析。过去,我已经使用了各种在线资源(例如Google Maps API),但是我正在使用的地址必须保密-这意味着除非存在某些问题,否则不要通过Internet发送它保证隐私。我还有什么其他选择?


4
您想对地理区域进行地理编码吗?例如,澳大利亚,美国,特定州等
fmark 2010年

很好的问题-我对美国广泛感兴趣,尤其是对科罗拉多州,特别是前沿山脉县。
马特·帕克

1
我真的想与RTD进行快速讨论,我知道在该领域他们拥有强大的GIS,并且很可能会为您提供直接支持。除此以外; Geocoder :: US是一个不错的选择。您可以在内部运行它,而不必冒险跨线传输数据。
DEWright 2011年

@DEWright,这是一个有趣的想法-对于我的另一个问题更是如此。谢谢!
马特·帕克

Answers:



10

如果您更喜欢使用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

4
那不能使地址保密,是吗?发送查询的计算机的物理位置在此处无关紧要(不是机密信息)。
昏暗

4
对于大多数目的而言,发送查询的机器的物理位置对于保护发送到地理编码服务的数据的匿名性非常重要。假设X研究所中的计算机发送了1000个地址的地址解析请求。可以(至少在理论上)将那些地址标识为包含X病患者。相比之下,从目的来看,地址与来自多个用户的数千个随机请求混合在一起,并且来自多个IP地址而不与任何一个用户相对应(Tor情况)。
Victor Van Hee

(通过Tor或其他方式)向Google发送数据是一个基本的隐私问题。Google不提供“铁定的隐私保证”。
Nicolas Raoul

7

一种选择是使用Geo-Coder-US,这是一个开源Perl模块,它使用美国人口普查的Tiger / Line数据进行地理编码。我没有亲自使用过,但是看起来很棒。上面的链接包括一个不错的概述,以及指向已经组装了必要的人口普查文件的版本的链接。


6

Geokit库可以使用Google,Yahoo,Geocoder.us,Geocoder.ca和Geonames中的任何一个。它是用Ruby编写的,还有一个用于Ruby on Rails项目的姊妹库:

http://geokit.rubyforge.org/

为了保护隐私,您可以通过将查询分成不太可能与您的活动链接的集合来将查询分散到所有提供程序。您还可以通过从在线电话目录中添加真实地址来在地址中注入噪音。而且我建议您在各个地方(例如网吧)运行此脚本,最后结合结果。

真正保护您隐私的唯一方法是下载完整的数据集并针对它运行脚本。OpenStreetMap提供了Nominatim系统。并非所有城市都完整,但是您可以使用它来减少发送给其他提供商的地址列表。


5

尽管http://openaddresses.org/仍处于开发的早期阶段,但其目的是提供一个包含全球地址和相关地理编码服务的开放数据库。

尽管不是私有的,但开放地址数据库的性质可能意味着它可以全部下载(或至少对于选定区域而言),以允许离线地理编码。




3

为什么不使用以前使用的相同地理编码器,而只是删除所有其他元数据?

不要发送“秘密位置;某城市大街123号”,而只是发送“某城市主大街123号”?无论如何,这些地址都是公共信息。只是不要告诉地理编码器您有核基地清单或所有NSA位置。结果将以表格格式显示,然后您可以重新附加所有其他秘密元数据。


1
这就是我对这种情况的感觉。这不是我的雇主对这种情况的感觉。为了使人产生怀疑,如果您从可识别的IP地址中获得地址列表,那么想象有人可以弄清楚这些地址所涉及的范围就不那么多了。
马特·帕克

1
@Matt顾问很适合做一件事:-)。另一种选择是将其他地址与您发送的地址混在一起。当然,这增加了成本,但无论如何它们都太低了……
whuber

3

OpenStreetMap主页上的搜索是一个名为Nominatim的系统。您可以将其称为地理编码服务(如果您比较礼貌),但是它都是开源的,因此您也可以在自己的服务器上进行设置。

这是使用OpenStreetMap数据加载到postGiS数据库中。它相对较新并且仍在开发中,并且设置和加载数据的过程并不是那么简单,而且非常浪费资源。...但是它是免费开放的!


3

大多数答案都将您引向本地数据库。尽管这肯定会起作用,但您还必须考虑地理编码是否是您的核心领域。(这就是您的专长吗?为了解决问题并且不想花大量时间进行生产,仍然可以选择通过API来完成,而不会影响安全性。

首先,坚持使用HTTPS,因为您需要在到达API的过程中确保数据安全,然后再返回给您。其次,请确保您正在向API发送POST请求,而不是GET请求。使用POST,您只是传递了带有有效负载的URL请求,并且唯一会影响服务器日志的结果是,在某个时间和某个IP上发出了地址验证和地址解析请求。提交的地址和返回的地址都不会存储到磁盘或写入服务器日志。它没有比这更安全的了。

因此,尽管本地机器肯定是安全的,但可能需要进行大量开发才能完成所需的工作。由于可以消除安全隐患,因此您可能想要(再次)考虑使用API​​的选项。

我为一家专门从事安全API地理编码的地址验证公司-SmartyStreets工作



1

在本地linux框中设置PostGIS Tiger Geocoder。它肯定比在线API麻烦,但也许是最适合您的情况的选择。如果需要,它可以扩展到数百万个地址。

借助ansible剧本,在Linux中设置服务器比以前容易得多。如果您不熟悉SQL或PostGIS,编写SQL查询可能会花费更多时间。

您可以检查我的系统设置脚本以了解更多详细信息。它应包括您需要的所有信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.