- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在使用 googleway 包来使用 place_type 键检索信息,但我一直坚持使用 60 results limit restriction .
我正在尝试一种稍微不同的方法来解决这个限制:分而治之。在我的工作中,所有的空间分析都是使用 QGIS 进行的,并且突然出现了一个想法。在某些坐标周围创建缓冲区;假设半径为 1 公里。然后使用该缓冲区域,我应用 hex-bin tessellation 来获取一组质心坐标,这些坐标可用于使用 60 个结果的小块来完成整个区域(1km 半径)(假设使用 googleway 包进行 100mts 半径查询)。从图形上看,直觉如所附图片所示。
为了检索 60 个结果,我使用了提供的出色解决方案 here当我执行单一搜索时,一切都很好。现在我试图通过在代码的最开头添加一个 for 循环来递归地使用一组坐标,但我不起作用。我不是一个程序员(事实上,我是一个社会学家)而且我真的不知道我做错了什么。有人能给我指出正确的方向吗?
提前致谢,危地马拉致以最诚挚的问候
这里是我的纯文本坐标文件:
coords
"14.5446147628533, -90.84266666418"
"14.5538523714673, -90.84266666418"
这里是我的代码:
###Preamble packages##
library(tidyverse)
library(googleway)
### load coordinates, plain text
dfCoords <- read.csv("~/coords.txt", sep="")
##Added For-loop begin##
for (i in dfCoords$coords) {
#### Original script begin ###
place_type <- "store"
key <- c("API Key")
radius <- 100
location <- i
format_res <- function(res) {
setNames(
cbind(
googleway::access_result(res, "coordinates"),
googleway::access_result(res, "place_name")
)
, c("lat", "long", "name")
)
}
do_search <- function(place_type, key, location, radius, page_token = NULL) {
google_places(
place_type = place_type,
location = location,
key = key,
radius = radius,
page_token = page_token
)
}
full_search <- function(place_type, key, location, radius) {
counter <- 0
page_token <- NULL ## can start on NULL because it means we're doing the first query
is_another_page <- TRUE
while( is_another_page ) {
res <- do_search(place_type, key, location, radius, page_token)
if( res$status == "OK" ) { ## check a valid result was returned
if( counter == 0 ) {
df <- format_res( res )
} else {
df <- rbind(df, format_res( res ) )
}
counter <- counter + 1
}
page_token <- res[["next_page_token"]]
is_another_page <- !is.null( page_token )
Sys.sleep(3) ## Sleep the function before the next call because there's a time limit
}
return(df)
}
df <- full_search(place_type, key, location, radius)
##Original script ends
}
##Added for loop end
str( df )
最佳答案
您只需遍历位置并从循环内部调用函数(否则您将在每次迭代中创建和定义函数)
我已将 place_id
添加到 format_res()
的结果中,因此您可以获得唯一的地点 ID。在处理结果时您将需要它,因为即使您指定了 radius
,google 仍会为您提供超出此值的结果。
您需要将循环的每次迭代的结果分配给一个对象。我为此创建了一个列表 lst_results
您提供的两个示例坐标不会产生任何结果,因此我添加了一些错误处理以解决从 google 返回的 ZERO_RESULTS
。我添加了第三个坐标对来向您展示它的工作原理。
这是完整的更新代码
library(googleway)
format_res <- function(res) {
setNames(
cbind(
googleway::access_result(res, "coordinates"),
googleway::access_result(res, "place_name"),
googleway::access_result(res, "place") ## store the unique place_id as well
)
, c("lat", "long", "name", "place_id")
)
}
do_search <- function(place_type, key, location, radius, page_token = NULL) {
google_places(
place_type = place_type,
location = location,
key = key,
radius = radius,
page_token = page_token
)
}
full_search <- function(place_type, key, location, radius) {
counter <- 0
page_token <- NULL ## can start on NULL because it means we're doing the first query
is_another_page <- TRUE
## initialise a data.frame to store the results
df <- data.frame(
lat = vector("numeric", 0L)
, long = vector("numeric", 0L)
, name = vector("character", 0L)
, place_id = vector("character", 0L)
)
while( is_another_page ) {
res <- do_search(place_type, key, location, radius, page_token)
if( res$status == "OK" ) { ## check a valid result was returned
if( counter == 0 ) {
df <- format_res( res )
} else {
df <- rbind(df, format_res( res ) )
}
counter <- counter + 1
} else {
## print a message for not-OK results
print(paste0(res[["status"]], " for ", paste0(location, collapse = ", ") ))
}
page_token <- res[["next_page_token"]]
is_another_page <- !is.null( page_token )
Sys.sleep(3) ## Sleep the function before the next call because there's a time limit
}
return(df)
}
## I've added a 3rd example that actually has results
dfCoords <- data.frame(
coords = c("14.5446147628533, -90.84266666418" ,"14.5538523714673, -90.84266666418", "-37.816660, 144.967092")
)
key <- secret::get_secret("GOOGLE")
place_type <- "store"
radius <- 100
## create a list to store the results
lst_results <- vector("list", length = nrow(dfCoords))
## Using a list will be more efficient that `rbind`-ing a data.frame in each iteration
## loop through the indexes of the coordinates
## this wy we can assign the results to the correct index of the list
for (i in 1:nrow(dfCoords) ) {
location <- dfCoords[i, "coords"]
## the coordiantes must be a numeric vector
location <- as.numeric(strsplit(location, ",")[[1]])
lst_results[[ i ]] <- full_search(
place_type = place_type
, key = key
, location = location
, radius = radius
)
}
lapply(lst_results, head)
# [[1]]
# [1] lat long name
# <0 rows> (or 0-length row.names)
#
# [[2]]
# [1] lat long name
# <0 rows> (or 0-length row.names)
#
# [[3]]
# lat long name place_id
# 1 -37.81681 144.9665 StayCentral Flinders Lane Melbourne ChIJmy5Y5YxD1moRwnnrXIAiejM
# 2 -37.81601 144.9665 EB Games / ZiNG Pop Culture - Swanston Street ChIJz6n71LVC1moR-wgn04JtBjk
# 3 -37.81666 144.9668 Tiffany Pollard Jewellery ChIJ45afhLZC1moRnyg_JBIEf2o
# 4 -37.81666 144.9668 dead & buried ChIJx_udg7ZC1moR2Kw-kXTvRIw
# 5 -37.81670 144.9667 Citizen Watch Repair ChIJtW1Cx8lC1moRxJsUpo14NAY
# 6 -37.81671 144.9669 Paris in Melbourne ChIJR_J5hLZC1moRxZ7EIUb5ZQw
关于r - Google Maps Platform 最多 60 个结果限制的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72776905/
我创建了一个训练作业,我从大查询中获取数据、执行训练和部署模型。我想在这两种情况下自动开始训练: 向数据集添加了 1000 多个新行 有时间表(例如,每周一次) 我检查了 GCP Cloud Sche
我遇到以下警告: WARNING: You do not appear to have access to project [$PROJECT] or it does not exist. 在本地运行
我正在使用 Google Cloud Platform,我必须使用 java 非 Web 应用程序访问云功能,就像我尝试使用 Google Cloud Storage JSON API 从 Googl
我的问题是第三方开发人员如何通过我的身份平台登录用户?我查看了文档,但一无所获。 本质上,我想将 Identity Platform 用作 OIDC 提供者,但我不知道这是否受支持。 最佳答案 Clo
在我去这里的过去 12 个小时左右: https://console.developers.google.com/apis/credentials?project=MYPROJECTNAME 我只是得
我正在尝试创建一个 python 脚本来在 linux 机器上自动安装和配置某些程序。 我的想法是使用平台和多处理库来询问系统信息(platform.system、platform.linux_dis
我正在尝试创建没有控制台网页的 Google Cloud Platform 项目,因为我考虑创建多个项目。 因为我查了gcloud,目前只支持project describe和list。 https:
我正在使用 Google Cloud Scheduler 调用外部应用程序。 Google Cloud Scheduler 使用 OIDC 身份验证并使用服务帐户。我只能从 Google 服务帐户 U
如何在我的 Google Cloud Platform 帐户上启用 Google Authenticator 双重身份验证?我在 Web 界面中上下查看了“IAM 和管理员”,但没有看到在帐户上启用
我们在 Google Cloud 上设置了一个虚拟机,并希望能够自动或计划打开和关闭它。 我们内部有自动脚本,之后可以完成工作,到目前为止,我在 google 的文献中读到的更多与这些实例有关,但我找
我试图删除一个 GCP 项目,但不断弹出以下错误。 Lien origin You cannot delete this project because it is linked with a Dia
我从 Google Domains 购买了一个域,称为 example.com。 我已订阅 G Suite 基本版并创建了一个 admin@example.com 帐户以在 GCP 上使用,而不是我的
我构建了一个包含许多并行进程的 AI Platform 流水线。每个流程都会在 AI Platform 上启动一个训练作业,如下所示: gcloud ai-platform jobs submit t
我们正在验证函数输入时方法参数不为空,但这不适用于 Platform::String (或 Platform.String ,C# 或 C++ 之间没有区别),因为它们用空实例重载空字符串的语义。 考
这个问题比我想来这里的问题要简单一些,但我一直在努力寻找答案,但我绝对不能—— 谷歌云平台 HTTP 函数是否支持路由参数,如此处? http://expressjs.com/en/guide/rou
我正在使用 Kubernetes,我正在尝试创建一个 ingress resource .我使用以下方法创建它: $ kubectl create -f my-ingress.yaml 我等了一会儿,
我是 Google Cloud 的新手,所以我希望得到一些有关“组织”的指导。 我可以将项目从一个“组织”转移到另一个“组织”吗?我正在我的个人 GSuite 组织下启动一些项目,但我必须将它们转移到
在 GET 操作中,我想从返回的集合中排除具有等于“true”的“存档”字段的实体。 我希望这是我的端点(如/users 或/companies)的默认设置,并且我想避免手动添加 URL 过滤器,如
实例模板对于创建托管实例组至关重要。事实上,托管实例组对于在 GCP 中创建自动扩缩组至关重要。 这个问题是另一个问题 question's answer 的一部分,这是关于构建一个自动缩放和负载平衡
我正在将 GCP 用于多个相同的项目。对于每个新项目我都需要一个1 个 GPU 的配额(Tesla K80)。为了申请增加我的GPU配额,我打开console并导航至“IAM 和管理”>“配额”。我在
我是一名优秀的程序员,十分优秀!