google_elevation() 调用时出现 HTTP 错误 400
HTTP error 400 on google_elevation() call
我正在使用 R 包 googleway 使用 decode_pl
解码折线,然后使用 google_elevation
在相应的 lat/lon 坐标处获取高程数据。我从 Strava, using the rStrava 包中获取多段线。
折线示例:
pl1 <- "q{|aHknlv@n@Mt@IxAGb@B\Eb@AZGRG^W`AyAPQF?NHDJFZBz@FVNPn@D`@C|@DjACv@@h@Dh@Ll@Zj@^\`@fAx@j@r@d@n@\ZJPNd@NbANzAFhANb@JNLHD?PKHMRGPSr@UPMXGDGJELMFCPAbBWROpAm@h@YZe@dAaC@Of@aAb@a@t@iALg@LWNQROf@IjAJnFbAv@Dr@Aj@BpBx@fFdCd@HlAHd@Pp@b@|@d@~@j@n@R~@n@\NTCXBNEZCZKbB]rAKpDK~BO\?NCd@?`DMz@SLO`@URCR@XLRRRVHd@NXNP\RXf@JHXN\Xn@ZD@Z?\NvArA~BxA"
pl2 <- "uipaHmmcv@iBoFm@{AKQy@}B}AoDyA_CASEMGKKI]y@i@y@EOi@q@kAw@KEMAu@M]?[@WDkAZiB~@]H_@PUF]TUL_@XkAn@}CzAyAx@e@P_@JSNGROPa@Fu@[UOc@IOAu@_@WIUMIIWGu@]YEk@SoBiAc@_@gAeAg@{@]mAMq@YmBA]Oq@YuBKYUg@UQa@QiAOI@QIm@EiA[w@BSFYZ_@h@]t@o@bAOb@}@zAWn@_@jAGf@SbAKbAKXSpAS`@ICa@FSHICQ@gAHq@KSAa@I[CQ@k@KOGMKYg@aBkEs@u@k@g@_@a@{@o@W]IAYQYAsDIODc@LW\GRKn@Ch@WtAO`BCzAIj@Wh@SRc@NS@a@KaAg@kCgAm@]iBo@w@_@UQc@S}@Ww@e@MCa@Sm@Sk@WYI{@g@IIMAMIIIm@QuBaAIGu@_@SQiAqA_AmASSYIUEqAKQBm@Im@Qe@i@k@UQBSCe@NO?[FKFYBSH_ADa@GQIw@OOSKF[b@M@gAl@i@b@{@b@OLwAj@KLWRI@yBvAuAd@m@F_@@qAEk@Kc@Oi@_@_@e@oAeBc@u@SSi@]i@We@Im@Q}@k@w@_@i@a@w@a@SQ[Qy@OeCSUGg@WSOa@e@W]MK_@i@CMMWIEMWa@m@[QEIICK@QHUTe@n@ELKFa@l@u@t@WNYLYXO?IBGHc@Tc@Ja@@{@Q{@]s@a@kBq@YOcAYs@IU?_@NU@GAu@^a@LSPg@X]^YJc@h@]PKHI@w@n@]h@AXEJMTCZc@|AS`@OVg@j@_Av@{@bA"
解码正常:
decoded_pl1 <- decode_pl(pl1)
decoded_pl2 <- decode_pl(pl2)
但是当我尝试获取高程时,我在第二条折线上遇到错误,我无法真正理解它:
# This one works fine
google_elevation(decode_pl(pl1), key=gmap_key)
# This one gives HTTP error 400
google_elevation(decode_pl(pl2), key=gmap_key)
我检查了来自 decode_pl
的 lat/lon 数据,它们看起来很好。我真的无法理解它...
我对一整套坐标进行了完全相同的调用,这是唯一一个出错的调用。
2017 年 3 月 14 日更新
我已经发出 fix to the development version 以便 google_elevation()
现在接受编码折线作为参数。如果 URL 长度大于 8192 个字符,它也会发出警告。
## install the development version
devtools::install_github("SymbolixAU/googleway")
library(googleway)
api_key <- "your_api_key"
map_key <- "your_map_key" ## for plotting the lines
pl1 <- "q{|aHknlv@n@Mt@IxAGb@B\Eb@AZGRG^W`AyAPQF?NHDJFZBz@FVNPn@D`@C|@DjACv@@h@Dh@Ll@Zj@^\`@fAx@j@r@d@n@\ZJPNd@NbANzAFhANb@JNLHD?PKHMRGPSr@UPMXGDGJELMFCPAbBWROpAm@h@YZe@dAaC@Of@aAb@a@t@iALg@LWNQROf@IjAJnFbAv@Dr@Aj@BpBx@fFdCd@HlAHd@Pp@b@|@d@~@j@n@R~@n@\NTCXBNEZCZKbB]rAKpDK~BO\?NCd@?`DMz@SLO`@URCR@XLRRRVHd@NXNP\RXf@JHXN\Xn@ZD@Z?\NvArA~BxA"
pl2 <- "uipaHmmcv@iBoFm@{AKQy@}B}AoDyA_CASEMGKKI]y@i@y@EOi@q@kAw@KEMAu@M]?[@WDkAZiB~@]H_@PUF]TUL_@XkAn@}CzAyAx@e@P_@JSNGROPa@Fu@[UOc@IOAu@_@WIUMIIWGu@]YEk@SoBiAc@_@gAeAg@{@]mAMq@YmBA]Oq@YuBKYUg@UQa@QiAOI@QIm@EiA[w@BSFYZ_@h@]t@o@bAOb@}@zAWn@_@jAGf@SbAKbAKXSpAS`@ICa@FSHICQ@gAHq@KSAa@I[CQ@k@KOGMKYg@aBkEs@u@k@g@_@a@{@o@W]IAYQYAsDIODc@LW\GRKn@Ch@WtAO`BCzAIj@Wh@SRc@NS@a@KaAg@kCgAm@]iBo@w@_@UQc@S}@Ww@e@MCa@Sm@Sk@WYI{@g@IIMAMIIIm@QuBaAIGu@_@SQiAqA_AmASSYIUEqAKQBm@Im@Qe@i@k@UQBSCe@NO?[FKFYBSH_ADa@GQIw@OOSKF[b@M@gAl@i@b@{@b@OLwAj@KLWRI@yBvAuAd@m@F_@@qAEk@Kc@Oi@_@_@e@oAeBc@u@SSi@]i@We@Im@Q}@k@w@_@i@a@w@a@SQ[Qy@OeCSUGg@WSOa@e@W]MK_@i@CMMWIEMWa@m@[QEIICK@QHUTe@n@ELKFa@l@u@t@WNYLYXO?IBGHc@Tc@Ja@@{@Q{@]s@a@kBq@YOcAYs@IU?_@NU@GAu@^a@LSPg@X]^YJc@h@]PKHI@w@n@]h@AXEJMTCZc@|AS`@OVg@j@_Av@{@bA"
df_elevation <- google_elevation(polyline = pl2, key = api_key)
head(df_elevation$results)
# elevation location.lat location.lng resolution
# 1 418.8341 47.60235 9.03399 19.0879
# 2 420.8099 47.60288 9.03519 19.0879
# 3 421.0847 47.60311 9.03565 19.0879
# 4 421.1900 47.60317 9.03574 19.0879
# 5 422.5887 47.60346 9.03637 19.0879
# 6 445.3051 47.60393 9.03725 19.0879
看到我们在开发版本中,我们可以在 google 地图上绘制线条
df <- data.frame(pl = c(pl1, pl2))
google_map(key = map_key) %>%
add_polylines(data = df, polyline = "pl")
旧答案
您无意中发现了可以传入 API
的数据量限制
You may pass any number of multiple coordinates within an array or encoded polyline, as long as you don't exceed the service quotas, while still constructing a valid URL
看来你已经找到了那个极限。
如果您减少从第二条折线发送的 lat/lons 的数量,您会得到返回的结果。在您的示例中,限制为 239 对坐标。
# head(google_elevation(decode_pl(pl2)[1:239,], key=gmap_key)$results)
# elevation location.lat location.lng resolution
# 1 418.8218 47.60235 9.033990 19.0879
# 2 420.8087 47.60288 9.035190 19.0879
# 3 421.0829 47.60311 9.035649 19.0879
# 4 421.1866 47.60317 9.035740 19.0879
# 5 422.5816 47.60346 9.036369 19.0879
# 6 445.2881 47.60393 9.037250 19.0879
google_elevation(decode_pl(pl2)[1:240,], key=gmap_key)
# Error in open.connection(con, "rb") : HTTP error 400.
我已经filed this as an issue所以在下一次更新中这将通过更有用的错误来处理,或者它会自动分解data.frame
。
目前的解决方案是先解码折线,然后一次找到 data.frame 子集的高程。
我已经回到 Google Elevation API documentaition,看来您也可以将编码的多段线发送到 API;如果你能等几天,我会发布一个开发版本的修复程序,这样你就可以直接发送折线
免责声明:我是 googleway 作者
我正在使用 R 包 googleway 使用 decode_pl
解码折线,然后使用 google_elevation
在相应的 lat/lon 坐标处获取高程数据。我从 Strava, using the rStrava 包中获取多段线。
折线示例:
pl1 <- "q{|aHknlv@n@Mt@IxAGb@B\Eb@AZGRG^W`AyAPQF?NHDJFZBz@FVNPn@D`@C|@DjACv@@h@Dh@Ll@Zj@^\`@fAx@j@r@d@n@\ZJPNd@NbANzAFhANb@JNLHD?PKHMRGPSr@UPMXGDGJELMFCPAbBWROpAm@h@YZe@dAaC@Of@aAb@a@t@iALg@LWNQROf@IjAJnFbAv@Dr@Aj@BpBx@fFdCd@HlAHd@Pp@b@|@d@~@j@n@R~@n@\NTCXBNEZCZKbB]rAKpDK~BO\?NCd@?`DMz@SLO`@URCR@XLRRRVHd@NXNP\RXf@JHXN\Xn@ZD@Z?\NvArA~BxA"
pl2 <- "uipaHmmcv@iBoFm@{AKQy@}B}AoDyA_CASEMGKKI]y@i@y@EOi@q@kAw@KEMAu@M]?[@WDkAZiB~@]H_@PUF]TUL_@XkAn@}CzAyAx@e@P_@JSNGROPa@Fu@[UOc@IOAu@_@WIUMIIWGu@]YEk@SoBiAc@_@gAeAg@{@]mAMq@YmBA]Oq@YuBKYUg@UQa@QiAOI@QIm@EiA[w@BSFYZ_@h@]t@o@bAOb@}@zAWn@_@jAGf@SbAKbAKXSpAS`@ICa@FSHICQ@gAHq@KSAa@I[CQ@k@KOGMKYg@aBkEs@u@k@g@_@a@{@o@W]IAYQYAsDIODc@LW\GRKn@Ch@WtAO`BCzAIj@Wh@SRc@NS@a@KaAg@kCgAm@]iBo@w@_@UQc@S}@Ww@e@MCa@Sm@Sk@WYI{@g@IIMAMIIIm@QuBaAIGu@_@SQiAqA_AmASSYIUEqAKQBm@Im@Qe@i@k@UQBSCe@NO?[FKFYBSH_ADa@GQIw@OOSKF[b@M@gAl@i@b@{@b@OLwAj@KLWRI@yBvAuAd@m@F_@@qAEk@Kc@Oi@_@_@e@oAeBc@u@SSi@]i@We@Im@Q}@k@w@_@i@a@w@a@SQ[Qy@OeCSUGg@WSOa@e@W]MK_@i@CMMWIEMWa@m@[QEIICK@QHUTe@n@ELKFa@l@u@t@WNYLYXO?IBGHc@Tc@Ja@@{@Q{@]s@a@kBq@YOcAYs@IU?_@NU@GAu@^a@LSPg@X]^YJc@h@]PKHI@w@n@]h@AXEJMTCZc@|AS`@OVg@j@_Av@{@bA"
解码正常:
decoded_pl1 <- decode_pl(pl1)
decoded_pl2 <- decode_pl(pl2)
但是当我尝试获取高程时,我在第二条折线上遇到错误,我无法真正理解它:
# This one works fine
google_elevation(decode_pl(pl1), key=gmap_key)
# This one gives HTTP error 400
google_elevation(decode_pl(pl2), key=gmap_key)
我检查了来自 decode_pl
的 lat/lon 数据,它们看起来很好。我真的无法理解它...
我对一整套坐标进行了完全相同的调用,这是唯一一个出错的调用。
2017 年 3 月 14 日更新
我已经发出 fix to the development version 以便 google_elevation()
现在接受编码折线作为参数。如果 URL 长度大于 8192 个字符,它也会发出警告。
## install the development version
devtools::install_github("SymbolixAU/googleway")
library(googleway)
api_key <- "your_api_key"
map_key <- "your_map_key" ## for plotting the lines
pl1 <- "q{|aHknlv@n@Mt@IxAGb@B\Eb@AZGRG^W`AyAPQF?NHDJFZBz@FVNPn@D`@C|@DjACv@@h@Dh@Ll@Zj@^\`@fAx@j@r@d@n@\ZJPNd@NbANzAFhANb@JNLHD?PKHMRGPSr@UPMXGDGJELMFCPAbBWROpAm@h@YZe@dAaC@Of@aAb@a@t@iALg@LWNQROf@IjAJnFbAv@Dr@Aj@BpBx@fFdCd@HlAHd@Pp@b@|@d@~@j@n@R~@n@\NTCXBNEZCZKbB]rAKpDK~BO\?NCd@?`DMz@SLO`@URCR@XLRRRVHd@NXNP\RXf@JHXN\Xn@ZD@Z?\NvArA~BxA"
pl2 <- "uipaHmmcv@iBoFm@{AKQy@}B}AoDyA_CASEMGKKI]y@i@y@EOi@q@kAw@KEMAu@M]?[@WDkAZiB~@]H_@PUF]TUL_@XkAn@}CzAyAx@e@P_@JSNGROPa@Fu@[UOc@IOAu@_@WIUMIIWGu@]YEk@SoBiAc@_@gAeAg@{@]mAMq@YmBA]Oq@YuBKYUg@UQa@QiAOI@QIm@EiA[w@BSFYZ_@h@]t@o@bAOb@}@zAWn@_@jAGf@SbAKbAKXSpAS`@ICa@FSHICQ@gAHq@KSAa@I[CQ@k@KOGMKYg@aBkEs@u@k@g@_@a@{@o@W]IAYQYAsDIODc@LW\GRKn@Ch@WtAO`BCzAIj@Wh@SRc@NS@a@KaAg@kCgAm@]iBo@w@_@UQc@S}@Ww@e@MCa@Sm@Sk@WYI{@g@IIMAMIIIm@QuBaAIGu@_@SQiAqA_AmASSYIUEqAKQBm@Im@Qe@i@k@UQBSCe@NO?[FKFYBSH_ADa@GQIw@OOSKF[b@M@gAl@i@b@{@b@OLwAj@KLWRI@yBvAuAd@m@F_@@qAEk@Kc@Oi@_@_@e@oAeBc@u@SSi@]i@We@Im@Q}@k@w@_@i@a@w@a@SQ[Qy@OeCSUGg@WSOa@e@W]MK_@i@CMMWIEMWa@m@[QEIICK@QHUTe@n@ELKFa@l@u@t@WNYLYXO?IBGHc@Tc@Ja@@{@Q{@]s@a@kBq@YOcAYs@IU?_@NU@GAu@^a@LSPg@X]^YJc@h@]PKHI@w@n@]h@AXEJMTCZc@|AS`@OVg@j@_Av@{@bA"
df_elevation <- google_elevation(polyline = pl2, key = api_key)
head(df_elevation$results)
# elevation location.lat location.lng resolution
# 1 418.8341 47.60235 9.03399 19.0879
# 2 420.8099 47.60288 9.03519 19.0879
# 3 421.0847 47.60311 9.03565 19.0879
# 4 421.1900 47.60317 9.03574 19.0879
# 5 422.5887 47.60346 9.03637 19.0879
# 6 445.3051 47.60393 9.03725 19.0879
看到我们在开发版本中,我们可以在 google 地图上绘制线条
df <- data.frame(pl = c(pl1, pl2))
google_map(key = map_key) %>%
add_polylines(data = df, polyline = "pl")
旧答案
您无意中发现了可以传入 API
的数据量限制You may pass any number of multiple coordinates within an array or encoded polyline, as long as you don't exceed the service quotas, while still constructing a valid URL
看来你已经找到了那个极限。
如果您减少从第二条折线发送的 lat/lons 的数量,您会得到返回的结果。在您的示例中,限制为 239 对坐标。
# head(google_elevation(decode_pl(pl2)[1:239,], key=gmap_key)$results)
# elevation location.lat location.lng resolution
# 1 418.8218 47.60235 9.033990 19.0879
# 2 420.8087 47.60288 9.035190 19.0879
# 3 421.0829 47.60311 9.035649 19.0879
# 4 421.1866 47.60317 9.035740 19.0879
# 5 422.5816 47.60346 9.036369 19.0879
# 6 445.2881 47.60393 9.037250 19.0879
google_elevation(decode_pl(pl2)[1:240,], key=gmap_key)
# Error in open.connection(con, "rb") : HTTP error 400.
我已经filed this as an issue所以在下一次更新中这将通过更有用的错误来处理,或者它会自动分解data.frame
。
目前的解决方案是先解码折线,然后一次找到 data.frame 子集的高程。
我已经回到 Google Elevation API documentaition,看来您也可以将编码的多段线发送到 API;如果你能等几天,我会发布一个开发版本的修复程序,这样你就可以直接发送折线
免责声明:我是 googleway 作者