django-geojson icon indicating copy to clipboard operation
django-geojson copied to clipboard

leaflet does not render in admin and form views

Open frague59 opened this issue 11 years ago • 6 comments

Hi,

Thanks for your great job !

I'm facing a strange problem. I've folowed the doc from the github site, installed both django-leaflet, django-geojson and jsonfield, but form are rendered as "JSONTextField" but not as leaflet field.

I use a django 1.7.

frague59 avatar Sep 22 '14 09:09 frague59

OK, Leaflet is not rendered in ModelForm 'out of the box', I've set widgets into Meta class in my form to {"geom": LeafletWidget}, it works.

Is it possible to use this widget to save data into the model ? I've manually set a POINT to the geom field :

  • The data does not display in the widget
  • when I save my form, the data is removed

Thanks !

frague59 avatar Sep 22 '14 12:09 frague59

Ok, for the Meta class, we might have to update the documentation ?

Yes of course, edition works ! I wonder why you faced those problems... did you try in adminsite ?

leplatrem avatar Sep 22 '14 13:09 leplatrem

I've the same issue in adminsite... And now in detail view, a SerializationError :

SerializationError: The field ["geom", "{ "type":"Point", "coordinates":[ 3.172007203102112, 50.709293432461806 ] }"] could not be parsed as a valid geometry

My code :

            <script type="text/javascript">
                function map_init_basic(map, options) {
                    var data = eval('{{ object|geojsonfeature|safe }}');
                    L.marker(data).addTo(map);
                }
            </script>
            {% leaflet_map object.get_map_name callback="window.map_init_basic" %}

The 'get_map_name' method is a models' one that returns the name of the map, as a named url, in my case using a namespaced one (calendrier:admin:lieu_map).

frague59 avatar Sep 22 '14 14:09 frague59

J'ai contourné le problème dans la vue de detail en utilisant l'appel à geoJson via ajax :

            {% leaflet_map "lieu_map" callback="window.map_init_basic" %}
            <script type="text/javascript">
                function map_init_basic(map, options) {
                    $.getJSON("{% url "calendrier:admin:lieu_map" %}", 
                        function(data) {
                            L.geoJson(data).addTo(map);
                        });
                }
            </script>

Dans la vue de création, via le LeafletWidget, je retrouve l'erreur de déserialisation des données :

ERROR::django.contrib.gis::Error creating geometry from value '{
  "type":"Point",
  "coordinates":[
    3.1719642877578735,
    50.709266256082714
  ]
}' (String or unicode input unrecognized as WKT EWKT, and HEXEWKB.)

Je vais essayer de comprendre ce qui se passe, et peut-être proposer un patch.

Merci de votre aide !

frague59 avatar Sep 23 '14 06:09 frague59

OK, c'était dû à la non installation de GDAL.

Merci !

frague59 avatar Sep 23 '14 12:09 frague59

Est-ce que finalement tout est rentré dans l'ordre ?

Suite aux contributions de @fle, normalement il est possible de mettre tout en marche sans GEOS ni GDAL. Cela vaudrait le coup de comprendre et décortiquer les problèmes que tu as recontrés...

leplatrem avatar Sep 29 '14 09:09 leplatrem