javascript - Google Places API - 使用城市查找地址

标签 javascript google-maps google-places-api

我打算使用 Google Places API 来在我的网站中创建地址自动完成功能。我的问题是使用 Google 地方信息是否可以满足我的要求。

我有一个“发布请求”页面,用户可以在其中发布地址(城市、街道和门牌号)。我还有一个“搜索”页面,用户可以在其中根据城市搜索帖子。这里用户只插入城市名称,没有街道和门牌号。

我的问题:

  • 我是否可以强制用户插入城市、街道和门牌号(例如,仅插入城市或仅插入城市和街道会提示无效输入,或者自动完成将仅返回城市、街道和门牌号的结果)?
  • 我可以强制用户只输入城市(没有街道和门牌号)吗?
  • 假设用户发布地址为“MyCity, MyStreet 12”。在应用程序的后台,我获得了这个特定位置的 id 并存储它。另一个用户正在搜索帖子并插入“MyCity”。在后台,我获得了“MyCity”的特定 id 并使用此 id 在我的数据库中进行搜索。如何使用“MyCity”键找到第一个用户的结果:“MyCity, MyStreet 12”?
    换句话说,假设我有一个代表城市的位置 id 和代表完整地址(城市、街道、门牌号)的其他位置 id,我如何仅使用 id 来检查完整地址是否属于该城市?
  • 最佳答案

    至于用户在与 Autocomplete 关联的输入框中键入的内容dev-guide ,您无法控制他们输入的内容。但是,当您设置 Autocompleteapi-doc ,您可以定义控制返回结果的选项。您的关键是设置 types选项正确。

    针对您的问题 #1 ,您可以限制将在 Autocomplete 中返回的结果通过设置 types 到地址至 geocode如本例所示:

    var defaultBounds = new google.maps.LatLngBounds(
      new google.maps.LatLng(-33.8902, 151.1759),
      new google.maps.LatLng(-33.8474, 151.2631));
    
    var input = document.getElementById('searchTextField');
    var options = {
      bounds: defaultBounds,
      types: ['geocode']
    };
    
    autocomplete = new google.maps.places.Autocomplete(input, options);
    

    针对您的问题 #2 ,您可以限制在 Autocomplete 中返回的结果通过设置进入城市 typescities如图所示:
    var input = document.getElementById('searchTextField');
    var options = {
      types: ['(cities)'],
      componentRestrictions: {country: 'fr'}
    };
    
    autocomplete = new google.maps.places.Autocomplete(input, options);
    

    还要注意,因为 Autocomplete已被限制为 (cities) , 我加了一个 componentRestrictions说明符设置搜索城市的国家(在本例中为法国)并删除 bounds说明符。

    针对您的问题 #3 ,可以创建两张表,一张用来存放城市 数据,其他存储地址 数据,如下图所示:

    enter image description here

    根据您问题中的描述,此设计有一些关键方面:
  • 来自 City 的一对多关系至 Address .这将允许您关联许多 Address记录到单个 City记录。它还将使检索所有 Address 变得简单。已为任何 City 输入的记录.
  • Address之间的关系和 City说对于每个 Address , City必须存在。这意味着当用户输入 Address ,您必须采取以下措施: 1 - 检查 CityAddress已经存在于数据库中。 2 - 如果 City确实存在,检索其 ID并将其用作外键 City-ID存储新 Address 时的值. 3 - 如果 City不存在,新的唯一ID必须为 City 创建和 City必须存储在数据库中。然后是IDCity可以用作外键 City-ID存储 Address 时的值.确保每个 Address有一个关联的 City回答您在问题 #3 中提出的问题之一:如何使用“MyCity”键找到第一个用户的结果:“MyCity, MyStreet 12”? 因为当您存储“MyCity, MyStreet 12”时Adress记录,您确保 City 中存在“MyCity”记录 table 。检索 IDCity如果另一个用户输入相同的 City 则很简单或 Address与相同的 City 相关联由用户将来输入。
  • City之间的关系和 Address说对于任何 City可能有零个或多个关联 Address记录。这可确保您描述中的用户只搜索 City可以存储 City即使没有后续 Address进行搜索。 City被存储,它有一个 ID ,它只是在等待任何新的 Address以后可能会添加的记录。

  • 最后,作为问题 3 的一部分,您又问了一个问题:如何仅使用 ID 检查完整地址是否属于该城市? 能够回答这个问题就是为什么会有外键City-ID这是每个 Address 的一部分记录。它清楚地定义了 City与任何 Address 相关联的.所以如果你有 ID对于 CityID对于 Address ,确定它们是否匹配的最简单方法是: 1 - 检索 Address从数据库使用 Address ID . 2 - 比较 City-ID值是 Address 的一部分这是刚刚从数据库中检索到的 IDCity你开始了;如果它们匹配,您就知道 AddressCity 相关联如果它们不匹配,您可以确定 Address 之间没有任何关系。还有那个City .

    我不完全确定您要通过地址和城市实现什么目标,但我已尝试为您提供一个可靠的解决方案,其中涵盖了您在问题中描述的内容。我包含了很多细节,以便解决您的所有观点,并希望它能使我的描述清晰易懂。我希望这可以帮助你 -

    关于javascript - Google Places API - 使用城市查找地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10463286/

    相关文章:

    javascript - 通过可见性隐藏和显示元素 :hidden/visible

    javascript - 如何读取具有 "4 byte single"/浮点/IEEE 754 编码数据中的二进制数据的 ArrayBuffer?

    android - Android 版 Google map 上的自定义相机动画

    javascript - 您已在此页面上多次包含 Google Maps JavaScript API。这可能会导致意外错误。使用 $.getScript() 调用时

    javascript - HTML 和谷歌地图玩得不好

    javascript - 是否可以通过按钮上的 javascript 发送电子邮件?

    javascript - SlideOut 后下拉菜单 chop

    google-maps - 仅列出城市名称 Geocomplete.js 或 Google Location Autocomplete

    Android 添加到用户注视的位置(谷歌地图)

    google-places-api - Google Places API类型功能。