[FIXED] Finden Sie Long/Lat innerhalb eines Polygons mit MySQL 5.6

Ausgabe

Ich habe eine locationsTabelle 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 polyThinghabe, 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 locationsTabelle 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?

SQL-DEMO:

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';

AUSGANG
Geben Sie hier die Bildbeschreibung ein


Beantwortet von –
Juan Carlos Oropeza


Antwort geprüft von –
Marilyn (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like