Att avgöra om en koordinat är inom ett område

Hej!

Jag är rätt ny på det här med koordinater och navigering.

Det jag tänkt göra är att man skall kunna mata in ett eller flera täckningsområden på en karta (begränsat av ett antal koordinater i lat/long). Därefter skall man kunna ange en lat/long koordinat och kontrollera om denna punkt innefattas i någon av områdena.

Inmatning:
Jag tänkte använda Google maps för mata in områdena genom att sätta ut ett antal koordinater (exempel: http://g.codesite.articles.googlepages.com/cschalk-ezdigitizer.htm) och sedan läsa in dem i en databas.

Koordinattest:
Därefter tänkte jag använda Google maps till att läsa in en koordinat (där användaren klickar med muspekaren). Koordinaten skickas till servern och testas mot alla inmatade områden (samma algorith som i exemplet: http://www.econym.demon.co.uk/googlemaps/examples/inside.htm) och resultatet returneras.

Avgränsningar:
Primärt är det bara inom Sverige som områdena kommer att matas in. Områdena kommer i normalfallet att täcka städer med onejd ibland ända upp till kommunstorlek.


Problemet är att jag inte är riktigt säker på hur allt hänger ihop när det gäller projektionen som Google använder.
Eftersom jag kommer att utföra testerna på serversidan (ASP.NET) så behöver jag ju ta in alla koordinaterna på samma format och jag antar att projicerade koordinater är lättast!?
Som följande exempel beskriver så finns det ju inga raka linjer (sådana som man ritar ut när man sätter områden) längs ytan på en sfär: http://www.livephysics.com/ptools/great-circle-path.php
vilket lämnar mig till att arbeta med projicerade områden / koordinater.

Frågan är då vad som händer med avrundningsfel och dyl. Är det bara att konvertera alla lat/long koordinaterna med Mercator projektionen och sedan köra en punkt i polygon-testning?

Hoppas att någon kan guida mig här.

/ Richard
 
Om jag förstår det hela rätt, avgränsas en yta på jordklotet av n stycken storcirkelbågar. Bågarna förenas genom n stycken noder (angivna i lat/lon). Du vill sedan bestämma om en given punkt (i lat/lon) ligger inuti eller utanför denna yta.

Jag kan urskilja två sätt att angripa problemet – i plana koordinater och i sfäriska koordinater.

1. I plana koordinater - Skapa nya noder längst storcirkelbågarna, kanske på max 0.5 - 1 km avstånd från varandra (http://williams.best.vwh.net/avform.htm#Intermediate). Beräkna plana koordinater i Rikets Nät för varje nod (jag har kod för det), och använd den föreslagna algoritmen för att utröna om en punkt ligger inom denna nya mångnodiga plana polygon. Jag ser inga anledning varför detta inte skulle fungera, men det är förstås ingen vidare elegant lösning. Men det torde inte vara så svårt att koda.

2. I sfäriska koordinater – En storcirkelbåge dras från punkten till nordpolen (eller någon annan punkt som man vet ligger utanför alla tänkbara ytor). Hur många skärningspunkter mellan denna storcirkelbåge och de andra storcirkelbågarna (de som begränsas av två noder) erhåller man? Om antalet är udda ligger punkten inuti ytan, om jämnt utanför. Skärningspunkterna mellan två storcirklar kan beräknas enligt http://williams.best.vwh.net/intersect.htm Den här metoden att utröna om en punkt ligger innanför eller utanför fungerar i varje fall för en plan polygon, och jag antar att den fungerar även på ytan av ett klot.
 

Liknande trådar


Sova ute en natt i månaden

Anna och Anna har hittat det bästa ”lifehacket” någonsin – och upptäckt många naturreservat i sömnen.