Hoe kan ik zoeken naar alle records binnen het lengte-/breedtegebied?

Ik ben op zoek naar een MySQL-query die alle records binnen een bepaald deel van de wereld vindt. Elke record bevat een punt (lat/lon) en ik heb de rechterbovenhoek (lat/lon) en de linkeronderhoek (lat/lon) van het opgegeven gebied.

Met deze informatie, hoe kan ik de juiste records vinden?

3
Kun je beschrijven [tabelnaam]; en de uitvoer van de tabelstructuur posten?
toegevoegd de auteur p.matsinopoulos, de bron
Als het gebied ALTIJD een eenvoudige rechthoek/doos is? Whetstone plaatste daar het eenvoudige antwoord voor. ALS het gecompliceerder is, hebt u misschien deze dev.mysql.com nodig /doc/refman/5.0/en/spatial-extensions.html .
toegevoegd de auteur nafisto, de bron

2 antwoord

LAT1 = MIN (lat linksboven, linksonder lat)

LAT2 = MAX (lat linksboven, linksonder lat)

LON1 = MIN (hoogste rechts lon, linksonder lon)

LON2 = MAX (rechterboven lon, linksonder lon)

SELECT fields
FROM points
WHERE lat BETWEEN LAT1 AND LAT2
AND lon BETWEEN LON1 AND LON2

Op deze manier zou de query moeten werken als je met je doos de Prime Meridian of de evenaar oversteekt.

Als u de 180ste meridiaan (of antimeridiaan) wilt gebruiken, moet u de rechterrijstrook vergelijken met de linkerarm, controleren of het juiste aantal negatief is en het linkergedeelte positief is. Als dat zo is, dan ben je de 180ste meridiaan overgestoken. Uw zoekopdracht zou er dan ongeveer zo uit moeten zien:

SELECT fields
FROM points
WHERE lat BETWEEN LAT1 AND LAT2
AND (lon BETWEEN LON1 AND -180 OR lon BETWEEN LON2 AND 180)

Ik denk er liever niet aan om een ​​doos die op de boven- of onderkant van de planeet zit over een van de ware polen te houden. =)

6
toegevoegd
dat zou de Anti-Meridian niet aan. De Prime en evenaar zijn eenvoudige. Hoe ga je met Anti om?
toegevoegd de auteur JT703, de bron
Goed. Ik wil jou ook niet. Bedankt voor de bewerking.
toegevoegd de auteur JT703, de bron
Behandelt dit handvat een lengtegraad van meer dan 0 graden? (ie Londen, Engeland) of gaat dit goed?
toegevoegd de auteur NickG, de bron
Ik doe er geen voor het bedekken van een van de palen. : P
toegevoegd de auteur Crontab, de bron
@TreyA: nee, het zou niet werken in het geval dat je het noemde, maar de OP gaf ons alleen de punten rechtsboven en linksonder zodat het hoogstwaarschijnlijk slechts een rechthoek is.
toegevoegd de auteur Crontab, de bron
Leuk antwoord, maar hoe kan ik zoeken op 4 breedtegraad en lengtegraad?
toegevoegd de auteur harsh4u, de bron
Ik denk niet dat dit zal werken als het vak niet op de lengtegraad is uitgelijnd (stel je een diamant voor rond de stad NY). Over het algemeen moet u een projectie gebruiken en vervolgens het punt in polygoontest .
toegevoegd de auteur TreyA, de bron
Ja, ik herlas dat de bovenste en onderste hoeken zijn gegeven. Ik word nog steeds nerveus als ik lineaire vakken zie die worden beschreven door lat/lon;)
toegevoegd de auteur TreyA, de bron

Zoek naar alle punten die kleiner zijn dan de rechterrand en groter zijn dan de linkerrand, die kleiner is dan de onderrand en groter is dan de bovenrand.

Point at 4,4 and your top right is (5,5) and bottom left is (3,3) - 3<4<5 for x and 3<4<5 for y. You've got a match.

1
toegevoegd
Leg alsjeblieft je downvotes uit, het helpt niemand (inclusief ik) als je geen uitleg achterlaat.
toegevoegd de auteur Whetstone, de bron