Como reprojetar dados espaciais usando bibliotecas gratuitas?

13

Como posso usar bibliotecas gratuitas para transformar dados espaciais?

Por exemplo, eu quero alterar a projeção de um Shapefile no código do meu aplicativo da web em C #. Como faço isso?

user1899
fonte
Convertido para CW, porque esta é realmente uma questão de "lista de X".
whuber
2
agora um pouco tarde, já que o cavalo da CW já está do lado de fora, mas se os atendentes prestassem mais atenção ao "como faço isso?" parte do Q não seria apenas uma "lista de X".
Matt Wilkie
Vamos tentar fazer desta uma ótima pergunta com ótimas respostas.
Underdark

Respostas:

10

Você pode tentar a biblioteca DotSpatial.Projections .

O site lista um exemplo "Convertendo de um sistema de coordenadas geográficas para um sistema de coordenadas projetadas" :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DotSpatial.Projections;

namespace WindowsFormsApplication1
{
  public partial class Form1 : Form
  {
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        //Sets up a array to contain the x and y coordinates
        double[] xy = new double[2];
        xy[0] = 0;
        xy[1] = 0;
        //An array for the z coordinate
        double[] z = new double[1];
        z[0] = 1;
        //Defines the starting coordiante system
        ProjectionInfo pStart = KnownCoordinateSystems.Geographic.World.WGS1984;
        //Defines the ending coordiante system
        ProjectionInfo pEnd = KnownCoordinateSystems.Projected.NorthAmerica.USAContiguousLambertConformalConic;
        //Calls the reproject function that will transform the input location to the output locaiton
        Reproject.ReprojectPoints(xy, z, pStart, pEnd, 0, 1);
        Interaction.MsgBox("The points have been reporjected.");
    }
  }
}
underdark
fonte
2

Fiquei um pouco surpreso por ninguém mencionar proj.4 e shapelib. Embora ambos sejam projetos C, ligações C # foram feitas (ou você pode simplesmente invocá-las).

johanvdw
fonte