If you want to display your shapefiles on the map canvas, it can be done by creating .kml files.
First in models.py create functions to convert data to .kml:
def shpPoint(request):
points = ShapefilePoint.objects.kml()
return render_to_kml("placemarks.kml", {'places': points})
placemarks.kml is a simple template for that purpose, it can be found in geodjango documentation I guess:
{% extends "base.kml" %}
{% block placemarks %}{% for place in places %}
<Placemark>
<name>{% if place.name %}{{ place.name }}{% else %}{{ place }}{% endif %}</name>
<description>{% if place.description %}{{ place.description }}{% else %}{{ place }}{% endif %}</description>
{{ place.kml|safe }}
</Placemark>{% endfor %}{% endblock %}
and function to rendering:
def index(request):
return render_to_response("map.html")
Now map your kml link in urls.py:
...
url(r'^point/', shpPoint),
...
And finally you can add your layer in JS code (this code contains example styling for point layer):
var PointLayer = new ol.layer.Vector({
title: 'Point',
source: new ol.source.KML({
projection:new ol.proj.get("EPSG:3857"),
url:'http://localhost:8000/point/',
extractStyles: false
}),
style: (function() {
var textStroke = new ol.style.Stroke({
color: 'yellow',
width: 3
});
var textFill = new ol.style.Fill({
color: 'black'
});
return function(feature, resolution) {
return [new ol.style.Style({
image: new ol.style.Circle({
radius: 7,
fill: new ol.style.Fill({color: 'yellow'}),
stroke: new ol.style.Stroke({color: 'red'})
}),
text: new ol.style.Text({
font: '11px arial,sans-serif',
text: feature.get('name'),
fill: textFill,
stroke: textStroke,
offsetX: 25,
offsetY: -10
})
})];
};
})()
});
map.addLayer(PointLayer);
Best Answer
I found the answer it's nearly the same as a normal django admin.
Juste replace admin.ModelAdmin by admin.OSMGeoAdmin