Написание SQL-запроса с использованием геометрии postgis для одной и той же таблицы

EDIT: этот ответ основан на идее, что вам нужно будет делать подобные вещи для разных объектов и разных свойств в другом месте вашего кода. Если вы только должны преобразовать список ViewValues ​​в список Longs by ID, тогда придерживайтесь своего исходного кода. Однако, если вы хотите использовать более многоразовое решение, прочитайте ...

Я бы объявил интерфейс для проекции, например

public interface Function<Arg,Result>
{
    public Result apply(Arg arg);
}

. Тогда вы можете написать одно общее преобразование method:

public <Source, Result> List<Result> convertAll(List<Source> source,
    Function<Source, Result> projection)
{
    ArrayList<Result> results = new ArrayList<Result>();
    for (Source element : source)
    {
         results.add(projection.apply(element));
    }
    return results;
}

Тогда вы можете определить простые проекции, подобные этому:

private static final Function<ViewValue, Long> ID_PROJECTION =
    new Function<ViewValue, Long>()
    {
        public Long apply(ViewValue x)
        {
            return x.getId();
        }
    };

И примените его так:

List<Long> ids = convertAll(values, ID_PROJECTION);

(Очевидно с помощью кнопок K & amp; R и более длинных строк упрощает объявление прокрутки:)

Честно говоря, все это было бы намного лучше с лямбда-выражениями, но неважно ...

0
задан beewuu 27 February 2019 в 15:11
поделиться

1 ответ

Если вы хотите, чтобы геометрия содержалась в состоянии, вы можете попробовать

select t2.* 
from  my_table t1  
inner join my_table t2 on st_dwithin(t1.geom,t2.geom, 0) 
and t1.type='State' 
and t2.type!='State' 

или для st_contains

select t2.* 
from  my_table t1  
inner join my_table t2 on st_contains(t2.geom,t1.geom) 
and t1.type='State' 
and t2.type!='State' 
0
ответ дан scaisEdge 27 February 2019 в 15:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: