Mi equipo tiene mucho código C# que hemos utilizado para el desarrollo de complementos de ArcGIS. Estamos pensando en portar algunas de estas herramientas a QGIS como plugins utilizando QT Designer. Sin embargo, reescribirlas con Python en el back-end no es una idea tan divertida. ¿Es posible utilizar C# en el back-end en su lugar?
Respuesta
¿Demasiados anuncios?Actualmente no. En el futuro, tal vez pequeño, es decir, súper pequeño. Unas cuantas razones:
-
Utilizamos SIP para generar los enlaces de Python desde C++. Esta es una herramienta que sabe cómo envolver la API de C++ y exponerla a Python. Python puede intropolar con C/C++ así que esto es realmente una librería envolvente que hace todo el trabajo para ir de un lugar a otro.
-
No hay ninguna herramienta que lo haga para .NET. Ha habido algunos intentos, pero nada listo para la producción, ni nada que pudiera hacer funcionar para los ejemplos básicos.
-
.NET en Linux, aunque es posible, también es algo nuevo, con toda una serie de problemas, y no es lo mismo, a mi entender, que el .NET normal que tenemos en Windows. Es un tiempo de ejecución en crecimiento a medida que se portan cosas.
Así que eso nos lleva a preguntarnos por qué MapServer/GDAL, etc., tienen enlaces para ellos y nosotros no. La respuesta es simple: no usan Qt. Son bibliotecas C/C++ (en su mayoría) y utilizan SWIG. SWIG actualmente no maneja cosas que Qt hace (pero parece que la gente lo quiere: https://github.com/swig/swig/issues/88 así que tal vez en algún momento)
2 votos
¡Ya quisieras! (y yo también) existe la posibilidad de plugins C++ pero son totalmente desaconsejado . La razón de esto, según tengo entendido, es que QGIS es un programa independiente de la plataforma, es la misma fuente para Mac, Linux y MS Windows pero C#/VB.net es sólo MS Windows. Si si alguien conoce una API de C# para QGIS yo también estaría MUY INTERESADO . Existe una API en C# para GDAL/OGR por si te sirve de ayuda, está alojada por Tamas Szekeres en gisinternals.com y puedo atestiguar personalmente que funciona bien.