Tengo geodjango ejecutándose usando openlayers y OpenStreetMaps con la aplicación de administración.¿Cómo mostrar datos usando Openlayers con OpenStreetMap en geodjango?
Ahora quiero escribir algunas vistas para visualizar los datos. Básicamente, solo quiero agregar una lista de puntos (vistos en el administrador) al mapa.
Geodjango parece utilizar un archivo especial openlayers.js para hacer su magia en el administrador. ¿Hay una buena manera de interactuar con esto?
¿Cómo puedo escribir una vista/plantilla para mostrar los datos de geodjango en una ventana de mapa de calle abierta, como se ve en el administrador?
Por el momento, estoy investigando el archivo openlayers.js y estoy buscando una solución 'fácil'. (No tengo experiencia js así que esto toma algo de tiempo.)
La forma actual en que puedo ver esto es agregar lo siguiente como plantilla y usar django para agregar el código necesario para mostrar los puntos. (Basado en el ejemplo here)
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Draw Feature Example</title>
<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
<script type="text/javascript">
var map;
function init(){
map = new OpenLayers.Map('map');
var layer = new OpenLayers.Layer.WMS("OpenLayers WMS",
"http://labs.metacarta.com/wms/vmap0", {layers: 'basic'});
map.addLayer(layer);
/*
* Layer style
*/
// we want opaque external graphics and non-opaque internal graphics
var layer_style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
layer_style.fillOpacity = 0.2;
layer_style.graphicOpacity = 1;
/*
* Blue style
*/
var style_blue = OpenLayers.Util.extend({}, layer_style);
style_blue.strokeColor = "blue";
style_blue.fillColor = "blue";
style_blue.graphicName = "star";
style_blue.pointRadius = 10;
style_blue.strokeWidth = 3;
style_blue.rotation = 45;
style_blue.strokeLinecap = "butt";
var vectorLayer = new OpenLayers.Layer.Vector("Simple Geometry", {style: layer_style});
// create a point feature
var point = new OpenLayers.Geometry.Point(-111.04, 45.68);
var pointFeature = new OpenLayers.Feature.Vector(point,null,style_blue);
// Add additional points/features here via django
map.addLayer(vectorLayer);
map.setCenter(new OpenLayers.LonLat(point.x, point.y), 5);
vectorLayer.addFeatures([pointFeature]);
}
</script>
</head>
<body onload="init()">
<div id="map" class="smallmap"></div>
</body>
</html>
¿Es así como se hace, o hay una mejor manera?
creo que el mejor método es crear una vista de Django que devuelve el objeto JSON necesario que los datos necesarios. – monkut