Ausgabe
Ich habe eine locations
Tabelle mit vielen Zeilen von Standorten und Daten. Darin befinden sich 2 Spalten – Längengrad und Breitengrad. Ich möchte Datensätze aus dieser Tabelle finden, die in einem definierten Kartenpolygonbereich gefunden werden.
Ich habe eine zweite Tabelle, die ich gerade basierend auf einigen Tutorials erstellt polyThing
habe, die meine definierte Grenze haben …
CREATE TABLE polyThing
(
`ID` int auto_increment primary key,
`boundary` polygon not null,
`testarea` varchar(200) NOT NULL
);
INSERT INTO polyThing (boundary, testarea)
VALUES(
PolygonFromText(
'POLYGON((
-114.018522 46.855932 ,
-113.997591 46.856030 ,
-113.997447 46.848626 ,
-114.018161 46.848824 ,
-114.018522 46.855932 ))'
), 'Test Area 1'
);
Ich möchte Datensätze finden locations
, die sich innerhalb dieses definierten Polygons befinden, und ich habe ähnliche Abfragen wie diese versucht. Ich bekomme 0 Datensätze, egal was ich versuche.
SELECT *
FROM locations
WHERE ST_CONTAINS(
(SELECT boundary FROM polyThing
WHERE polyThing.testarea = 'Test Area 1')
, Point(Longitude, Latitude))
Hier ist locations
Tabelle und Daten:
CREATE TABLE `locations` (
`LocationID` int(11) NOT NULL,
`Location` varchar(200) NOT NULL,
`Longitude` varchar(200) NOT NULL,
`Latitude` varchar(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT;
INSERT INTO `locations` (`LocationID`, `Location`, `Longitude`, `Latitude`) VALUES
(1, 'In the polygon', '-114.007191', '46.853019'),
(2, 'In the polygon', '-114.003798', '46.851045'),
(3, 'Not in', '-114.016934', '46.866098');
Liebe es, einen Schubs in die richtige Richtung zu bekommen.
Lösung
Ich denke (Longitude, l.Latitude)
, sind in Standorten?
SELECT l.*, ST_CONTAINS(p.boundary, POINT(l.Longitude, l.Latitude))
FROM locations l
CROSS JOIN polyThing p;
SELECT l.*
FROM locations l
JOIN polyThing p
ON ST_CONTAINS(p.boundary, POINT(l.Longitude, l.Latitude))
AND p.testarea = 'Test Area 1';
Beantwortet von – Juan Carlos Oropeza
Antwort geprüft von – Marilyn (FixError Volunteer)