Я не получаю результаты, которые я хочу получить из моего запроса - PullRequest
1 голос
/ 04 июля 2019

У меня есть две таблицы с именами 'District' и 'SensorData'.Из этих двух таблиц я хочу узнать, какие точки из таблицы «SensorData» находятся внутри полигонов «District».

Я написал этот запрос для получения желаемых результатов:

SELECT combined_sensor_data.point_geom, district.geom_pol
FROM combined_sensor_data, district
WHERE ST_Within(district.geom_pol, combined_sensor_data.point_geom);

, но, к сожалению, я не получаю баллов ни в одном районе.Что я точно знаю, что это неправильный результат.Итак, я предполагаю, что у меня есть ошибка в моем запросе.Поэтому я спрашиваю, что может быть не так в моем запросе?

Ответы [ 3 ]

1 голос
/ 04 июля 2019

Вы можете попробовать изменить порядок аргументов:

SELECT combined_sensor_data.point_geom, district.geom_pol
FROM combined_sensor_data
JOIN district
  ON ST_Within(combined_sensor_data.point_geom, district.geom_pol);
0 голосов
/ 06 июля 2019

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

SELECT combined_sensor_data.point_geom, district.geom_pol
            bool_or((ST_Contains(T2.geom_pol, T1.point_geom) OR ST_Overlaps(T1.point_geom,T2.geom_pol))) AS my_bool
            FROM combined_sensor_data AS T1
                CROSS JOIN district AS T2 WHERE my_bool is true
                GROUP BY combined_sensor_data.point_geom, district.geom_pol
0 голосов
/ 05 июля 2019

Насколько я понимаю ваш вопрос, кажется, вы хотите проверить, есть ли в таблице2 («Район») те же точки данных, что и в таблице1 («Данные датчика»).

Вы можете использоватьPostgreSQL СУЩЕСТВУЕТ для этого:

select combined_sensor_data.point_geom from combined_sensor_data sd 
where exists (select 1 from district d where d.geom_pol=sd.point_geom)
...