Ich möchte DQL-Abfrage schreiben, um alle Punkte innerhalb eines Rechtecks in der Karte zu wählen. Das Rechteck wird durch den oberen linken Punkt und den unteren rechten Punkt definiert. Siehe hierzu link für weitere Details.DQL-Abfrage für geo räumliche Punkte st_within einem Rechteck
$qb = $this->em->createQueryBuilder()
->select("m")
->from($this->getEntityClassName(), "m")
->where("ST_Within(m.geom, envelope(linestring(:topleft, :bottomright)))")
->setParameter(":topleft", $topleft)
->setParameter(":bottomright", $bottomright)
->orderBy("m.date", "DESC");
Der Fehler Ich erhalte ist:
[Syntax Error] line 0, col 110: Error: Expected =, <, <=, <>, >, >=, !=, got 'ORDER'
Zu Ihrer Information, Organisation ich Abfrage bin hat ein geom Attribut wie folgt definiert
so zu tun, ich diese DQL-Abfrage geschrieben :
/**
* @var point $geom
* @ORM\Column(type="point", nullable=true)
*/
protected $geom;
Zu Ihrer Information funktioniert die SQL-Abfrage einwandfrei. Es ist wie folgt:
SELECT *FROM MotorsAds WHERE
st_within(point(lng, lat),
envelope(linestring(point(10.090792984008772,36.83717099338201),
point(10.310519546508772,36.749467295867646))))
Die Bibliothek verwende ich für DQL numerische Funktionen (wie uns st_within
) ist creof/doctrine2-spatial.
Bereit, jeden Vorschlag zu nehmen, um das zu beheben.
Danke,
Update der Frage
ich die Lösung versucht, wie folgt vorgeschlagen:
$qb = $this->em->createQueryBuilder()
->select("m")
->from($this->getEntityClassName(), "m")
->where(
$this->em->createQueryBuilder()->expr()->eq(
"ST_Within(m.geom, envelope(linestring(:topleft, :bottomright)))",
$this->em->createQueryBuilder()->expr()->literal(true)
)
)
->setParameter(":topleft", $topleft)
->setParameter(":bottomright", $bottomright)
->orderBy("m.date", "DESC");
Also habe ich ist, der Fehler:
Während der Ausführung von 'SELECT COUNT (*) AS dctrn_count FRO' ist eine Ausnahme aufgetreten M (SELECT DISTINCT id_0 VON (SELECT m0_.id AS id_0, m0_.price AS price_1, m0_.year AS Jahr_2, m0_.km AS km_3, m0_.slug AS slug_4, m0_.title AS title_5, m0_.beschreibung AS Beschreibung_6, m0_.address AS-Adresse_7, m0_.isPublished AS isPublished_8, m0_Delegation AS Delegation_9, m0_.lat AS lat_10, m0_.lng AS lng_11, m0_.date AS date_12, m0_.count AS count_13, AsBinary (m0_.geom) AS geom_14 FROM MotorsAds m0_ WHERE ST_Within (? m0_.geom, Envelope (Linestring (?,))) = 1 ORDER BY m0_.date DESC) dctrn_result) dctrn_table‘mit params [{}, {}]:
SQLSTATE- [22007]: Ungültiges Datum/Uhrzeit-Format: 1367 Illegal nicht geometrisch '' 10 .090792984009 36.837170993382 '' Wert beim Parsen gefunden
Vielen Dank @Miro für Sie zu antworten. Ich aktualisiere meine Frage. Kann ich dich kommentieren? –
Das Problem der von Ihnen vorgeschlagenen Lösung ist die Umwandlung der Punkte .... Unten ist meine Lösung. Danke @Miro wieder –
Gute Arbeit, Amin – Miro