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

评论

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

很好的问题-我对美国尤其是科罗拉多州的前线县非常感兴趣。

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

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

#1 楼

看看geocoder.us的继承者Geocoder::US 2.0

http://github.com/geocommons/geocoder

这是perl模块的ruby port同一位作者。

#2 楼

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


评论


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

– Underdark♦
2011年6月7日在10:43

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

– Victor Van Hee
2011年6月7日10:56



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

–尼古拉斯·拉乌尔(Nicolas Raoul)
2014年5月15日下午3:44

#3 楼

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

#4 楼

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

http://geokit.rubyforge.org/

为了保护隐私,您可以通过将查询分成不太可能与您的活动链接的集合,可以将查询传播到所有提供程序。您还可以通过从在线电话目录中添加真实地址来在地址中注入噪音。而且我建议您在各个地方(例如网吧)运行此脚本,最后结合结果。针对它的脚本。 OpenStreetMap提供了Nominatim系统。并非所有城市都完整,但是您可以使用它来减少发送给其他提供商的地址列表。

#5 楼

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

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

#6 楼

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

首先,坚持使用HTTPS,因为您需要数据以确保在到达API之前以及返回给您的途中是安全的。其次,请确保您正在向API进行POST请求,而不是GET请求。使用POST,您只需将URL请求与有效负载和唯一会影响服务器日志的结果是,在某个时间和某个IP上进行了地址验证和地址解析请求,因此提交的地址和返回的地址都不会存储到磁盘或写入到服务器日志。没有比这更安全的了。

al box绝对是安全的,它可能需要大量开发才能做您需要的事情。由于可以消除安全隐患,因此您可能(再次)考虑使用API​​的选择。 。

#7 楼

根据地址所在的位置,您可以下载并使用OpenStreetMap功能。

签出:
http://www.openstreetmap.org/

另外,如果您在美国,则还有TIGER项目以及PostGIS TigerGeocoding API。
http://svn.osgeo.org/postgis/trunk/extras/tiger_geocoder/

#8 楼

我认为可以下载http://geocoder.us/后面的代码,这样您就可以下载它和TIGER数据文件,或多或少地设置了自己的本地安装。重新访问该网站后,我没有立即看到它,但是您可能需要四处看看。

#9 楼

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

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

评论


这就是我对这种情况的感觉。这不是我的雇主对这种情况的感觉。为了使人产生疑问,如果您从可识别的IP地址中获得地址列表,那么想象有人可以弄清楚这些地址的含义就不用多说了。

–马特·帕克(Matt Parker)
2010年7月23日在5:30



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

– hu
2011年4月29日在21:10

#10 楼

OpenStreetMap主页上的搜索是一个名为Nominatim的系统。您可以将其称为地理编码服务(如果您比较温和的话),但是它都是开源的,因此您也可以在自己的服务器上进行设置。 。它相对较新并且仍在开发中,设置和加载数据的过程并不是那么简单,而且非常耗资源。 ...但是它是免费开放的!

#11 楼

旧线程,但值得一提。 http://www.tigergeocoder.com/,使用TIGER 2013数据,可以在Amazon EC2云中运行您自己的服务器实例。

#12 楼

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

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

您可以检查我的系统设置和脚本以获取更多详细信息。它应该包含您需要的所有信息。