0

私はトラッカーを自作しましたが、セキュリティ上の理由から自分自身に与えた仕様の一部として、夜通し車をどこに置いたかを他人に知られたくありません。

だから私は除外ゾーンの概念を持っています.Webマップには除外ゾーン外のデータのみが表示されていますが、送信されたときに除外ゾーン内にないデータのみを保存したい(複数存在する可能性があるため、サブクエリを考えています)

誰でも助けることができますか?

これがストアドプロシージャであることが好ましくない場合でも、任意のアイデアが可能です(サブクエリに関しては役に立たないため、質問します)

したがって、データを取得するために使用しているSQL(遡及的除外ゾーン)は

SELECT geom 
FROM public.data 
WHERE layer = %layer_id% and not exists(
     SELECT * 
     FROM public.exclusion_zone 
     WHERE layer = %layer_id% and ST_CONTAINS(the_geom, geom))
4

1 に答える 1

1

たとえば、次のコードは からすべてのジオメトリ (ポイントなど) を返しますが、これらは からpublic.dataのジオメトリ (ポリゴンなど) の中に完全には含まれていませんpublic.exclusion_zone

SELECT *
FROM public.data 
WHERE the_geom NOT IN (
    SELECT d.the_geom 
    FROM public.data d, public.exclusion_zone e
    WHERE ST_Within (d.the_geom, e.the_geom)
);

またはさらに優れています (整数 ID を使用した操作は、ジオメトリを比較するよりも高速であると仮定します):

SELECT * FROM public.data
WHERE id NOT IN (
    SELECT d.id 
    FROM public.data d, public.exclusion_zone e
    WHERE ST_Within (d.the_geom, e.the_geom)
);

もっと見る:ST_Within

于 2013-10-31T03:26:26.173 に答える