Sziasztok!
Előfordulhat, hogy a dolognak pofonegyszerű megoldása van, sajnos pár éve már nem használtam koordináta-geometriát, így semmi használható nem jut eszembe. A probléma:
Adott egy térkép szerű ábra (az arányok kb stimmelnek, de van pl. perspektívája a képnek, a valóságban párhuzamos vonalak a képen összetartanak, és pár fokkal eltérhet a kép északja a valóságtól) néhány utcával, tereptárgyakkal. Erre a képre szeretnék elhelyezni GPS koordináta alapján egy pontot, ami jelzi a felhasználó tartózkodási helyét.
Van-e valakinek ötlete arra, hogy hogyan lehetne a GPS-koordinátát a képen lévő koordinátáknak megfeleltetni? Azaz ha egy kereszteződésben állok, akkor a képen is ott jelenjen meg a pont.
Van egy kiindulási ötletem, de nem jutottam vele messzire: bizonyos pontoknak (kereszteződés, kisebb tereptárgy) meg tudom mondani a GPS-koordinátáit, és arra gondoltam, hogy ezen pontok (GPS és képbeli párok) alapján ki lehet számolni egy tetszőleges koordináta helyét a képen.
Hozzászólások
A GPS az egy idealizált gömb, így eleve pontos sose lesz (kb. olyan, mintha egy focilabda közepébe beleraknál egy krumplit, és a krumpli felületére rárajzolnád az épp oda eső ötszögű foltokat), ráadásul ott van még a kamera torzítása is.
De ha már úgyis torzítunk, akkor találd meg a képen a vízszintet.
Ha tényleg ismersz pár tereptárgyat, csinálj belőle valami nagyfelbontású mercator-t (31 bit unsigned integer amit mi szoktunk mondani neked lehet kevés lesz, de egy double megteszi), mert akkor már rögtön síkkordinátád van. itt az én mercator libem, de a net teli van ilyenekkel, OSM-ben, Google Mapsben, Leafletben ugyanez van.
Ebből kell neked olyan 4, de minimum 3, ezek ki fognak feszíteni valami torz négyszöget, és ezen belül már tudsz lineáris interpolációkat meg extrapolációkat készíteni.
Összehasonlításképp nézd meg, amikor a Google SketchUp (ill. most valaki megvette, de mind1, sz'al a Sketchup)-ba azt mondod, hogy akkor most képimport, és 3d, akkor milyen torz alaphálókat kapsz.
Köszönöm.
Tudom, hogy a GPS sem tökéletes, de néhány kilométeres távolságokról lenne szó ( << 10 km), így ezt elhanyagolnám :)
Az említett dolgoknak utánanézek.
A dolog .NET-ben készülne, de valószínűleg (bonyolultságtól függ) át tudok bármilyen forrást portolni rá.
Ilyen tavolsagon siman interpolalhatsz.
Kell par ismert pont (tipikusan a szeleknel, illetve ha a kezi rajzolas miatt kicsit torzit, akkor minel tobb), aztan azok kozt mar nem lesz nagy a hiba.
--
The programmers of tomorrow are the wizards of the future. You know, you're going to look like you have magic powers compared to everybody else. -Gabe Newell
+1
minimum 4, de 5-6 ismert pont alapjan mar egy egesz jo perspektivikus matrixot lehet kapni, onnantol mar csak szorozni kell vele:)
// Happy debugging, suckers
#define true (rand() > 10)
Abban kérhetnék segítséget, hogy 4-5-6 pont esetén hogy kell előállítani a mátrixot?
Találtam ezt a linket:
http://math.stackexchange.com/questions/296794/finding-the-transform-matrix-from-4-projected-points-with-javascript
Holnap megnézem alaposabban.
Alapjában véve sikerült működésre bírnom, de van olyan térkép, ahol nem tudom úgy felvenni a pontokat, hogy elég pontos legyen. Ez vagy a térkép hibája, vagy rosszul vettem fel a pontokat. Ha jól sejtem, az javít rajta, ha több, mint 4 referenciapontot veszek fel (jelen állapotában mindig pontosan 4 kell), és megkeresem a legközelebbi 4 pontot a számításhoz. Az alapverzió jól működik a 4 pont által határolt négyszögön kívül is (az egyik térképen), gondolom a mindig a 4 legközelebbi pontból számítanám ki, akkor továbbra is jól működne (ha benne van a négyszögben, ha nem).
A fordított megoldás nem lenne jó?: a térképszerű ábrádat torzitsd korrekt térképpé (QGIS is tud ilyet, georeferencing néven keresd), aztán már ábrázolhatod fölötte a koordinátáidat a tényleges helyükön.
Elindultam ebbe az irányba is, de csak akkor csinálom így, ha nem sikerült az oda irány.