2017-08-22 3 views
0

J'ai écrit une application de réalité augmentée qui placera des objets sur des cartes routières imprimées. Je connais les coordonnées GPS de chaque coin de chaque carte et je pourrais calculer une valeur relative où placer n'importe quel objet sur cette carte. Bien que cela fonctionne bien avec un format atlas, j'intègre maintenant de grandes cartes pliantes (p. Ex. France) où l'écart des positions est devenu inacceptable.Comment convertir les coordonnées en LCC en utilisant PROJ.4

Je n'ai aucune expérience en projection de coordonnées, donc j'ai trouvé proj.4 qui semblait parfait et était vraiment content de trouver une intégration unity3d. Mais peu importe ce que j'essaie, je reçois de mauvaises valeurs (probablement ma faute car je ne comprends pas très bien ce que je fais ici)

Ceci est la projection de la carte toutes mes autres cartes sont produites à partir (J'ai rassemblé la chaîne moi-même, il peut contenir des erreurs de syntaxe, les valeurs sont correctes bien)

"+proj=lcc +lat_1 =49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps = bessel +datum=hermannskogel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"; 

Je suppose que je dois projeter d'un LatLon sphérique ou webmercator qui semblent TOB e assez similaire (à le moins les résultats sont) à lcc

Webmercator:

"+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m [email protected] +wktext +no_defs"; 

LatLon:

"+proj=latlong +a=6370 +b=6370 +towgs84=0,0,0 +no_defs" 

J'initialize les projections, puis il transformt liste des positions: WebMercator.Transform (mainMapProj, XValues,) valeurs y;

Comme ensemble de données de test que je utilise les coordonnées GPS de mon sud carte France:

testMap.TopLeft_lat = 46.985; 
    testMap.TopLeft_lon = -3.702; 
    testMap.TopRight_lat = 47.3162; 
    testMap.TopRight_lon = 9.1447; 
    testMap.BottomRight_lat = 42.41; 
    testMap.BottomRight_lon = 9.1667; 
    testMap.BottomLeft_lat = 41.3022; 
    testMap.BottomLeft_lon = -2.291; 

En plus les coordonnées souvent qu'il ville au hasard de chereay

cheray.lat = 45.97316; 
cheray.lon = -1.352547; 

Coordinates of the map

Correctement projeté, les coordonnées devraient aboutir approximativement à un rectangle (page imprimée) et la ville devrait être relativement placée à environ (0.1748,0.9044) à partir du bas r coin gauche du rectangle.

Les valeurs que je reçois sont loin. Je ne sais pas ce que je fais de mal et comment continuer. Merci d'avance pour tout indice.

+0

Ceci est une question de géographie de 7e année où vous apprendrez les différents types de cartes de projection. Savez-vous quel type de carte vous avez? Le code utilise une carte de projection de Mercator et vous pouvez ne pas utiliser la carte Mercator (voir https://en.wikipedia.org/wiki/Mercator_projection). Et https://en.wikipedia.org/wiki/List_of_map_projections – jdweng

+0

Je dois avoir été malade en septième année: -) ... Comme indiqué ci-dessus, ma carte est lcc (voir la première définition de projection). J'ai besoin de transformer les valeurs lat/lon afin que je puisse les placer correctement avec les valeurs x/y sur cette carte. Les valeurs que je reçois jusqu'à présent sont fausses cependant. Est-ce que l'approche pour convertir du latlon circulaire en lcc est mauvaise? Que devrais-je essayer à la place? – kiu

Répondre

0

Mercator n'est pas circulaire. Vous voulez convertir de conique qui est circulaire en utilisant le centre de la carte comme point de référence. La terre a 25 000 milles de circonférence et 8 000 milles de diamètre. Donc, si vous regardez la Terre depuis la Lune et que vous voyez la Terre à plat, vous verrez des cercles de 8 000 miles de diamètre qui sont vraiment à l'équateur un demi-cercle de 12 500 miles. Donc la courbure de la terre est un rapport de 12,500/8000 = 1,5. En fait, c'est pi * r/2r = pi/2 = 1,57.

La longitude GPS va de -324000000 (Ouest) à +324000000 (Est) et la latitude passe de 0 (Equateur) à +/- 162000000.0 (Pôle Nord/Sud). Vous remarquerez que la longitude maximale (180 degrés) est deux fois la latitude maximale (90 degrés). L'échelle GPS est donc la même pour la latitude et la longitude. Donc je pense que la seule chose que vous devez faire est de multiplier la distance par le facteur d'échelle 1.57.