1 votos

Geodjango - uso de coordenadas proyectadas con olwidget

Tengo una base de datos en GeoDjango que contiene datos basados en el sistema de coordenadas australiano MGA54 (SRID 28354). Tengo el srid establecido en las definiciones del modelo y cuando uso el GeoModelAdmin estándar (usando OSM como capa base) todo funciona bien, mostrando los onjects en la ubicación correcta y permitiendo que sean editados correctamente.

Para una mayor funcionalidad me gustaría utilizar Olwidget en el admin de Django, con las capas de Google como mapa base, sin embargo no parece manejar el sistema MGA54. He configurado 'projection' a 900913 y 'display_projection' a 28354, pero no funciona correctamente. Si configuro el área de texto como visible puedo ver que está configurando el SRID correctamente al comienzo de la sentencia WKT, pero luego está utilizando coordenadas que sospecho están en 900913.

He leído en alguna parte que Openlayers sólo puede transformar 4326 y 900913 sin utilizar las bibliotecas Proj4s, pero starnge que Djangos GeoModelAdmin puede manejarlo correctamente.

¿Alguien sabe si es posible utilizar sistemas de coordenadas alternativos (más allá de 4326 y 900913) con olwidget y, en caso afirmativo, cómo hacerlo?

1voto

Dan Kennedy Puntos 126

Así que después de dejar este problema durante unas semanas y volver a él, he encontrado una solución. No es muy bonito me temo que implica la edición de la fuente olwidget y codificación dura de la proyección, pero parece que funciona bien, tanto para la visualización y edición.

Básicamente se trata de añadir soporte proj4 para transformaciones en olwidget. Es necesario editar dos archivos olwidget olwidget.js y widgets.py.

widgets.py:

En este archivo estoy intentando añadir algunos enlaces a la cabecera del archivo html generado. Inserte estas dos líneas después del bucle for en def_media (aproximadamente la línea 172),

    js.add("http://svn.osgeo.org/metacrs/proj4js/trunk/lib/proj4js-compressed.js")
    js.add("http://spatialreference.org/ref/epsg/28354/proj4js/")

El primero añade la biblioteca proj4. El segundo se asegura de que proj4 tiene los detalles de su proyección, en este caso la mía es 28354, por lo que se puede cambiar a lo que usted requiere.

olwidget.js:

Sólo tienes que cambiar la línea 219, a su sistema de coord proyectada, por lo que para mí he cambiado:

    displayProjection: "EPSG:4326",

a

    displayProjection: "EPSG:28354",

Como habrás adivinado, no tengo mucha experiencia en programación, y estoy empezando a entender Django y Openlayers y cómo funcionan juntos. Si alguien tiene una manera de hacer de esto una solución más versátil (es decir, la lectura de la proyección desde el campo de la geometría, por lo que no es de código duro), que sería genial.

0voto

shsteimer Puntos 8749

Según los documentos:

Proyecciones olwidget utiliza las proyecciones dadas en determinar la entrada y salida de datos WKT. Por defecto, espera que los datos WKT de entrada utilicen "EPSG:4326" (latitudes y longitudes), que se transforma internamente a la proyección cartográfica (por por defecto, "EPSG:900913", la proyección utilizada por OpenStreetMaps, Google, y otros). Actualmente, olwidget ignora el SRID presente en cualquier archivo datos WKT iniciales, y utiliza el proyecto mapOptions.displayProjection para leer los datos.

Para cambiar el proyecti mapOptions.displayProjection. Por ejemplo, se utilizará EPSG:900913 para todos los datos WKT además de la visualización del mapa:

new olwidget.EditableMap('textareaId', {
    mapOptions: {
        projection: "EPSG:900913",
        displayProjection: "EPSG:900913"
    }
});

¿O ya has encontrado esta sección de la documentación?

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X