Advertisement
Guest User

Untitled

a guest
Oct 13th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.85 KB | None | 0 0
  1. WITH city AS (
  2. SELECT
  3. layers.name as osm_name,
  4. layers.all_tags AS osm_tags,
  5. (SELECT tags.value FROM UNNEST(all_tags) as tags WHERE tags.key = 'admin_level') as admin_level,
  6. layers.geometry AS geometry
  7. FROM `openstreetmap-public-data-dev.osm_planet.osm_layers_partitions` AS layers
  8. WHERE layers.partnum = `openstreetmap-public-data-dev.osm_planet.name2partnum`('boundary-administrative')
  9. AND EXISTS(SELECT tags.value FROM UNNEST(all_tags) as tags WHERE tags.key = 'name' and tags.value='London')
  10. AND EXISTS(SELECT tags.value FROM UNNEST(all_tags) as tags WHERE tags.key = 'place' and tags.value='city')
  11. ),
  12. city_eateries AS (
  13. SELECT
  14. ST_GEOHASH(ST_CENTROID(layers.geometry)) AS eatery_geohash,
  15. layers.*
  16. FROM `openstreetmap-public-data-dev.osm_planet.osm_layers_partitions` AS layers JOIN UNNEST(all_tags) AS tags, city
  17. WHERE layers.partnum IN (
  18. `openstreetmap-public-data-dev.osm_planet.name2partnum`('amenity-biergarten'),
  19. `openstreetmap-public-data-dev.osm_planet.name2partnum`('amenity-cafe'),
  20. `openstreetmap-public-data-dev.osm_planet.name2partnum`('amenity-fast_food'),
  21. `openstreetmap-public-data-dev.osm_planet.name2partnum`('amenity-food_court'),
  22. `openstreetmap-public-data-dev.osm_planet.name2partnum`('amenity-market_place'),
  23. `openstreetmap-public-data-dev.osm_planet.name2partnum`('amenity-pub'),
  24. `openstreetmap-public-data-dev.osm_planet.name2partnum`('amenity-restaurant'),
  25. `openstreetmap-public-data-dev.osm_planet.name2partnum`('amenity-vending_machine')
  26. )
  27. AND ST_DWITHIN(city.geometry, layers.geometry, 0)
  28. -- ignore incorrect geometries with wrong orientation (see GeoJSON RFC 7946)
  29. AND ST_AREA(layers.geometry) <= 1E10
  30. ),
  31. city_eateries_agg AS (
  32. SELECT
  33. count(1) as count_eateries,
  34. -- grid cell size is equal to 0.01 x 0.01 degree
  35. ST_GEOHASH(ST_SNAPTOGRID(ST_GEOGPOINTFROMGEOHASH(eatery_geohash), 0.01)) AS geohash
  36. FROM city_eateries
  37. GROUP BY 2
  38. ),
  39. city_eateries_agg_points AS (
  40. SELECT
  41. *,
  42. ST_GEOGPOINTFROMGEOHASH(geohash) AS geometry
  43. FROM city_eateries_agg
  44. ),
  45. city_eateries_agg_cells AS (
  46. SELECT
  47. geohash,
  48. count_eateries,
  49. (SELECT
  50. ST_MAKEPOLYGON(ST_MAKELINE(ARRAY_AGG(geom)))
  51. FROM UNNEST(ARRAY[
  52. ST_GEOGPOINT(ST_X(geometry)-0.25/50, ST_Y(geometry)-0.25/50),
  53. ST_GEOGPOINT(ST_X(geometry)-0.25/50, ST_Y(geometry)+0.25/50),
  54. ST_GEOGPOINT(ST_X(geometry)+0.25/50, ST_Y(geometry)+0.25/50),
  55. ST_GEOGPOINT(ST_X(geometry)+0.25/50, ST_Y(geometry)-0.25/50)
  56. ]) as geom
  57. ) as geometry
  58. FROM city_eateries_agg_points
  59. )
  60. SELECT * FROM city_eateries_agg_cells
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement