API Карт Google Точный доступ к неназванным ключам - PullRequest
0 голосов
/ 09 октября 2018

Итак, я беру электронную таблицу из примерно 5000 адресов и отправляю ее из API геолокации Карт Google, чтобы получить значения широты и долготы, а также отформатированные значения адресов, так как многие из них обозначены здесь.

Проблема, которую яу меня есть их отсутствие использования именованного keys для меня, чтобы использовать и позиции смещаются вокруг в зависимости от того, что доступно.Например, вот адрес, который является совершенно обычным:

    {
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "27502",
               "short_name" : "27502",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Antonio Parkway",
               "short_name" : "Antonio Pkwy",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Ladera Ranch",
               "short_name" : "Ladera Ranch",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Orange County",
               "short_name" : "Orange County",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "California",
               "short_name" : "CA",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "92694",
               "short_name" : "92694",
               "types" : [ "postal_code" ]
            }
         ]

Теперь, например, вот местоположение, которое находится в пределах подпремии:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "117",
               "short_name" : "117",
               "types" : [ "subpremise" ]
            },
            {
               "long_name" : "3401",
               "short_name" : "3401",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "North Miami Avenue",
               "short_name" : "N Miami Ave",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Wynwood",
               "short_name" : "Wynwood",
               "types" : [ "neighborhood", "political" ]
            },
            {
               "long_name" : "Miami",
               "short_name" : "Miami",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Miami-Dade County",
               "short_name" : "Miami-Dade County",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "Florida",
               "short_name" : "FL",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "33127",
               "short_name" : "33127",
               "types" : [ "postal_code" ]
            }
         ]

Проблема с этим заключается вВ первом случае address_components[0].short_name будет street_number, как я хочу, но в примере 2 address_components[0].short_name будет фактически номером лота.

В скриптовой манере это делает невозможным точное построение моего JSON, поскольку в некоторых областях мое значение Zip Code будет названием улицы, потому что был список дополнительных адресов.

КакВы бы порекомендовали мне противостоять этому, чтобы убедиться, что я всегда получаю именно те данные, которые запрашиваю, а не то, что происходит в тот момент в этой позиции?

Ниже приведен пример того, как это может испортить ситуацию.:

"731":  {
            "City":  "Noblesville",
            "Street":  "Norell Ln",
            "Type":  "dsg",
            "StreetNum":  "13157",
            "Zip":  "US",
            "State":  "Hamilton County",
            "Name":  "Noblesville ",
            "Region":  "Ohio Valley",
            "Long":  "-85.93149269999999",
            "StateAbr":  "Hamilton County",
            "Phone":  "3177761687",
            "Lat":  "39.9901088"
        }

Это не всегда так, возможно, 200-300 из них ошибочны, в то время как остальные верны, но догадываться и надеяться очень неэффективно.

Ради включения некоторых из моего сценария:

    $builtAddress = "$street $city $state $zip"

    Write-Verbose "Built Address: $builtAddress"

    $addressArray.Add($builtAddress) > $null

    $req = Invoke-WebRequest "https://maps.googleapis.com/maps/api/geocode/json?address=$builtAddress&key=AIzaSyDRo-UGY91_EiB2DeYzBU21-3FcaqIanPo" 
    $location = $req.Content | ConvertFrom-Json


    $lat = $location.results[0].geometry.location.lat
    $long = $location.results[0].geometry.location.lng
    $z = $location.results[0].address_components

    $name = $z.
    $phone = $phone
    $region = $region

    $objectProps = @{

    $store = @{
        Name = "$name"
        Lat = "$lat"
        Long = "$long"
        StreetNum = "$streetNum"
        Street = "$street"
        City = "$city"
        State = "$state"
        StateAbr = "$stateAb"
        Zip = "$zip"
        Phone = "$phone"
        Region = "$region"
        Type = "$type"

    }
}

Write-Verbose $store
$jsonObj = New-Object psobject -Property $objectProps | ConvertTo-Json -depth 100 | Out-File C:\Users\admin-dksc104694\Desktop\Map_Data\JSON\$outputFile -Append
Write-Output ',' | Out-File C:\Users\admin-dksc104694\Desktop\$outputFile -Append

    }

1 Ответ

0 голосов
/ 09 октября 2018

Вы можете фильтровать по типу:

$StreetNumber = $z.Where({$_.types -contains 'street_number'})

, а затем в вашей хеш-таблице $store вы можете использовать точечную запись для извлечения значения

$store = @{
    ...
    StreetNum = $StreetNumber.short_name
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...