我已经通过管理应用程序使用openlayers和OpenStreetMaps运行 geodjango 。
现在我想写一些视图来显示数据。基本上,我只想将点列表(在管理员中看到)添加到地图中。
Geodjango 似乎使用了一个特殊的 openlayers.js文件来在管理中发挥它的魔力。有没有一个很好的方法来与这个接口?
如何编写视图/模板以在打开的街道地图窗口上显示 geodjango 数据,如在管理员中所见?
目前,我正在深入研究openlayers.js文件和 api 寻找“简单”的解决方案。(我没有 js 经验,所以这需要一些时间。)
我可以看到的当前方法是将以下内容添加为模板,并使用 django 添加显示点所需的代码。(基于此处的示例)
<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>
这是如何完成的,还是有更好的方法?