Mam geodjango działające przy użyciu openlayers i OpenStreetMaps z aplikacją administratora.Jak wyświetlić dane za pomocą otwartych warstw z OpenStreetMap w geodjango?
Teraz chcę napisać kilka widoków, aby wyświetlić dane. Zasadniczo, chcę tylko dodać listę punktów (widoczną w adminie) do mapy.
Wygląda na to, że Geodjango używa specjalnego pliku openlayers.js, aby zrobić to magicznie w administracji. Czy istnieje dobry sposób na połączenie z tym?
Jak mogę napisać widok/szablon, aby wyświetlić dane geodjango w oknie otwartej mapy ulic, jak widać u administratora?
W tej chwili przekopuję się do pliku openlayers.js, a api szuka "łatwego" rozwiązania. (Nie mam doświadczenia js, więc zajmuje to trochę czasu.)
Obecny sposób, jaki mogę zobaczyć, to dodać poniższe jako szablon i użyć django do dodania kodu potrzebnego do wyświetlenia punktów. (Bazując na przykładzie 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>
Czy to jak to się robi, czy jest jakiś lepszy sposób?
Myślę, że najlepszą metodą jest utworzyć widok Django, który zwraca niezbędną obiekt JSON dla niezbędnych danych. – monkut