Ich habe geodjango läuft mit openlayers und OpenStreetMaps mit der Admin-App.Wie kann man Daten mit OpenStreetMap im Geodjango anzeigen?
Jetzt möchte ich einige Ansichten schreiben, um die Daten anzuzeigen. Im Grunde möchte ich nur eine Liste von Punkten (im Admin angezeigt) zur Karte hinzufügen.
Geodjango scheint eine spezielleopenlayers.js Datei zu verwenden, um es in den Admin magisch zu machen. Gibt es eine gute Möglichkeit, damit zu interagieren?
Wie kann ich eine Ansicht/Vorlage schreiben, um die Geodjango-Daten in einem geöffneten Straßenkartenfenster anzuzeigen, wie im Admin angezeigt?
Im Moment, graben wir in die openlayers.js Datei und API suchen eine "einfache" Lösung. (Ich habe js Erfahrung, also dauert das einige Zeit.)
Die aktuelle Weise, die ich sehen kann, um dies zu tun, ist das folgende als Vorlage hinzufügen, und benutze django, um den Code hinzuzufügen, der benötigt wird, um die Punkte anzuzeigen. (Basierend auf dem Beispiel 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>
Ist dies, wie es gemacht wird, oder gibt es einen besseren Weg?
Ich denke, die beste Methode, eine django Ansicht zu erstellen, die die notwendige JSON-Objekt für die notwendigen Daten zurückgibt. – monkut