1

次のネイティブ SQL クエリを使用して、ポリゴン内にあるサイトを取得しています。そして、サイトIDの数を教えてくれます。

SELECT s.siteID from Sites s where st_contains( (SELECT polygon from Region where RegionId=9 ) , point( s.latitude,s.longitude ) )=1 ;

しかし、教義で同じことをしていると、空の配列が得られます。

$queryBuilder = $this->createQueryBuilder('s');
    $queryBuilder
        ->where('ST_Contains( :polygon, point(s.latitude, s.longitude) ) = 1')
        ->setParameter('polygon', $region->getPolygon()); 
    print_r($queryBuilder->getQuery()->getResult());

$region->getPolygon() 次の出力が得られます

CrEOF\Spatial\PHP\Types\Geometry\Polygon Object
(
[rings:protected] => Array
    (
        [0] => Array
            (
                [0] => Array
                    (
                        [0] => 48.806863
                        [1] => 17.050781
                    )

                [1] => Array
                    (
                        [0] => 47.813155
                        [1] => 17.116699
                    )

                [2] => Array
                    (
                        [0] => 47.457809
                        [1] => 16.765137
                    )

                [3] => Array
                    (
                        [0] => 46.920255
                        [1] => 16.237793
                    )

                [4] => Array
                    (
                        [0] => 46.664517
                        [1] => 15.666504
                    )

                [5] => Array
                    (
                        [0] => 46.589069
                        [1] => 14.47998
                    )

                [6] => Array
                    (
                        [0] => 47.249407
                        [1] => 14.282227
                    )

                [7] => Array
                    (
                        [0] => 47.635784
                        [1] => 14.677734
                    )

                [8] => Array
                    (
                        [0] => 48.210032
                        [1] => 15.578613
                    )

                [9] => Array
                    (
                        [0] => 48.618385
                        [1] => 15.864258
                    )

                [10] => Array
                    (
                        [0] => 48.748945
                        [1] => 16.721191
                    )

                [11] => Array
                    (
                        [0] => 48.806863
                        [1] => 17.050781
                    )

            )

    )

[srid:protected] => 
)
4

1 に答える 1

1

これにさらに1日費やした後、問題が見つかりました。setParameter()には 3 番目のパラメーターがあり、パラメーターのデータ型について言及できます。

->setParameter('polygon', $region->getPolygon());

ここで:polygon、データ型はポリゴンではなく文字列でした。

次の方法でそれを行うことができます。

$queryBuilder = $this->createQueryBuilder('s');
$queryBuilder
    ->where('ST_Contains( :polygon, point(s.latitude, s.longitude) ) = 1')
    ->setParameter('polygon', $region->getPolygon(), 'polygon'); 
print_r($queryBuilder->getQuery()->getResult());

データ型「ポリゴン」のキーが正確に何であるかがわからない場合。次に、print_r(Type::getTypesMap());追加されたすべてのデータ型のリストを取得するために使用します。

私の場合はそうでした

Array
(
    [array] => Doctrine\DBAL\Types\ArrayType
    [simple_array] => Doctrine\DBAL\Types\SimpleArrayType
    [json_array] => Doctrine\DBAL\Types\JsonArrayType
    [object] => Doctrine\DBAL\Types\ObjectType
    [boolean] => Doctrine\DBAL\Types\BooleanType
    [integer] => Doctrine\DBAL\Types\IntegerType
    [smallint] => Doctrine\DBAL\Types\SmallIntType
    [bigint] => Doctrine\DBAL\Types\BigIntType
    [string] => Doctrine\DBAL\Types\StringType
    [text] => Doctrine\DBAL\Types\TextType
    [datetime] => Doctrine\DBAL\Types\DateTimeType
    [datetimetz] => Doctrine\DBAL\Types\DateTimeTzType
    [date] => Doctrine\DBAL\Types\DateType
    [time] => Doctrine\DBAL\Types\TimeType
    [decimal] => Doctrine\DBAL\Types\DecimalType
    [float] => Doctrine\DBAL\Types\FloatType
    [binary] => Doctrine\DBAL\Types\BinaryType
    [blob] => Doctrine\DBAL\Types\BlobType
    [guid] => Doctrine\DBAL\Types\GuidType    
    [geometry] => CrEOF\Spatial\DBAL\Types\GeometryType
    [point] => CrEOF\Spatial\DBAL\Types\Geometry\PointType
    [polygon] => CrEOF\Spatial\DBAL\Types\Geometry\PolygonType
    [linestring] => CrEOF\Spatial\DBAL\Types\Geometry\LineStringType
)
于 2016-03-28T11:31:44.240 に答える