Projection fisheye

12

J'ai besoin d'une projection spéciale pour une présentation efficace sur une affiche. Je voudrais présenter la zone d'étude (République tchèque) dans un contexte de toute l'Europe de telle manière que la République tchèque occupe la plus grande surface (comme 70%) au centre, et le reste de l'Europe est autour d'elle, mais ridiculement petit. C'est-à-dire comme une distorsion massive en faveur de la République tchèque, comme un objectif fish-eye, lorsque vous les placez près d'un objet et ils l'agrandissent massivement par rapport à l'environnement.

Y a-t-il une projection que je peux utiliser à cette fin dans Quantum GIS? EPSG ou la formule en standard (utilisable dans QGIS) est la bienvenue.

Tomas
la source
1
Vous pouvez le faire avec un cartogramme de distance ou de zone . Je ne connais aucune solution QGIS. Vous pouvez également le faire par une simple transformation personnalisée des coordonnées, si vous savez comment programmer de telles choses. Aucune projection standard ne créera une telle carte pour vous, en raison des distorsions extrêmes impliquées.
whuber
1
Cela pourrait être fait, mais vous devez être intelligent à ce sujet. En commençant par les coordonnées projetées puis en dé-projetant avec une projection qui utilise un sphéroïde plus petit, vous pouvez en fait faire qu'une petite partie du monde semble être la plupart d'un hémisphère. Reprojeter les coordonnées résultantes avec à peu près n'importe quelle projection adaptée à cet hémisphère ferait l'affaire. Ce que vous gagnez à ne pas avoir à coder vous-même les transformations de coordonnées doit être mis en balance avec (a) avoir à faire beaucoup d'expérimentation par essais et erreurs et (b) avoir un contrôle minimal sur la distorsion autour des bords.
whuber
4
J'utiliserais la route du cartogramme. Des outils simples avec une mise en œuvre prête. Faites juste la valeur pour le représentant tchèque. beaucoup plus grand que le reste de l'Europe: scapetoad.choros.ch
HeikkiVesanto
1
Si vous n'êtes pas limité par les rasters dans cette carte, alors la voie à suivre est certainement d'exporter vers SVG et d'utiliser Inkspace ou un autre éditeur de graphiques vectoriels pour créer l'effet de loupe. Si vous travaillez avec des vecteurs, il n'y aura pas de vilains problèmes de pixels. +1 pour la République tchèque :)
Miro
1
Voici un tutoriel pour CorelDraw: youtube.com/watch?v=YE9hu1g20Gc , dans Inkscape, vous devriez obtenir des résultats similaires avec la déformation de l'enveloppe: wiki.inkscape.org/wiki/index.php/Envelope_Deformation
Miro

Réponses:

6

Bien que ce ne soit pas un œil de poisson, vous pouvez créer ce style de carte sous forme de cartogramme.

Les avantages de cela sont qu'il existe des outils prêts à l'emploi pour le travail et fonctionnera avec un ensemble robuste de jeux de données.

Augmentez simplement la valeur de la République tchèque par rapport au reste de l'Europe, en ajustant les valeurs en fonction des besoins.

Un excellent outil pour cela est: ScapeToad

entrez la description de l'image ici

HeikkiVesanto
la source
Merci Vesanto, c'est exactement ce dont j'avais besoin! :-) Outil prêt à l'emploi et convivial! J'ai finalement utilisé ça. Et ça ressemble beaucoup à du fish-eye pour moi :-)
Tomas
La seule chose à noter est que c'était très très lent, j'ai donc dû choisir les paramètres les plus lents et même réduire le nombre de cellules de la grille manuellement .. mais ça a l'air super. La seule chose que je regrette, c'est qu'il ne sera pas facile de le faire avec des rasters.
Tomas
2
vous pouvez accélérer les choses en utilisant qgis pour simplifier les géométries, ou utiliser un fichier de forme de résolution inférieure (comme le 50m ou 110m de Natural Earth)
Steven Kay
8

Vous pouvez essayer l'une des Magnifying Glassprojections de Snyder trouvées sur http://www.csiss.org/map-projections/Azimuthal.html n ° 32 à 36.

Ils sont basés sur cette publication: https://pubs.er.usgs.gov/publication/70014498

Je ne sais pas s'il existe une ressource en ligne avec les formules.

La carte logarithmique de Hägerstrand pourrait également répondre à vos besoins: http://www.ncgia.ucsb.edu/projects/tobler/Projections/sld105.htm

Ou une projection azimutale à racine carrée: http://www.ncgia.ucsb.edu/projects/tobler/Projections/sld109.htm

Des références peuvent être trouvées dans http://www.cartoperspectives.org/index.php/journal/article/download/cp59-tobler/307 et dans "Small-Scale Map Projection Design" de Frank Canters (disponible dans Google books).

AndreJ
la source
Merci Andrej! Tout cela semble très intéressant! Mais sans les formules ou epsgs ou tout autre moyen facile de les utiliser, je ne pourrai pas les utiliser :-(
Tomas
1
Il n'y aura pas de code EPSG (aucune recherche d'huile ne sera effectuée avec ces cartes!), Mais vous pouvez consulter les publications.
AndreJ
7

Voici un pseudo-fisheye réalisé dans Postgres / Postgis. J'ai utilisé le plugin QChainage pour créer 1000 points le long de chaque frontière de pays. Les points ont été reprojetés autour de l'île nulle (0,0) en utilisant le logarithme de la distance, mais en conservant l'azimut.

entrez la description de l'image ici

J'ai utilisé Plat Caree pour le rendre circulaire, car wgs84 donne un aspect plus ellipsoïde.

select
    st_asewkt(
        st_endpoint(
            st_scale(
                st_rotate(
                    st_makeline(
                        st_setsrid(st_makepoint(0,0),4326),
                        st_setsrid(st_makepoint(0,1),4326)
                    ),
                    st_azimuth(
                        st_setsrid(
                            st_makepoint(0,0),
                            4326
                        )
                        ,
                        ST_translate(geom,-15.0,-50.0)
                    ) 
                ),
                -(1.0+(7.0*log(ST_Distance(st_setsrid(st_makepoint(0,0),4326),ST_translate(geom,-15.0,-50.0))))),
                (1.0+(7.0*log(ST_Distance(st_setsrid(st_makepoint(0,0),4326),ST_translate(geom,-15.0,-50.0)))))

            )   
        )
    ) as pt

from
    qqq3lines
Steven Kay
la source
intéressant, merci Steven! Peut-il être amélioré pour que la République tchèque soit encore plus grande que les autres?
Tomas
@tomas oui ... vous devez modifier les constantes que j'ai utilisées dans st_scale () .. essayez d'augmenter le 1.0 à 2.0 et de diminuer le 7.0 à quelque chose de plus petit.
Steven Kay
1

D3 a un plugin de distorsion fisheye , que j'ai trouvé en Googling "svg fisheye transform" .. Il pourrait être utile pour votre situation. Fondamentalement, je suggère de convertir certains de vos fichiers de formes en SVG (ou GeoJSON?) En créant votre carte en utilisant la bibliothèque D3.js de plus en plus populaire.

Ma pensée était que je savais que les géométries des frontières du pays pouvaient être converties en types de vecteur SVG, et je soupçonnais qu'en tant que SVG, il pourrait y avoir des approches plus appropriées pour mettre en œuvre la transformation fisheye que vous désirez.

Je suis d'accord avec les autres commentateurs que le logiciel d'illustration / graphique est plus approprié à votre scénario, et puisque D3 fonctionne avec certains formats de données courants (SVG et GeoJSON), il peut fournir une solution pour vous.

elrobis
la source
merci, mais D3 n'est-il pas une bibliothèque pour les programmeurs, pour les créateurs web? J'ai peut-être besoin d'un programme qui créera une seule image pour moi, éventuellement sans besoin de programmation.
Tomas
@Tomas, assez juste. Étant donné que votre question est simplement intitulée "Projection de type fisheye", cependant, elle aura un bon classement de recherche dans google pour des requêtes similaires, qui au fil du temps incluront probablement certains développeurs. Finalement, cette réponse pourrait être utile à quelqu'un d'autre.
elrobis
0

Je pense que vous aurez besoin d'une distorsion extrême pour que la République tchèque ressemble à ça. Il existe une technique photographique de «projection stéréographique» assez populaire, parfois utilisée dans la photographie panoramique pour créer des «mondes du globe» qui peut fonctionner si vous avez utilisé le résultat comme superposition sur l'Europe. (Ne considérez pas cela comme une réponse car cela est purement hypothétique et je ne l'ai jamais essayé avec une carte) De plus, ce serait plus un projet de retouche graphique / photo car vous devrez probablement photographier votre carte imprimée ou éventuellement l'exporter hors du SIG vers une image haute résolution, puis copiez et recadrez une série d'images autour d'un point central (centré sur une zone uniforme au milieu avec un chevauchement suffisant) afin qu'elles puissent être utilisées comme entrée dans la fonction panorama. Une fois que vous avez la "projection stéréographique"

Bien sûr, vous devrez ajouter des étiquettes après coup dans Illustrator, Corel Draw ou en réimportant l'image finale en tant que raster dans SIG et en créant des graphiques / annotations.

Google "panorama de projection stéréographique" pour voir des exemples.

Voici un exemple de tutoriel: http://www.photographymad.com/pages/view/little-planet-photos-5-simple-steps-to-making-panorama-worlds

entrez la description de l'image ici

Jakub Sisak GeoGraphics
la source