¿Cómo reproyectar datos espaciales usando bibliotecas gratuitas?

13

¿Cómo puedo usar bibliotecas gratuitas para transformar datos espaciales?

Por ejemplo, quiero cambiar la proyección de un Shapefile dentro del código de mi aplicación web C #. ¿Cómo puedo hacer eso?

usuario1899
fuente
Convertido a CW porque esta es realmente una pregunta de "lista de X".
whuber
2
un poco tarde ahora, ya que el caballo CW ya está fuera de la puerta, pero si los respondedores prestaron más atención al "¿cómo hago eso?" parte de la Q no sería solo una "lista de X".
Matt Wilkie
Intentemos hacer de esta una gran pregunta con excelentes respuestas.
oscuro

Respuestas:

10

Puede probar la biblioteca DotSpatial.Projections .

El sitio web enumera un ejemplo "Conversión de un sistema de coordenadas geográficas a un sistema de coordenadas proyectadas" :

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.");
    }
  }
}
oscuridad
fuente
2

Me sorprendió un poco que nadie mencionara proj.4 y shapelib. Aunque ambos son proyectos en C, se han realizado enlaces en C # (o podría simplemente invocarlos).

johanvdw
fuente