powershell - Google Maps API 准确访问未命名的键
问题描述
因此,我使用了一个包含大约 5,000 个地址的电子表格,并将其从 Google Maps Geolocation API 发送出去,以获取经纬度以及格式化的地址值,因为这里很多都是速记的。
我遇到的问题是他们没有使用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
我想要的,但在示例 2address_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
}
解决方案
您可以根据类型进行过滤:
$StreetNumber = $z.Where({$_.types -contains 'street_number'})
然后在您的$store
哈希表中,您可以使用点符号来提取值
$store = @{
...
StreetNum = $StreetNumber.short_name
...
}
推荐阅读
- java - 将 RecyclerView 中单击的正确项目位置返回到另一个活动
- html - 无法在 IE11 上输入表单输入
- php - 检查包含多个数据类型的解压缩二进制数据的正确性
- git - Gitlab CI:git pull 无法正常工作(无限循环)
- c# - 使用 Json 对象的 C# HttpClient Post 失败
- c# - 实体框架和菱形连接
- linux - Git 成功暂存文件但未能提交文件
- special-characters - Mosaic 是否处理表名和列名中的特殊字符?
- python - 在 Python 中的窗口 apache 束作业上添加异常处理
- filter - Elasticsearch 6.7 - 如何过滤必须包含给定数组项的嵌套数组字段