From e93a8fb54a378e13665cf579dc4d1c576b877602 Mon Sep 17 00:00:00 2001 From: dieghernan Date: Wed, 26 Jun 2024 12:26:23 +0000 Subject: [PATCH] Don't convert to integer --- CITATION.cff | 4 +- DESCRIPTION | 2 +- NEWS.md | 6 + R/geo_address_lookup.R | 3 +- R/geo_address_lookup_sf.R | 3 +- R/geo_lite_sf.R | 2 +- R/reverse_geo_lite_sf.R | 2 +- README.md | 5 +- codemeta.json | 6 +- data/osm_amenities.rda | Bin 6521 -> 6125 bytes inst/schemaorg.json | 4 +- man/figures/README-line-object-1.png | Bin 9197 -> 9158 bytes man/figures/README-pizzahut-1.png | Bin 8721 -> 8754 bytes man/figures/README-statue_liberty-1.png | Bin 8941 -> 8965 bytes tests/testthat/test-geo_address_lookup.R | 30 ++ tests/testthat/test-geo_address_lookup_sf.R | 30 ++ vignettes/nominatimlite.Rmd | 328 ++++++++++---------- 17 files changed, 246 insertions(+), 179 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index f76f7698..df7f23e0 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -8,7 +8,7 @@ message: 'To cite package "nominatimlite" in publications use:' type: software license: MIT title: 'nominatimlite: Interface with ''Nominatim'' API Service' -version: 0.4.0 +version: 0.4.0.9000 doi: 10.32614/CRAN.package.nominatimlite abstract: Lite interface for getting data from 'OSM' service 'Nominatim' . Extract coordinates from addresses, find places near a set of coordinates and return @@ -28,7 +28,7 @@ preferred-citation: orcid: https://orcid.org/0000-0001-8457-4658 doi: 10.32614/CRAN.package.nominatimlite year: '2024' - version: 0.4.0 + version: 0.4.0.9000 url: https://dieghernan.github.io/nominatimlite/ abstract: Lite interface for getting data from OSM service Nominatim . Extract coordinates from addresses, find places near a set of coordinates and diff --git a/DESCRIPTION b/DESCRIPTION index e41a13a7..cd4db62b 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Type: Package Package: nominatimlite Title: Interface with 'Nominatim' API Service -Version: 0.4.0 +Version: 0.4.0.9000 Authors@R: c( person("Diego", "Hernangómez", , "diego.hernangomezherrero@gmail.com", role = c("aut", "cre", "cph"), comment = c(ORCID = "0000-0001-8457-4658")), diff --git a/NEWS.md b/NEWS.md index 6b41e26e..c5a50516 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,9 @@ +# nominatimlite (development version) + +- Fix input validation in `geo_address_lookup()` and `geo_address_lookup_sf()` + that crashes the function if the OSM ID is too long (#47 reported by + \@lshydro). + # nominatimlite 0.4.0 - New functions: diff --git a/R/geo_address_lookup.R b/R/geo_address_lookup.R index f2469648..11a5156f 100644 --- a/R/geo_address_lookup.R +++ b/R/geo_address_lookup.R @@ -59,7 +59,8 @@ geo_address_lookup <- function(osm_ids, api <- prepare_api_url(nominatim_server, "lookup?") # Prepare nodes - osm_ids <- as.integer(osm_ids) + osm_ids <- as.numeric(osm_ids) + osm_ids <- floor(abs(osm_ids)) type <- as.character(type) nodes <- paste0(type, osm_ids, collapse = ",") diff --git a/R/geo_address_lookup_sf.R b/R/geo_address_lookup_sf.R index 6dc4ef68..5ca19701 100644 --- a/R/geo_address_lookup_sf.R +++ b/R/geo_address_lookup_sf.R @@ -74,7 +74,8 @@ geo_address_lookup_sf <- function(osm_ids, api <- prepare_api_url(nominatim_server, "lookup?") # Prepare nodes - osm_ids <- as.integer(osm_ids) + osm_ids <- as.numeric(osm_ids) + osm_ids <- floor(abs(osm_ids)) type <- as.character(type) nodes <- paste0(type, osm_ids, collapse = ",") diff --git a/R/geo_lite_sf.R b/R/geo_lite_sf.R index b95bbf0a..ea80586e 100644 --- a/R/geo_lite_sf.R +++ b/R/geo_lite_sf.R @@ -150,7 +150,7 @@ geo_lite_sf <- function(address, getrows <- dplyr::left_join(init_key, template, by = "query") # Select rows - all_res <- all_res[as.integer(getrows$rindex), ] + all_res <- all_res[as.double(getrows$rindex), ] all_res <- sf_to_tbl(all_res) } diff --git a/R/reverse_geo_lite_sf.R b/R/reverse_geo_lite_sf.R index 02387d4f..bd5b85bc 100644 --- a/R/reverse_geo_lite_sf.R +++ b/R/reverse_geo_lite_sf.R @@ -162,7 +162,7 @@ reverse_geo_lite_sf <- function(lat, )) # Select rows - all_res <- all_res[as.integer(getrows$rindex), ] + all_res <- all_res[as.double(getrows$rindex), ] } # Final cleanup diff --git a/README.md b/README.md index c2aca6ec..a7fb0fa5 100644 --- a/README.md +++ b/README.md @@ -217,15 +217,14 @@ A BibTeX entry for LaTeX users is doi = {10.32614/CRAN.package.nominatimlite}, author = {Diego Hernangómez}, year = {2024}, - version = {0.4.0}, + version = {0.4.0.9000}, url = {https://dieghernan.github.io/nominatimlite/}, abstract = {Lite interface for getting data from OSM service Nominatim . Extract coordinates from addresses, find places near a set of coordinates and return spatial objects on sf format.}, } ## References -
+
diff --git a/codemeta.json b/codemeta.json index 2a7d8c7f..73597fac 100644 --- a/codemeta.json +++ b/codemeta.json @@ -8,13 +8,13 @@ "codeRepository": "https://github.com/dieghernan/nominatimlite", "issueTracker": "https://github.com/dieghernan/nominatimlite/issues", "license": "https://spdx.org/licenses/MIT", - "version": "0.4.0", + "version": "0.4.0.9000", "programmingLanguage": { "@type": "ComputerLanguage", "name": "R", "url": "https://r-project.org" }, - "runtimePlatform": "R version 4.4.0 (2024-04-24 ucrt)", + "runtimePlatform": "R version 4.4.1 (2024-06-14)", "provider": { "@id": "https://cran.r-project.org", "@type": "Organization", @@ -220,7 +220,7 @@ }, "applicationCategory": "cartography", "keywords": ["r", "geocoding", "openstreetmap", "address", "nominatim", "reverse-geocoding", "rstats", "shapefile", "r-package", "spatial", "cran", "api-wrapper", "api", "gis"], - "fileSize": "250.978KB", + "fileSize": "245.448KB", "citation": [ { "@type": "SoftwareSourceCode", diff --git a/data/osm_amenities.rda b/data/osm_amenities.rda index eaecd91d731eba3065384a473848494834b2e7cc..eab4502547335302899dfaba4aecf5d789dcdc41 100644 GIT binary patch literal 6125 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 literal 6521 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 B;2!`0 diff --git a/man/figures/README-pizzahut-1.png b/man/figures/README-pizzahut-1.png index 1e87258fccab0a69a75be67fe41f335e1a8bb799..e3e0b6ba63f235245688a575faa019cc16b5a560 100644 GIT binary patch literal 8754 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 GLH`H60@2C< diff --git a/man/figures/README-statue_liberty-1.png b/man/figures/README-statue_liberty-1.png index 6dc7fe45236c5beaecaf6a7446e2aee5a4560b10..be12c007d4c7625bbb246da768590c7c6ac7382b 100644 GIT binary patch literal 8965 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 literal 8941 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 diff --git a/tests/testthat/test-geo_address_lookup.R b/tests/testthat/test-geo_address_lookup.R index 4f02d342..da2c887a 100644 --- a/tests/testthat/test-geo_address_lookup.R +++ b/tests/testthat/test-geo_address_lookup.R @@ -142,3 +142,33 @@ test_that("Fail", { expect_true(all(is.na(several[, 2:3]))) }) + + +test_that("Integers #47", { + skip_on_cran() + skip_if_api_server() + skip_if_offline() + + + vector_ids <- "9743343761" + + several <- geo_address_lookup(vector_ids) + + # IDs should have the right string + comp <- unique(gsub("[^0-9]", "", several$query)) + + expect_identical(vector_ids, comp) + + + # With decimals + vector_ids2 <- 9743343761.34 + several <- geo_address_lookup(vector_ids2) + + expect_identical(vector_ids, comp) + + # With negatives + vector_ids3 <- -1 * vector_ids2 + several <- geo_address_lookup(vector_ids3) + + expect_identical(vector_ids, comp) +}) diff --git a/tests/testthat/test-geo_address_lookup_sf.R b/tests/testthat/test-geo_address_lookup_sf.R index d952a341..c7b5d372 100644 --- a/tests/testthat/test-geo_address_lookup_sf.R +++ b/tests/testthat/test-geo_address_lookup_sf.R @@ -127,3 +127,33 @@ test_that("Fail", { expect_true(all(sf::st_is_empty(several))) }) + + +test_that("Integers #47", { + skip_on_cran() + skip_if_api_server() + skip_if_offline() + + + vector_ids <- "9743343761" + + several <- geo_address_lookup_sf(vector_ids) + + # IDs should have the right string + comp <- unique(gsub("[^0-9]", "", several$query)) + + expect_identical(vector_ids, comp) + + + # With decimals + vector_ids2 <- 9743343761.34 + several <- geo_address_lookup_sf(vector_ids2) + + expect_identical(vector_ids, comp) + + # With negatives + vector_ids3 <- -1 * vector_ids2 + several <- geo_address_lookup_sf(vector_ids3) + + expect_identical(vector_ids, comp) +}) diff --git a/vignettes/nominatimlite.Rmd b/vignettes/nominatimlite.Rmd index f02e69df..f5574807 100644 --- a/vignettes/nominatimlite.Rmd +++ b/vignettes/nominatimlite.Rmd @@ -1,164 +1,164 @@ ---- -title: "Get started with nominatimlite" -output: rmarkdown::html_vignette -desc: > - Quick examples showing what **nominatimlite** can do for you. -vignette: > - %\VignetteIndexEntry{Get started with nominatimlite} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} -bibliography: references.bib -link-citations: true ---- - - - - - -The goal of **nominatimlite** is to provide a light interface for geocoding -addresses, based on the [Nominatim -API](https://nominatim.org/release-docs/latest/). It also allows to load spatial -objects using the **sf** package. - -Full site with examples and vignettes on - - -## What is Nominatim? - -**Nominatim** is a tool to search -[OpenStreetMap](https://www.openstreetmap.org/) data by name and address -([geocoding](https://wiki.openstreetmap.org/wiki/Geocoding "Geocoding")) and to -generate synthetic addresses of OSM points (reverse geocoding). - -## Why **nominatimlite**? - -The main goal of **nominatimlite** is to access the Nominatim API avoiding the -dependency on **curl**. In some situations, **curl** may not be available or -accessible, so **nominatimlite** uses base functions to overcome this -limitation. - -## Recommended packages - -There are other packages much more complete and mature than **nominatimlite**, -that presents similar features: - -- [**tidygeocoder**](https://jessecambon.github.io/tidygeocoder/) - [@R-tidygeocoder]: Allows to interface with Nominatim, Google, TomTom, - Mapbox, etc. for geocoding and reverse geocoding. -- [**osmdata**](https://docs.ropensci.org/osmdata/) [@R-osmdata]: Great for - downloading spatial data from OpenStreetMap, via the [Overpass - API](https://wiki.openstreetmap.org/wiki/Overpass_API). -- [**arcgeocoder**](https://dieghernan.github.io/arcgeocoder/) - [@R-arcgeocoder]: Lite interface for geocoding with the ArcGIS REST API - Service. - -## Usage - -### `sf` objects - -With **nominatimlite** you can extract spatial objects easily: - - -``` r -library(nominatimlite) - -# Extract some points - Pizza Hut in California - -CA <- geo_lite_sf("California", points_only = FALSE) - -pizzahut <- geo_lite_sf("Pizza Hut, California", - limit = 50, - custom_query = list(countrycodes = "us") -) - -library(ggplot2) - -ggplot(CA) + - geom_sf() + - geom_sf(data = pizzahut, col = "red") -``` - -![Pizza Hut in California](../man/figures/README-pizzahut-1.png){width="100%"} - -You can also extract polygon and line objects (if available) using the option -`points_only = FALSE`: - - -``` r -sol_poly <- geo_lite_sf("Statue of Liberty, NY, USA", points_only = FALSE) - -ggplot(sol_poly) + - geom_sf() -``` - -![The Statue of -Liberty](../man/figures/README-statue_liberty-1.png){width="100%"} - -### Geocoding and reverse geocoding - -*Note: examples adapted from **tidygeocoder** package* - -In this first example we will geocode a few addresses using the `geo_lite()` -function: - - -``` r -library(tibble) - -# create a dataframe with addresses -some_addresses <- tribble( - ~name, ~addr, - "White House", "1600 Pennsylvania Ave NW, Washington, DC", - "Transamerica Pyramid", "600 Montgomery St, San Francisco, CA 94111", - "Willis Tower", "233 S Wacker Dr, Chicago, IL 60606" -) - -# geocode the addresses -lat_longs <- geo_lite(some_addresses$addr, lat = "latitude", long = "longitude") -#> | | | 0% | |================= | 33% | |================================= | 67% | |==================================================| 100% -``` - -Only latitude and longitude are returned from the geocoder service in this -example, but `full_results = TRUE` can be used to return all of the data from -the geocoder service. - - - -|query | latitude| longitude|address | -|:------------------------------------------|--------:|----------:|:-----------------------------------------------------------------------------------------------------------------| -|1600 Pennsylvania Ave NW, Washington, DC | 38.89770| -77.03655|White House, 1600, Pennsylvania Avenue Northwest, Ward 2, Washington, District of Columbia, 20500, United States | -|600 Montgomery St, San Francisco, CA 94111 | 37.79520| -122.40279|Transamerica Pyramid, 600, Montgomery Street, Financial District, San Francisco, California, 94111, United States | -|233 S Wacker Dr, Chicago, IL 60606 | 41.87874| -87.63596|Willis Tower, 233, South Wacker Drive, Printer's Row, Loop, Chicago, Cook County, Illinois, 60606, United States | - - - -To perform reverse geocoding (obtaining addresses from geographic coordinates), -we can use the `reverse_geo_lite()` function. The arguments are similar to the -`geo_lite()` function, but now we specify the input data columns with the `lat` -and `long` arguments. The dataset used here is from the geocoder query above. -The single line address is returned in a column named by the `address`. - - -``` r -reverse <- reverse_geo_lite( - lat = lat_longs$latitude, long = lat_longs$longitude, - address = "address_found" -) -#> | | | 0% | |================= | 33% | |================================= | 67% | |==================================================| 100% -``` - - - -|address_found | lat| lon| -|:-----------------------------------------------------------------------------------------------------------------------------------|--------:|----------:| -|Zastava Sjedinjenih Američkih Država, Pennsylvania Avenue Northwest, Ward 2, Washington, District of Columbia, 20006, United States | 38.89772| -77.03655| -|Transamerica Pyramid, 600, Montgomery Street, Financial District, San Francisco, California, 94111, United States | 37.79520| -122.40279| -|Willis Tower, 233, South Wacker Drive, Printer's Row, Loop, Chicago, Cook County, Illinois, 60606, United States | 41.87874| -87.63596| - - - -For more advance users, see [Nominatim -docs](https://nominatim.org/release-docs/latest/api/Search/) to check the -parameters available. - -## References +--- +title: "Get started with nominatimlite" +output: rmarkdown::html_vignette +desc: > + Quick examples showing what **nominatimlite** can do for you. +vignette: > + %\VignetteIndexEntry{Get started with nominatimlite} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +bibliography: references.bib +link-citations: true +--- + + + + + +The goal of **nominatimlite** is to provide a light interface for geocoding +addresses, based on the [Nominatim +API](https://nominatim.org/release-docs/latest/). It also allows to load spatial +objects using the **sf** package. + +Full site with examples and vignettes on + + +## What is Nominatim? + +**Nominatim** is a tool to search +[OpenStreetMap](https://www.openstreetmap.org/) data by name and address +([geocoding](https://wiki.openstreetmap.org/wiki/Geocoding "Geocoding")) and to +generate synthetic addresses of OSM points (reverse geocoding). + +## Why **nominatimlite**? + +The main goal of **nominatimlite** is to access the Nominatim API avoiding the +dependency on **curl**. In some situations, **curl** may not be available or +accessible, so **nominatimlite** uses base functions to overcome this +limitation. + +## Recommended packages + +There are other packages much more complete and mature than **nominatimlite**, +that presents similar features: + +- [**tidygeocoder**](https://jessecambon.github.io/tidygeocoder/) + [@R-tidygeocoder]: Allows to interface with Nominatim, Google, TomTom, + Mapbox, etc. for geocoding and reverse geocoding. +- [**osmdata**](https://docs.ropensci.org/osmdata/) [@R-osmdata]: Great for + downloading spatial data from OpenStreetMap, via the [Overpass + API](https://wiki.openstreetmap.org/wiki/Overpass_API). +- [**arcgeocoder**](https://dieghernan.github.io/arcgeocoder/) + [@R-arcgeocoder]: Lite interface for geocoding with the ArcGIS REST API + Service. + +## Usage + +### `sf` objects + +With **nominatimlite** you can extract spatial objects easily: + + +``` r +library(nominatimlite) + +# Extract some points - Pizza Hut in California + +CA <- geo_lite_sf("California", points_only = FALSE) + +pizzahut <- geo_lite_sf("Pizza Hut, California", + limit = 50, + custom_query = list(countrycodes = "us") +) + +library(ggplot2) + +ggplot(CA) + + geom_sf() + + geom_sf(data = pizzahut, col = "red") +``` + +![Pizza Hut in California](../man/figures/README-pizzahut-1.png){width="100%"} + +You can also extract polygon and line objects (if available) using the option +`points_only = FALSE`: + + +``` r +sol_poly <- geo_lite_sf("Statue of Liberty, NY, USA", points_only = FALSE) + +ggplot(sol_poly) + + geom_sf() +``` + +![The Statue of +Liberty](../man/figures/README-statue_liberty-1.png){width="100%"} + +### Geocoding and reverse geocoding + +*Note: examples adapted from **tidygeocoder** package* + +In this first example we will geocode a few addresses using the `geo_lite()` +function: + + +``` r +library(tibble) + +# create a dataframe with addresses +some_addresses <- tribble( + ~name, ~addr, + "White House", "1600 Pennsylvania Ave NW, Washington, DC", + "Transamerica Pyramid", "600 Montgomery St, San Francisco, CA 94111", + "Willis Tower", "233 S Wacker Dr, Chicago, IL 60606" +) + +# geocode the addresses +lat_longs <- geo_lite(some_addresses$addr, lat = "latitude", long = "longitude") +#> | | | 0% | |================= | 33% | |================================= | 67% | |==================================================| 100% +``` + +Only latitude and longitude are returned from the geocoder service in this +example, but `full_results = TRUE` can be used to return all of the data from +the geocoder service. + + + +|query | latitude| longitude|address | +|:------------------------------------------|--------:|----------:|:-----------------------------------------------------------------------------------------------------------------| +|1600 Pennsylvania Ave NW, Washington, DC | 38.89770| -77.03655|White House, 1600, Pennsylvania Avenue Northwest, Ward 2, Washington, District of Columbia, 20500, United States | +|600 Montgomery St, San Francisco, CA 94111 | 37.79520| -122.40279|Transamerica Pyramid, 600, Montgomery Street, Financial District, San Francisco, California, 94111, United States | +|233 S Wacker Dr, Chicago, IL 60606 | 41.87874| -87.63596|Willis Tower, 233, South Wacker Drive, Printer's Row, Loop, Chicago, Cook County, Illinois, 60606, United States | + + + +To perform reverse geocoding (obtaining addresses from geographic coordinates), +we can use the `reverse_geo_lite()` function. The arguments are similar to the +`geo_lite()` function, but now we specify the input data columns with the `lat` +and `long` arguments. The dataset used here is from the geocoder query above. +The single line address is returned in a column named by the `address`. + + +``` r +reverse <- reverse_geo_lite( + lat = lat_longs$latitude, long = lat_longs$longitude, + address = "address_found" +) +#> | | | 0% | |================= | 33% | |================================= | 67% | |==================================================| 100% +``` + + + +|address_found | lat| lon| +|:-----------------------------------------------------------------------------------------------------------------------------------|--------:|----------:| +|Zastava Sjedinjenih Američkih Država, Pennsylvania Avenue Northwest, Ward 2, Washington, District of Columbia, 20006, United States | 38.89772| -77.03655| +|Transamerica Pyramid, 600, Montgomery Street, Financial District, San Francisco, California, 94111, United States | 37.79520| -122.40279| +|Willis Tower, 233, South Wacker Drive, Printer's Row, Loop, Chicago, Cook County, Illinois, 60606, United States | 41.87874| -87.63596| + + + +For more advance users, see [Nominatim +docs](https://nominatim.org/release-docs/latest/api/Search/) to check the +parameters available. + +## References