标签: geodjango

如何在给定坐标(字符串类型的纬度和经度)中查询最近的记录?

我正在使用GeoDjango和PostGIS.然后我就如何从我的postgres db表中的给定坐标获取最近的记录而遇到麻烦.

python postgresql postgis geodjango

13
推荐指数
3
解决办法
4615
查看次数

Django:找不到 GDAL 库(OSX)

在我的旧 MacBook 坏掉后,我正在将我一直在构建的 Django Web 应用程序转移到我的新机器(MacBook Pro M1 2021)上。我目前正在为应用程序重新安装正确的软件包和扩展。

但是,当我这样做时,我目前收到以下错误python3 manage.py runserver

django.core.exceptions.ImproperlyConfigured: Could not find the GDAL library 
(tried "gdal", "GDAL", "gdal3.3.0", "gdal3.2.0", "gdal3.1.0", 
"gdal3.0.0", "gdal2.4.0", "gdal2.3.0", "gdal2.2.0", "gdal2.1.0", "gdal2.0.0"). 
Is GDAL installed? If it is, try setting GDAL_LIBRARY_PATH in your settings.
Run Code Online (Sandbox Code Playgroud)

我创建的数据库是通过 Postgres.app 上的服务器创建的,我相信它是与 PostGIS、GDAL 等打包在一起的。

我也跑过pip3 install GDAL并且brew install GDAL

我尝试遵循geoDjango 文档,并在终端中添加了以下内容:

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/14/bin
Run Code Online (Sandbox Code Playgroud)

当我运行时which psql它返回:/Applications/Postgres.app/Contents/Versions/14/bin/psql

我想不通。

错误的完整回溯:

Watching for file changes with StatReloader
Exception in …
Run Code Online (Sandbox Code Playgroud)

django postgis gdal geodjango postgis-installation

13
推荐指数
1
解决办法
1万
查看次数

如何在geodjango中使用OpenStreetMap的openlayers显示数据?

我已经使用openlayersOpenStreetMaps运行管理应用程序运行geodjango .

现在我想写一些视图来显示数据.基本上,我只想在地图中添加一个点列表(在管理员中看到).

Geodjango似乎使用了一个特殊的 openlayers.js文件来管理它.有没有一种很好的方式与此接口?

如何编写视图/模板以在打开的街道地图窗口中显示geodjango数据,如管理员所示?

目前,我正在挖掘openlayers.js文件和api寻找一个"简单"的解决方案.(我没有经验,所以这需要一些时间.)

我可以看到的当前方式是将以下内容添加为模板,并使用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 …
Run Code Online (Sandbox Code Playgroud)

python mapping geodjango openlayers

12
推荐指数
2
解决办法
2万
查看次数

有谁知道任何好的开源Geodjango应用程序要挖掘?

我想在业余时间建立一个小型GIS,并一直在挖掘Geodjango.

我一直试图找到开源Geodjango项目的例子,但我运气不好,所以我在这里.我已经浏览了大部分可以找到的教程,但它们似乎都停留在同一点上,我很想看一些更复杂的现实代码.

有人知道我能在哪里找到一些吗?任何东西都足够了,但使用Google Earth API而不是Open Layers的东西是理想的.

gis geodjango

12
推荐指数
2
解决办法
5389
查看次数

GeoDjango:如何根据点和半径创建圆

我有以下(简化)模型:

class Zone(gismodels.Model):
    name = gismodels.CharField()
    poly = gismodels.PolygonField()
Run Code Online (Sandbox Code Playgroud)

我想基于给定的点和半径创建并保存表示圆的多边形.

我可以弄清楚如何实现这一点的唯一方法是使用原始SQL调用postgis ST_Buffer函数.我真的希望还有另一种方式.

是否可以访问GEOS缓冲区方法?

gis django geodjango geos

12
推荐指数
1
解决办法
5433
查看次数

GeoDjango LayerMapping和外键

我正在尝试使用GeoDjango的LayerMapping功能将我的KML文件导入模型.我正在进行测试,在进行常规导入时没有问题.但是,我最近在我的模型中添加了一个外键.我的模型叫做PlaceMark,它现在有一个名为Layer的模型的FK.我想要

  1. 覆盖导入并手动设置外键字段的值或
  2. 更新我的KML文件以包含一个新元素,该元素通过Layer的pk或name字段将PlaceMark连接到图层.

这是我如何从shell测试和相关的错误:

>>>from locator import load
>>>load.run()
...
TypeError: ForeignKey mapping must be of dictionary type.
....
Run Code Online (Sandbox Code Playgroud)

这是我的load.py档案:

import os
from django.contrib.gis.utils import LayerMapping
from models import PlaceMark

placemark_mapping = {
    'name' : 'Name',
    'description' : 'Description',
    # This line below is the one that is suspect #
    'layer': 'Layer',
    'geom' : 'POINT25D',
}

placemark_kml = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data/claim.kml'))

def run(verbose=True):
    lm = LayerMapping(PlaceMark, placemark_kml, placemark_mapping,
                      transform=False, encoding='iso-8859-1')

lm.save(strict=True, verbose=verbose)
Run Code Online (Sandbox Code Playgroud)

KML文件:

<?xml version="1.0" encoding="Windows-1252"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Folder> …
Run Code Online (Sandbox Code Playgroud)

python django geodjango

12
推荐指数
2
解决办法
1089
查看次数

如何分配Django PointField模型属性?

嗨我有一个Django模型如下:

class Address(models.Model):
    geoCoords = models.PointField(null=True, blank=True,)
Run Code Online (Sandbox Code Playgroud)

现在我创建一个这个模型的实例:

A = Address()
Run Code Online (Sandbox Code Playgroud)

如何将A的geoCoord字段的坐标设置为(5.3,6.2)?我找不到以这种方式分配点字段的任何示例.这是一个非常简单的问题.实际上,我想分配给A.geoCord的坐标来自pygeocoder.它是一个2项元组的花车.

关于Django PointFields的文档基本上是不存在的.

python django geodjango

12
推荐指数
2
解决办法
1万
查看次数

Geo Django从纬度和经度获得城市

我正在学习如何使用Geo Django.当用户注册时,我保存纬度和经度信息,如下所示:

from django.contrib.gis.db import models
from django.contrib.gis.geos import Point

class GeoModel(models.Model):
    """
    Abstract model to provide GEO fields.
    """
    latitude = models.FloatField(blank=True, null=True, verbose_name='Latitude')
    longitude = models.FloatField(blank=True, null=True, verbose_name='Longitude')
    location = models.PointField(blank=True, null=True)

    class Meta:
        abstract = True

    def save(self, *args, **kwargs):
        if self.latitude and self.longitude:
            self.location = Point(float(self.latitude), float(self.longitude))
        super(GeoModel, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

接下来我想添加一个名为city**的新字段**我想存储城市"名称",即伦敦基于给出的长和纬度细节.

我已经看过django-cities从Geo Name保存城市数据库的位置,但这看起来有些过分而且不兼容Python 3所以不适合我.我见过一个名为geopy的软件包,但这似乎完全取代了Geo Django并使用了带有限制的Google API.

我想坚持使用Geo Django并以某种方式进行查找以找出基于long和lat的城市名称,那么我的选择是什么?即.

  1. 找到一种安装方式http://www.geonames.org/ data django-cities不适用于Python 3和Django 1.8.x.
  2. 不知何故使用Geo Django使用数据进行查找?(不确定要做到这一点)

接近这个是正确的方法吗?如果是这样,我如何将数据存入我的数据库,然后使用Geo Django查找城市名称?

python django geodjango

12
推荐指数
1
解决办法
2105
查看次数

我的PostGIS数据库看起来不错,但GeoDjango认为不是......为什么?

我正在尝试设置一个GeoDjango应用程序来测试我遇到的早期问题.我已经建立了一个postgresql数据库,创建了一个新的Django项目和应用程序,但是当我尝试时./manage.py syncdb我得到了这个:

django.core.exceptions.ImproperlyConfigured:无法确定数据库"django_geotest"的PostGIS版本.GeoDjango至少需要PostGIS 1.3版.是否从空间数据库模板创建了数据库?

我不明白,因为我之前已经完成了GeoDjango的所有安装要求,并django_geotest通过这样做创建了这个数据库:

$ createdb -T template_postgis django_geotest
Run Code Online (Sandbox Code Playgroud)

看起来数据库设置正确:

django_geotest=# SELECT PostGIS_full_version();
                                     postgis_full_version                                          
-------------------------------------------------------------------------------------------------------
 POSTGIS="1.5.3" GEOS="3.2.2-CAPI-1.6.2" PROJ="Rel. 4.7.1, 23 September 2009" LIBXML="2.7.3" USE_STATS
(1 row)
Run Code Online (Sandbox Code Playgroud)

描述数据库,我得到这个:

django_geotest=# \d                
             List of relations
 Schema |       Name        | Type  | Owner 
--------+-------------------+-------+-------
 public | geography_columns | view  | phil
 public | geometry_columns  | table | phil
 public | spatial_ref_sys   | table | phil
(3 rows)
Run Code Online (Sandbox Code Playgroud)

所以现在我不知道接下来要尝试什么...我对postgresql及其模板等的了解并不是那么好.有任何想法吗?谢谢.

django postgresql postgis geodjango

11
推荐指数
2
解决办法
4301
查看次数

Pointfield的纬度/经度小部件?

PointField是否有一个小部件作为单独的纬度/经度输入?就像DateTimeField的SplitDateTimeWidget一样.

django django-forms geodjango

11
推荐指数
3
解决办法
6122
查看次数