简体   繁体   English

GeoDjango - Python:无法显示地图

[英]GeoDjango--Python:Can't Display Map

I'm getting troubled (more troubled i guess) in displaying my map (from postgresql database) under Geodjango environment. 我在Geodjango环境下显示我的地图(来自postgresql数据库)时遇到了麻烦(我觉得更麻烦)。 . i had already successfully imported my shapefile into Posgresql database. 我已经成功将我的shapefile导入Posgresql数据库。 Yet, I cannot view my maps whenever I tried to. 然而,每当我尝试时,我都无法查看我的地图。 . i also followed the steps in installing all the libraries needed, django, python and postgresql. 我还按照安装所需库,django,python和postgresql的步骤进行操作。 .

I am new to Geodjango that's why I cannot trace errors. 我是Geodjango的新手,这就是我无法追踪错误的原因。 . and actually i dont nknow how. 实际上我不知道怎么做。 . maybe i could get help from you guys. 也许我可以得到你们的帮助。 .

I always get these errors. 我总是得到这些错误。 . it talks about templates. 它谈论模板。 . i have also my template folder on my project folder. 我的项目文件夹上还有我的模板文件夹。 . yet its empty and dont know what it is for. 但它是空的,不知道它是什么。 .

can you please help me out on this. 你可以帮我解决这个问题。 ?

more thanks to you and i really appreciate you guys for helping out. 更多,谢谢你,我非常感谢你们帮忙。 .

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/admin/APPLICATION/worldborder/245/

Django Version: 1.6.1
Python Version: 2.7.0 
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'APPLICATION')
Installed Middleware:
 ('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')

Template Loader Error:
Django tried loading these templates, in this order:
Using loader django.template.loaders.filesystem.Loader:
Using loader django.template.loaders.app_directories.Loader:
C:\Python27\lib\site-packages\django\contrib\admin\templates\gis\admin\osm.html (File does not exist)
C:\Python27\lib\site-packages\django\contrib\auth\templates\gis\admin\osm.html (File does not exist)
C:\Python27\lib\site-packages\django\contrib\admin\templates\gis\admin\osm.html (File does not exist)



Template error:
In template C:\Python27\lib\site-packages\django\contrib\admin\templates\admin\includes\fieldset.html, error at line 19
  gis/admin/osm.html
  9 :             {% for field in line %}


  10 :                 <div{% if not line.fields|length_is:'1' %} class="field-box{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% if not field.is_readonly and field.errors %} errors{% endif %}"{% elif field.is_checkbox %} class="checkbox-row"{% endif %}>


  11 :                     {% if not line.fields|length_is:'1' and not   field.is_readonly %}{{ field.errors }}{% endif %}


  12 :                     {% if field.is_checkbox %}


  13 :                         {{ field.field }}{{ field.label_tag }}


  14 :                     {% else %}


  15 :                         {{ field.label_tag }}


  16 :                         {% if field.is_readonly %}


  17 :                             <p>{{ field.contents|linebreaksbr }}</p>


  18 :                         {% else %}


  19 :                              {{ field.field }} 


 20 :                         {% endif %}


 21 :                     {% endif %}


 22 :                     {% if field.field.help_text %}


 23 :                         <p class="help">{{ field.field.help_text|safe }}</p>


 24 :                     {% endif %}


 25 :                 </div>


 26 :             {% endfor %}


 27 :         </div>


 28 :     {% endfor %}


 29 : </fieldset>


 Traceback:
 File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
 139.                 response = response.render()
 File "C:\Python27\lib\site-packages\django\template\response.py" in render
 105.             self.content = self.rendered_content
 File "C:\Python27\lib\site-packages\django\template\response.py" in rendered_content
 82.         content = template.render(context)
 File "C:\Python27\lib\site-packages\django\template\base.py" in render
 140.             return self._render(context)
 File "C:\Python27\lib\site-packages\django\template\base.py" in _render
 134.         return self.nodelist.render(context)
 File "C:\Python27\lib\site-packages\django\template\base.py" in render
 840.                 bit = self.render_node(node, context)
 File "C:\Python27\lib\site-packages\django\template\debug.py" in render_node
 78.             return node.render(context)
 File "C:\Python27\lib\site-packages\django\template\loader_tags.py" in render
   123.         return compiled_parent._render(context)
 File "C:\Python27\lib\site-packages\django\template\base.py" in _render
   134.         return self.nodelist.render(context)
 File "C:\Python27\lib\site-packages\django\template\base.py" in render
   840.                 bit = self.render_node(node, context)
 File "C:\Python27\lib\site-packages\django\template\debug.py" in render_node
   78.             return node.render(context)
 File "C:\Python27\lib\site-packages\django\template\loader_tags.py" in render
   123.         return compiled_parent._render(context)
 File "C:\Python27\lib\site-packages\django\template\base.py" in _render
   134.         return self.nodelist.render(context)
 File "C:\Python27\lib\site-packages\django\template\base.py" in render
   840.                 bit = self.render_node(node, context)
 File "C:\Python27\lib\site-packages\django\template\debug.py" in render_node
   78.             return node.render(context)
 File "C:\Python27\lib\site-packages\django\template\loader_tags.py" in render
   62.             result = block.nodelist.render(context)
 File "C:\Python27\lib\site-packages\django\template\base.py" in render
   840.                 bit = self.render_node(node, context)
 File "C:\Python27\lib\site-packages\django\template\debug.py" in render_node
   78.             return node.render(context)
 File "C:\Python27\lib\site-packages\django\template\loader_tags.py" in render
   62.             result = block.nodelist.render(context)
 File "C:\Python27\lib\site-packages\django\template\base.py" in render
   840.                 bit = self.render_node(node, context)
 File "C:\Python27\lib\site-packages\django\template\debug.py" in render_node
   78.             return node.render(context)
 File "C:\Python27\lib\site-packages\django\template\defaulttags.py" in render
   196.                         nodelist.append(node.render(context))
 File "C:\Python27\lib\site-packages\django\template\loader_tags.py" in render
   155.         return self.render_template(self.template, context)
 File "C:\Python27\lib\site-packages\django\template\loader_tags.py" in render_template
   137.         output = template.render(context)
 File "C:\Python27\lib\site-packages\django\template\base.py" in render
   140.             return self._render(context)
 File "C:\Python27\lib\site-packages\django\template\base.py" in _render
   134.         return self.nodelist.render(context)
 File "C:\Python27\lib\site-packages\django\template\base.py" in render
   840.                 bit = self.render_node(node, context)
 File "C:\Python27\lib\site-packages\django\template\debug.py" in render_node
   78.             return node.render(context)
 File "C:\Python27\lib\site-packages\django\template\defaulttags.py" in render
   196.                         nodelist.append(node.render(context))
 File "C:\Python27\lib\site-packages\django\template\defaulttags.py" in render
   196.                         nodelist.append(node.render(context))
 File "C:\Python27\lib\site-packages\django\template\defaulttags.py" in render
   305.                 return nodelist.render(context)
 File "C:\Python27\lib\site-packages\django\template\base.py" in render
   840.                 bit = self.render_node(node, context)
 File "C:\Python27\lib\site-packages\django\template\debug.py" in render_node
   78.             return node.render(context)
 File "C:\Python27\lib\site-packages\django\template\defaulttags.py" in render
   305.                 return nodelist.render(context)
 File "C:\Python27\lib\site-packages\django\template\base.py" in render
   840.                 bit = self.render_node(node, context)
 File "C:\Python27\lib\site-packages\django\template\debug.py" in render_node
   78.             return node.render(context)
 File "C:\Python27\lib\site-packages\django\template\debug.py" in render
   91.             output = force_text(output)
 File "C:\Python27\lib\site-packages\django\utils\encoding.py" in force_text
   100.                 s = s.__unicode__()
 File "C:\Python27\lib\site-packages\django\forms\forms.py" in __str__
   425.         return self.as_widget()
 File "C:\Python27\lib\site-packages\django\forms\forms.py" in as_widget
   475.         return widget.render(name, self.value(), attrs=attrs)
 File "C:\Python27\lib\site-packages\django\contrib\gis\admin\widgets.py" in render
   81.                                        context_instance=geo_context)
 File "C:\Python27\lib\site-packages\django\template\loader.py" in render_to_string
   162.         t = get_template(template_name)
 File "C:\Python27\lib\site-packages\django\template\loader.py" in get_template
   138.     template, origin = find_template(template_name)
 File "C:\Python27\lib\site-packages\django\template\loader.py" in find_template
   131.     raise TemplateDoesNotExist(name)

 Exception Type: TemplateDoesNotExist at /admin/APPLICATION/worldborder/245/
 Exception Value: gis/admin/osm.html

The first map you can create very easily is in your Admin section 您可以轻松创建的第一张地图位于“ 管理”部分

admin.py admin.py

from django.contrib.gis import admin
from .models import MyLayer

admin.site.register(MyLayer, admin.GeoModelAdmin)

urls.py urls.py

from django.conf.urls import patterns, url, include
from django.contrib.gis import admin

admin.autodiscover()

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
)

Check that admin app is enable in settings.py. 检查settings.py中是否启用了管理员应用。

Then go to your navigator localhost/myapp/admin. 然后转到导航器localhost / myapp / admin。 You should see a map in your item's description. 您应该在商品描述中看到地图。


Other way : Get your geom data in python, make a GeoJSON out of it and send it to an OpenLayer map: 其他方法 :在python中获取geom数据,从中生成GeoJSON并将其发送到OpenLayer映射:

requires vectorformats and simplejson packages 需要vectorformats和simplejson包

views.py views.py

#-*- coding: utf-8 -*-
from django.shortcuts import render, redirect
from vectorformats.Formats import Django, GeoJSON

from mysite.models import MyLayer


def geojson(request):
    ly = MyLayer.objects.filter(name='xxx')
    djf = Django.Django(geodjango='mpoly', properties=['name'])
    geoj = GeoJSON.GeoJSON()
    my_geojson = geoj.encode(djf.decode(ly))
    return render(request, "mysite_temp/map.html", {'my_geojson': my_geojson})

In templates, create mysite_temp folder and map.html file. 在模板中,创建mysite_temp文件夹和map.html文件。 If you write only { {my_geojson} } in map.html you will see the content of the GeoJSON 如果您只在map.html中编写{ {my_geojson} } ,您将看到GeoJSON的内容

create OpenLayer map in map.html: 在map.html中创建OpenLayer地图:

<!DOCTYPE html>
<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
        <script src="http://openlayers.org/api/OpenLayers.js"></script> 
    <style>
        html,body {
            height: 99%;
            width: 99%;
        }
        #map {
            width: 100%;
            height: 100%;
            border: 1px solid black;
        }   
    </style>

    <script type="text/javascript">
            var map;

            function init(){
        map = new OpenLayers.Map('map');
                var base_layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
               "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'} );
            map.addLayer(base_layer);

        var layer = new OpenLayers.Layer.Vector("layername");
        map.addLayer(layer);

        var format = new OpenLayers.Format.GeoJSON();
        var feat = format.read({{my_geojson|safe}});  
        layer.addFeatures(feat);

        map.setCenter(new OpenLayers.LonLat(l_val,L_val),zoom_val);
        map.addControl(new OpenLayers.Control.LayerSwitcher());
       }
        </script>
    </head>
    <body onload = "init()">
    <div id="map"></div>
    </body>
</html>

Cheers! 干杯!

How to add StyleMap on each multipolygon with @jcs example 如何使用@jcs示例在每个多面体上添加StyleMap

example

 // Style fuer Polygon
var polygon_style = {

        fillColor : '${color}',
        strokeColor : '${color}',
        strokeOpacity : "0.9",
        fillOpacity : "0.2"
};

geojson_layer = new OpenLayers.Layer.Vector("GeoJSON", {
    projection : projLonLat,
    strategies : [ new OpenLayers.Strategy.Fixed() ],
    protocol : new OpenLayers.Protocol.HTTP({
        url : url_geoJSON_Polygon,
        format : new OpenLayers.Format.GeoJSON()
    }),
    styleMap :new OpenLayers.StyleMap(polygon_style)
});

map.addLayer(geojson_layer);

With this geoJSON 有了这个geoJSON

{
  "type": "Feature",
  "properties": {"color": "#2EFE2E"},
  "geometry": {
    "type": "Point",
    "coordinates": [
      13.41379165649414,
      52.54431222846979
    ]
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM