Comment afficher des données en utilisant Openlayers avec OpenStreetMap dans geodjango?
J'ai geodjango exécute à l'aide d' openlayers et Openstreetmap avec l'admin app.
Maintenant, je veux écrire quelques points de vue pour afficher les données. En gros, je veux juste ajouter une liste de points (vu dans l'admin) de la carte.
Geodjango semble utiliser un spécial openlayers.js fichier à faire c'est de la magie dans l'admin. Est-il une bonne façon de faire l'interface avec cela?
Comment puis-je écrire un affichage ou un modèle pour afficher les geodjango données open street map fenêtre, comme on le voit dans l'admin?
En ce moment, je suis creuser la openlayers.js fichier et de l'api à la recherche d'un "simple" solution. (Je n'ai pas de js expérience, c'est donc prendre un certain temps).
La façon actuelle je peux voir pour ce faire est d'ajouter ce qui suit comme un modèle, et l'utilisation de django pour ajouter le code nécessaire à l'affichage de points. (Basé sur l'exemple ici)
<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>
Est-ce comment il est fait, ou est-il un meilleur moyen?
source d'informationauteur monkut
Vous devez vous connecter pour publier un commentaire.
Je pense que votre solution est viable et probablement l'approche la plus facile. Juste templatize le javascript et l'utilisation de Django à injecter des points de données que le modèle est rendu.
Si vous vouliez obtenir de plus sophistiqué, vous pouvez avoir un Django vue que servi les points de données JSON (application/json) et ensuite utiliser AJAX pour appeler en arrière et récupérer la base de données sur les événements qui se sont produits dans le navigateur. Si vous souhaitez que votre application d'être très interactif ci-dessus et au-delà de ce OpenLayers fournit, ce pourrait être intéressant de la complexité supplémentaire, mais bien sûr tout dépend des besoins de votre application.
Une autre solution consiste à créer un formulaire qui utilise la GeoDjango widget d'administration.
Pour ce faire, j':
Installation d'un GeneratePolygonAdminClass:
Où le formulaire est construit:
De peupler le widget de la forme:
Basé sur le code:
http://code.djangoproject.com/browser/django/branches/gis/django/contrib/gis/admin/options.py?rev=7980
Il ressemble, vous pouvez utiliser le extra_js option pour inclure OpenStreetMap (je n'ai pas testé).
C'est assez vieux, et je ne voudrais pas aller autour de la création d'un modèle de hack que j'était à l'origine de la pensée. Maintenant, je voudrais utiliser leaflet.js avec une requête ajax, un django vue qui renvoie geojson à une notice geojson couche.
Cela rend le django côté super facile.
Échantillon De Django Vue:
Vous pourriez envisager d'utiliser FloppyForms. En fin de compte, j'ai l'habitude de finir la personnalisation de la solution à mes propres besoins, mais c'est une belle manière de commencer.
Checkout ce tutoriel à partir de la geodjango-de base-apps projet:
http://code.google.com/p/geodjango-basic-apps/wiki/FOSS4GWorkshop
peut-être que vous n'avez pas de pirater votre propre javascript juste encore