Google maps 从google maps api中选择一个地址并显示多个结果

Google maps 从google maps api中选择一个地址并显示多个结果,google-maps,google-maps-api-3,Google Maps,Google Maps Api 3,我正在为一个项目使用谷歌地图API,该项目要求用户输入一个地址,如城镇、城市或邮政编码 我已经从谷歌获得了可以使用的结果。我面临的问题是,如果一个城镇出现在全国多个地方。例如,阿什福德(英国)在米德尔塞克斯郡和肯特郡的一个城镇工作 我如何让用户选择他们的意思?我有信心生成一个select表单,但是如果可能的话,我需要一种方法使用PHP函数来获得两个不同的县。正如您将从代码段中看到的,没有键来分隔这两个结果 请注意,我正在使用PHP 以下是谷歌给我的结果: object(stdClass)#551

我正在为一个项目使用谷歌地图API,该项目要求用户输入一个地址,如城镇、城市或邮政编码

我已经从谷歌获得了可以使用的结果。我面临的问题是,如果一个城镇出现在全国多个地方。例如,阿什福德(英国)在米德尔塞克斯郡和肯特郡的一个城镇工作

我如何让用户选择他们的意思?我有信心生成一个select表单,但是如果可能的话,我需要一种方法使用PHP函数来获得两个不同的县。正如您将从代码段中看到的,没有键来分隔这两个结果

请注意,我正在使用PHP

以下是谷歌给我的结果:

object(stdClass)#5519 (2) {
      ["results"]=>
      array(2) {
        [0]=>
        object(stdClass)#5541 (5) {
          ["address_components"]=>
          array(5) {
            [0]=>
            object(stdClass)#5546 (3) {
              ["long_name"]=>
              string(7) "Ashford"
              ["short_name"]=>
              string(7) "Ashford"
              ["types"]=>
              array(2) {
                [0]=>
                string(8) "locality"
                [1]=>
                string(9) "political"
              }
            }
            [1]=>
            object(stdClass)#5545 (3) {
              ["long_name"]=>
              string(7) "Ashford"
              ["short_name"]=>
              string(7) "Ashford"
              ["types"]=>
              array(1) {
                [0]=>
                string(11) "postal_town"
              }
            }
            [2]=>
            object(stdClass)#5544 (3) {
              ["long_name"]=>
              string(4) "Kent"
              ["short_name"]=>
              string(4) "Kent"
              ["types"]=>
              array(2) {
                [0]=>
                string(27) "administrative_area_level_2"
                [1]=>
                string(9) "political"
              }
            }
            [3]=>
            object(stdClass)#5543 (3) {
              ["long_name"]=>
              string(7) "England"
              ["short_name"]=>
              string(7) "England"
              ["types"]=>
              array(2) {
                [0]=>
                string(27) "administrative_area_level_1"
                [1]=>
                string(9) "political"
              }
            }
            [4]=>
            object(stdClass)#5542 (3) {
              ["long_name"]=>
              string(14) "United Kingdom"
              ["short_name"]=>
              string(2) "GB"
              ["types"]=>
              array(2) {
                [0]=>
                string(7) "country"
                [1]=>
                string(9) "political"
              }
            }
          }
          ["formatted_address"]=>
          string(11) "Ashford, UK"
          ["geometry"]=>
          object(stdClass)#5537 (4) {
            ["bounds"]=>
            object(stdClass)#5539 (2) {
              ["northeast"]=>
              object(stdClass)#5540 (2) {
                ["lat"]=>
                float(51.1841519)
                ["lng"]=>
                float(0.914884)
              }
              ["southwest"]=>
              object(stdClass)#5538 (2) {
                ["lat"]=>
                float(51.1228136)
                ["lng"]=>
                float(0.8276781)
              }
            }
            ["location"]=>
            object(stdClass)#5536 (2) {
              ["lat"]=>
              float(51.1464659)
              ["lng"]=>
              float(0.875019)
            }
            ["location_type"]=>
            string(11) "APPROXIMATE"
            ["viewport"]=>
            object(stdClass)#5534 (2) {
              ["northeast"]=>
              object(stdClass)#5535 (2) {
                ["lat"]=>
                float(51.1841519)
                ["lng"]=>
                float(0.914884)
              }
              ["southwest"]=>
              object(stdClass)#5533 (2) {
                ["lat"]=>
                float(51.1228136)
                ["lng"]=>
                float(0.8276781)
              }
            }
          }
          ["place_id"]=>
          string(27) "ChIJh_M23CLD3kcRHsaOYTRPDSg"
          ["types"]=>
          array(2) {
            [0]=>
            string(8) "locality"
            [1]=>
            string(9) "political"
          }
        }
        [1]=>
        object(stdClass)#5528 (5) {
          ["address_components"]=>
          array(4) {
            [0]=>
            object(stdClass)#5532 (3) {
              ["long_name"]=>
              string(7) "Ashford"
              ["short_name"]=>
              string(7) "Ashford"
              ["types"]=>
              array(2) {
                [0]=>
                string(8) "locality"
                [1]=>
                string(9) "political"
              }
            }
            [1]=>
            object(stdClass)#5531 (3) {
              ["long_name"]=>
              string(6) "Surrey"
              ["short_name"]=>
              string(6) "Surrey"
              ["types"]=>
              array(2) {
                [0]=>
                string(27) "administrative_area_level_2"
                [1]=>
                string(9) "political"
              }
            }
            [2]=>
            object(stdClass)#5530 (3) {
              ["long_name"]=>
              string(7) "England"
              ["short_name"]=>
              string(7) "England"
              ["types"]=>
              array(2) {
                [0]=>
                string(27) "administrative_area_level_1"
                [1]=>
                string(9) "political"
              }
            }
            [3]=>
            object(stdClass)#5529 (3) {
              ["long_name"]=>
              string(14) "United Kingdom"
              ["short_name"]=>
              string(2) "GB"
              ["types"]=>
              array(2) {
                [0]=>
                string(7) "country"
                [1]=>
                string(9) "political"
              }
            }
          }
          ["formatted_address"]=>
          string(11) "Ashford, UK"
          ["geometry"]=>
          object(stdClass)#5524 (4) {
            ["bounds"]=>
            object(stdClass)#5526 (2) {
              ["northeast"]=>
              object(stdClass)#5527 (2) {
                ["lat"]=>
                float(51.4399966)
                ["lng"]=>
                float(-0.4279375)
              }
              ["southwest"]=>
              object(stdClass)#5525 (2) {
                ["lat"]=>
                float(51.4208625)
                ["lng"]=>
                float(-0.4913756)
              }
            }
            ["location"]=>
            object(stdClass)#5523 (2) {
              ["lat"]=>
              float(51.4274516)
              ["lng"]=>
              float(-0.4552643)
            }
            ["location_type"]=>
            string(11) "APPROXIMATE"
            ["viewport"]=>
            object(stdClass)#5521 (2) {
              ["northeast"]=>
              object(stdClass)#5522 (2) {
                ["lat"]=>
                float(51.4399966)
                ["lng"]=>
                float(-0.4279375)
              }
              ["southwest"]=>
              object(stdClass)#5520 (2) {
                ["lat"]=>
                float(51.4208625)
                ["lng"]=>
                float(-0.4913756)
              }
            }
          }
          ["place_id"]=>
          string(27) "ChIJY_intExxdkgRVdGnlWdcKVw"
          ["types"]=>
          array(2) {
            [0]=>
            string(8) "locality"
            [1]=>
            string(9) "political"
          }
        }
      }
      ["status"]=>
      string(2) "OK"
    }
非常感谢您的帮助

正如您将从代码段中看到的,没有键来分隔这两个结果

我遗漏了一些东西:为什么您不能访问(伪代码)
[“结果”][“地址组件”][2][“长名称”]

这是区分两个结果的关键:一个是萨里,另一个是肯特

更新:错误。钥匙号码不同。

我的不好,但实际有效的方法是查找所有
response.results[0]。address\u components[i]。short\u name
其中i,b是
response.results[0]。address\u components[i]。类型[b]=“administrative\u area\u level\u 2”
。看

自白:我没有明确指出引用问题关键点的方法的原因是,每次我必须从一组结果中解析类似的东西时,我都会艰难地通过它,忘记上次我是如何做到的(“永远不要记住你可以查到的东西”,爱因斯坦说)。如果是XML,那就更容易了

萨里或肯特郡可能有两个城镇的名字相同,根据空间数据无法区分它们——但在示例数据中并非如此


自白II:当我第一次回答时,我“键入”了
行政区级别2
,作为区分的正确依据,并扫描回以查找相关节点,但只查看了第二条记录。我的错误。

因为键[2]对两个结果都不对齐。一个是钥匙2,另一个是钥匙1。真的(诅咒我愚蠢的老眼睛)。。。但是,您可以找到具有child=“administrative\u area\u level\u 2”-find all
response.results[0]。address\u components[i]。short\u name
where
i,b
s.t.
response.results[0]。address\u components[i]。类型[b]==“administrative\u area\u level\u 2”
。请参阅此答案(对于属于GeoJSON的
响应,但可以适当修改):-适当地更新了我的答案我以前尝试使用“array_search”执行类似操作,但它只会找到属于该条目的键,当然是[0]。这个答案太完美了!非常感谢你!非常感谢。