Question

Je souhaite créer des mosaïques de style de carte thermique pour superposer nos cartes de base à l'aide de Ouvrir les calques. Fondamentalement, je veux diviser un cadre de sélection en une grille et afficher chaque carré de la grille en utilisant une couleur différente en fonction du nombre de points d'un échantillon compris dans ce carré.

Les technologies impliquées sont C #, OpenLayers, SQL Server 2008 et GeoServer.

Ma question concerne essentiellement l’approche générale. Je ne sais pas vraiment où placer la pointe du ciseau sur celui-ci.

Mon but ultime est de pouvoir prendre n'importe quelle boîte englobante arbitraire, de calculer une grille de mille par centiles qui convient à l'intérieur de cette boîte de bordure, d'itérer une collection de points individuels et de les affecter à un carré ou à une grille. un autre pour que je puisse calculer la densité de points par carré de la grille, puis colorier la grille en fonction des densités, puis superposer celle-ci sur une carte de base CloudMade à l'aide de Ouvrir les calques.

Toute aide serait grandement appréciée, que ce soit dans son intégralité ou dans n’importe quel élément.

Était-ce utile?

La solution

Si votre cadre de sélection est aligné sur l’axe, c’est assez simple. Créez simplement votre image et créez un fichier du monde à la main. Le fichier world ne contient que 6 lignes de texte et vous savez déjà tout ce dont vous avez besoin (taille de pixel y, coordonnées du coin supérieur gauche).

Assurez-vous simplement que vous utilisez le centre du pixel du coin supérieur gauche, pas le coin de la boîte.

------ Voici comment vous feriez le fichier de monde -------

Supposons que le coin supérieur gauche de votre cadre de sélection se situe à 203732x598374 et que vous souhaitez une image dont les rectangles font 200 m de large à l'est < - > west et 300 m de hauteur au nord < - < !> gt; south.

Vous feriez une image avec le nombre de pixels approprié, puis un fichier world contenant les 6 lignes suivantes:

200
0
0
-300
203632
598524

Ceci correspond à:

200 == size of one pixel in X
0 == shear1
0 == shear2
-300 == size of one pixel in Y (from top down)
203632 == left edge - 1/2 pixel size (to center on pixel instead of edge of box)
598524 == top edge - 1/2 pixel size (to center on pixel instead of edge of box)

Si vous utilisez une image .png, vous voudrez l'enregistrer sous le même nom, mais au format .pgw. Si vous utilisez un fichier .jpg, ce serait .jgw, etc.

Pour plus de détails, voir: Wiki sur les fichiers du monde

Autres conseils

& "; Diviser un cadre de sélection dans une grille et afficher chaque carré de la grille en utilisant une couleur différente en fonction du nombre de points d’un échantillon compris dans ce carré. &"; Ceci est un raster et il existe des fonctionnalités dans GeoServer pour les afficher. avec des nuances de couleur, légendes et ainsi de suite. Je pense que l'utilisation de ces fonctionnalités sera plus flexible que la création de mosaïques d'images en C #.

Dans la documentation GeoServer:

  

Les données raster ne sont pas simplement une image,   il peut plutôt être considéré comme une grille   d'informations géoréférencées, beaucoup   comme un graphique est une grille de visuel   informations (avec combinaison de rouges,   verts et bleus). Contrairement aux graphiques,   qui ne contiennent que des données visuelles, chaque   point / pixel dans une grille raster peut avoir   beaucoup d'attributs différents, avec   peut-être qu'aucun d'entre eux ayant un   composante intrinsèquement visuelle.

Cette opération est également appelée cartographie thématique, graphiques de contour, cartes thermiques ou graphiques 2.5D dans d'autres progiciels SIG.

Vous pouvez utiliser un SIG gratuit tel que Grass pour créez les grilles raster, mais à partir de votre description, vous n'avez pas besoin d'interpoler (car chaque cellule contient au moins un point) il serait donc tout aussi facile de lancer votre propre code.

EDIT: il existe une bibliothèque open source GDAL que vous pouvez utiliser pour écrire des fichiers raster dans divers formats . Il existe des liaisons C #.

Je pense que les formules de calcul du centre du pixel supérieur gauche sont fausses. Dans l'exemple, le centre du pixel supérieur gauche serait situé en bas à droite de (203732,598374). Donc, ne devrait-il pas être le suivant?

203832 == left edge + 1/2 pixel size (to center on pixel instead of edge of box)
598224 == top edge - 1/2 pixel size (to center on pixel instead of edge of box)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top