Fixed #9806 -- Allowed editing GeometryField with OpenLayersWidget
Thanks Paul Winkler for the initial patch.
This commit is contained in:
parent
f3d1aebed1
commit
e6f5b7eacd
|
@ -94,6 +94,7 @@ class GeoModelAdmin(ModelAdmin):
|
||||||
'scrollable' : self.scrollable,
|
'scrollable' : self.scrollable,
|
||||||
'layerswitcher' : self.layerswitcher,
|
'layerswitcher' : self.layerswitcher,
|
||||||
'collection_type' : collection_type,
|
'collection_type' : collection_type,
|
||||||
|
'is_generic' : db_field.geom_type == 'GEOMETRY',
|
||||||
'is_linestring' : db_field.geom_type in ('LINESTRING', 'MULTILINESTRING'),
|
'is_linestring' : db_field.geom_type in ('LINESTRING', 'MULTILINESTRING'),
|
||||||
'is_polygon' : db_field.geom_type in ('POLYGON', 'MULTIPOLYGON'),
|
'is_polygon' : db_field.geom_type in ('POLYGON', 'MULTIPOLYGON'),
|
||||||
'is_point' : db_field.geom_type in ('POINT', 'MULTIPOINT'),
|
'is_point' : db_field.geom_type in ('POINT', 'MULTIPOINT'),
|
||||||
|
|
|
@ -40,7 +40,8 @@ class OpenLayersWidget(Textarea):
|
||||||
)
|
)
|
||||||
value = None
|
value = None
|
||||||
|
|
||||||
if value and value.geom_type.upper() != self.geom_type:
|
if (value and value.geom_type.upper() != self.geom_type and
|
||||||
|
self.geom_type != 'GEOMETRY'):
|
||||||
value = None
|
value = None
|
||||||
|
|
||||||
# Constructing the dictionary of the map options.
|
# Constructing the dictionary of the map options.
|
||||||
|
|
|
@ -6,6 +6,7 @@ OpenLayers.Projection.addTransform("EPSG:4326", "EPSG:3857", OpenLayers.Layer.Sp
|
||||||
{{ module }}.wkt_f = new OpenLayers.Format.WKT();
|
{{ module }}.wkt_f = new OpenLayers.Format.WKT();
|
||||||
{{ module }}.is_collection = {{ is_collection|yesno:"true,false" }};
|
{{ module }}.is_collection = {{ is_collection|yesno:"true,false" }};
|
||||||
{{ module }}.collection_type = '{{ collection_type }}';
|
{{ module }}.collection_type = '{{ collection_type }}';
|
||||||
|
{{ module }}.is_generic = {{ is_generic|yesno:"true,false" }};
|
||||||
{{ module }}.is_linestring = {{ is_linestring|yesno:"true,false" }};
|
{{ module }}.is_linestring = {{ is_linestring|yesno:"true,false" }};
|
||||||
{{ module }}.is_polygon = {{ is_polygon|yesno:"true,false" }};
|
{{ module }}.is_polygon = {{ is_polygon|yesno:"true,false" }};
|
||||||
{{ module }}.is_point = {{ is_point|yesno:"true,false" }};
|
{{ module }}.is_point = {{ is_point|yesno:"true,false" }};
|
||||||
|
@ -89,24 +90,19 @@ OpenLayers.Projection.addTransform("EPSG:4326", "EPSG:3857", OpenLayers.Layer.Sp
|
||||||
// Create an array of controls based on geometry type
|
// Create an array of controls based on geometry type
|
||||||
{{ module }}.getControls = function(lyr){
|
{{ module }}.getControls = function(lyr){
|
||||||
{{ module }}.panel = new OpenLayers.Control.Panel({'displayClass': 'olControlEditingToolbar'});
|
{{ module }}.panel = new OpenLayers.Control.Panel({'displayClass': 'olControlEditingToolbar'});
|
||||||
var nav = new OpenLayers.Control.Navigation();
|
{{ module }}.controls = [new OpenLayers.Control.Navigation()];
|
||||||
var draw_ctl;
|
if (!{{ module }}.modifiable && lyr.features.length) return;
|
||||||
if ({{ module }}.is_linestring){
|
if ({{ module }}.is_linestring || {{ module }}.is_generic){
|
||||||
draw_ctl = new OpenLayers.Control.DrawFeature(lyr, OpenLayers.Handler.Path, {'displayClass': 'olControlDrawFeaturePath'});
|
{{ module }}.controls.push(new OpenLayers.Control.DrawFeature(lyr, OpenLayers.Handler.Path, {'displayClass': 'olControlDrawFeaturePath'}));
|
||||||
} else if ({{ module }}.is_polygon){
|
}
|
||||||
draw_ctl = new OpenLayers.Control.DrawFeature(lyr, OpenLayers.Handler.Polygon, {'displayClass': 'olControlDrawFeaturePolygon'});
|
if ({{ module }}.is_polygon || {{ module }}.is_generic){
|
||||||
} else if ({{ module }}.is_point){
|
{{ module }}.controls.push(new OpenLayers.Control.DrawFeature(lyr, OpenLayers.Handler.Polygon, {'displayClass': 'olControlDrawFeaturePolygon'}));
|
||||||
draw_ctl = new OpenLayers.Control.DrawFeature(lyr, OpenLayers.Handler.Point, {'displayClass': 'olControlDrawFeaturePoint'});
|
}
|
||||||
|
if ({{ module }}.is_point || {{ module }}.is_generic){
|
||||||
|
{{ module }}.controls.push(new OpenLayers.Control.DrawFeature(lyr, OpenLayers.Handler.Point, {'displayClass': 'olControlDrawFeaturePoint'}));
|
||||||
}
|
}
|
||||||
if ({{ module }}.modifiable){
|
if ({{ module }}.modifiable){
|
||||||
var mod = new OpenLayers.Control.ModifyFeature(lyr, {'displayClass': 'olControlModifyFeature'});
|
{{ module }}.controls.push(new OpenLayers.Control.ModifyFeature(lyr, {'displayClass': 'olControlModifyFeature'}));
|
||||||
{{ module }}.controls = [nav, draw_ctl, mod];
|
|
||||||
} else {
|
|
||||||
if(!lyr.features.length){
|
|
||||||
{{ module }}.controls = [nav, draw_ctl];
|
|
||||||
} else {
|
|
||||||
{{ module }}.controls = [nav];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
{{ module }}.init = function(){
|
{{ module }}.init = function(){
|
||||||
|
|
|
@ -134,6 +134,9 @@ Minor features
|
||||||
* SimpleLazyObjects will now present more helpful representations in shell
|
* SimpleLazyObjects will now present more helpful representations in shell
|
||||||
debugging situations.
|
debugging situations.
|
||||||
|
|
||||||
|
* Generic :class:`~django.contrib.gis.db.models.GeometryField` is now editable
|
||||||
|
with the OpenLayers widget in the admin.
|
||||||
|
|
||||||
Backwards incompatible changes in 1.6
|
Backwards incompatible changes in 1.6
|
||||||
=====================================
|
=====================================
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue