定位器的php地址验证

Posted

技术标签:

【中文标题】定位器的php地址验证【英文标题】:Php address validation for locator 【发布时间】:2012-02-09 17:38:19 【问题描述】:

我有一个包含任何地址(无关)的数据库表。

现在的问题是,如果该行包含“Antwerp”、“Antwerpen”或“Anvers”,则它们是相同的,但数据库当然不知道这一点。

我可以有一个包含所有比利时城市的数据库表,我可以让用户通过选择框输入城市,这样就没有错字和城市不同语言的空间。

这可行,但在某些情况下,我想用 facebook 数据自动填充输入字段,但我不知道如何确定哪个城市与 facebook 匹配,因为城市所在的语言取决于用户。

理想情况下,我应该有一个包含所有城市及其翻译的数据库表,但我还没有找到。

我唯一能想到的就是放弃自动填充功能...... :(

有人有其他建议吗?

【问题讨论】:

使用邮政编码怎么样?必须是城市名吗?找到城市邮政编码的数据库要容易得多:) 它可以是任何东西,但 facebook 不返回邮政编码。或者至少不像城市名称那样频繁...... 不要在标题中添加已解决。如果答案是您所希望的,请单击对勾。 【参考方案1】:

从wikipedia 或here(谷歌表示“比利时城市列表”)或我们这个world cities database(所有结果来自谷歌)获取数据库。

而不是像这样创建表架构:

CREATE TABLE cities (
  id INT AUTO_INCREMENT,
  state_id INT, -- If you want to
  name VARCHAR(255),
  status ENUM( 'confirmed', 'user_added')
  PRIMARY (id),
  INDEX (status),
  UNIQUE KEY (name)
)

您也可以像这样实现对同义词的处理:

CREATE TABLES synonyms (
    id INT AUTO_INCREMENT,
    city_id INT,
    name VARCHAR(255),
    PRIMARY(id),
    UNIQUE(nane)
)

您可以将城市中的所有值克隆为同义词(数据将保证完整性)并且选择将很容易,或者只是同义词(并在选择它们时编写更复杂的内部连接)并仅在设置新值时使用它们。

无论如何,您将在表单中创建带有“未列出”之类的选项的字段城市(选择框),这将允许用户手动添加城市(状态为user_added)并且管理员必须检查/添加/删除/编辑手动。

【讨论】:

@issemdanny 具有相同分数(投票)的答案是随机排序的,因此它们被阅读的机会相同。 @issemdanny 如果这是对您问题的回答,您应该点击下方的“okay mark”投票按钮(这样人们就会知道您得到了答案)【参考方案2】:

您可以使用Google Geocoding API。只需通过 GET 请求发送地址并使用返回的formatted_address 字段。这应该会给你正确的信息。

我也尝试过一次 Google Places API,但结果很糟糕。

Example Code for PHP/MySQL 可以在这里找到。你必须稍微修改一下这个例子,但它应该会给你一个线索。

【讨论】:

谢谢,但我忘了说我已经研究过了,我想知道怎么办... 注意:Geocoding API 只能与 Google 地图一起使用;禁止在未在地图上显示的情况下对结果进行地理编码。有关允许使用的完整详细信息,请参阅 Maps API 服务许可限制条款。 ----> 并且:请注意,此技术不应用于具有数千个地址的地理编码数据库,因为这违背了此服务的预期用途。 正确。在我对 ToS 的解释中,只需在用户个人资料(或您的管理界面)上显示一个小的静态谷歌地图就足够了。 (但我不是律师,不会给你任何保证)。

以上是关于定位器的php地址验证的主要内容,如果未能解决你的问题,请参考以下文章

php的 ip 定位,经纬度至少精确到镇,附上源码和详解

牛了!通过 Java 技术手段,获取女朋友定位地址...

PHP利用百度地图API进行IP定位和GPS定位

厉害了!通过 Java 技术手段,获取女朋友定位地址...

如何通过IP地址或精确定位获取用户的经纬度

PHP自动定位用户地理位置