Проверка, находится ли координата в пределах диапазона - BigQuery GIS - PullRequest
0 голосов
/ 16 декабря 2018

Я смотрю на свободно доступный набор данных о солнечном потенциале в Google BigQuery, который можно найти здесь: https://bigquery.cloud.google.com/table/bigquery-public-data:sunroof_solar.solar_potential_by_censustract?pli=1&tab=schema

Каждая запись в таблице имеет следующие определения границ: lat_max - максимальная широта для этого регионаlat_min - минимальная широта для этого региона lng_max - максимальная долгота для этого региона lng_min - минимальная долгота для этого региона

Теперь у меня есть координата (пара широта / lng), и я хотел бы узнать, действительно ли этокоордината находится в вышеуказанном диапазоне.Как мне это сделать с BQ Standard SQL?

Я видел здесь функции Geo: https://cloud.google.com/bigquery/docs/reference/standard-sql/geography_functions Но я все еще не уверен, как написать этот запрос.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Согласитесь с Джонатаном, просто проверить, находится ли каждое из значений широты / долготы в пределах границ, - самый простой способ достичь этого (если только нет проблем с антимеридианом, но, скорее всего, вы можете просто игнорировать их).

Если вы хотите использовать для этого объекты Geography, вы можете создать объекты Geography для этих прямоугольников, используя

ST_MakePolygon(ST_MakeLine(
  [ST_GeogPoint(lon_min, lat_min), ST_GeogPoint(lon_max, lat_min), 
   ST_GeogPoint(lon_max, lat_max), ST_GeogPoint(lon_min, lat_max), 
   ST_GeogPoint(lon_min, lat_min)]))

, а затем проверить, находится ли точка в пределах определенного прямоугольника, используя

ST_Intersects(ST_GeogPoint(lon, lat), <polygon-above>)

Но это, скорее всего, будет медленнее и не даст никакой пользы для этого конкретного случая.

0 голосов
/ 16 декабря 2018

Если точки - это просто широта и долгота в виде чисел, почему вы не можете просто выполнить стандартное числовое сравнение?

Примечание. Первая ссылка не работает без учетной записи Google, поэтому я могу 'не вижу данных.Но если вы хотите стать пространственным, я бы посоветовал вам взять координаты границ, которые у вас есть, и превратить их в многоугольник, используя одно из: ST_MAKEPOLYGON, ST_GEOGFROMGEOJSON или ST_GEOGFROMTEXT.Затем создайте точку, используя координаты, которые вы хотите проверить ST_MAKEPOINT.

. Теперь у вас есть две географические области, которые вы можете сравнить, используя ST_INTERSECTION или ST_DISJOINT, в зависимости от того, какой результат вы хотите получить.Если вы хотите проявить фантазию и увидеть, насколько далеко вы знаете от границы (что, я думаю, означает более эффективную?), Вы можете использовать ST_DISTANCE.

...