标签: geodjango

在PostGIS中,大于世界一半的多边形被视为相反

我正在使用GeoDjango和PostGIS,并尝试使用多边形从数据库中获取记录.

如果我定义一个大于地球面积一半的多边形,则假定我的多边形的"内部"是我打算作为"外部"的较小区域,并仅返回其外部的结果.

我可以使用这个较小的错误区域来排除结果.Polygon.area似乎知道我打算做什么,所以我可以用它来确定何时使我的搜索包含或排除.我觉得这个问题可能很常见,有没有更好的解决方法?

更新:如果180度经度在我的多边形内部,则根本不起作用.看来GEOS这次应该受到指责.这张图片显示了我认为的原因.绿色是我定义的多边形,红色是它似乎解释它的方式.地球上的多边形同样,这似乎是一个经常出现的问题,而且像GEOS这样的图书馆需要处理这个问题.有办法吗?

postgis geodjango geos

6
推荐指数
1
解决办法
660
查看次数

如何使用geodjango返回距离点最近距离的记录?

我正在使用geodjango并在我的数据库中有一个点集合.要获取某个区域内的点的查询集,我使用:

queryset = Spot.objects.filter(point__distance_lte=(origin, distance_m))
Run Code Online (Sandbox Code Playgroud)

我的问题是我怎样才能从我通过的点返回一个点(距离最短的点)?

编辑

我应该提一下,我正在传递坐标并希望Point用它们创建一个对象.然后将该点作为原点传递并对其进行过滤.例如,我尝试过:

from spots.models import *
from django.contrib.gis.geos import *

origin = Point(28.011030, -26.029430)
distance_m = 1000

queryset = Spot.objects.filter(point__distance_lte=(origin, distance_m))
for q in queryset:
    print q.distance
Run Code Online (Sandbox Code Playgroud)

这段代码给了我这个错误:

Traceback (most recent call last):
  File "<console>", line 2, in <module>
AttributeError: 'Spot' object has no attribute 'distance'
Run Code Online (Sandbox Code Playgroud)

有趣的是,如果我执行以下操作:

origin = Spot.objects.get(name='Montecasino').point
distance_m = 1000

for city in Spot.objects.distance(origin):
    print(city.name, city.distance)

(u'Design Quarter Parking', Distance(m=677.347841801))
(u'Montecasino', Distance(m=0.0))
(u'Fourways', Distance(m=1080.67723755))
Run Code Online (Sandbox Code Playgroud)

django geodjango

6
推荐指数
1
解决办法
4232
查看次数

使用gis.db未定义DJANGO_SETTINGS_MODULE

我用的时候

from django.contrib.gis.db import models
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    from django.contrib.gis.db import models
  File "C:\Python27\lib\site-packages\django\contrib\gis\db\models\__init__.py"
, line     2, in <module>
    from django.db.models import *
 File "C:\Python27\lib\site-packages\django\db\__init__.py", line 11, in <module>
   if DEFAULT_DB_ALIAS not in settings.DATABASES: 
  File "C:\Python27\lib\site-packages\django\utils\functional.py", line 184,
 in inner
   self._setup()
  File "C:\Python27\lib\site-packages\django\conf\__init__.py", line 40,
 in _setup
     raise ImportError("Settings cannot be imported, because environment 
variable %s 
is    undefined." % ENVIRONMENT_VARIABLE)
ImportError: Settings cannot be imported, because environment variable   
DJANGO_SETTINGS_MODULE is undefined. …
Run Code Online (Sandbox Code Playgroud)

python geodjango

6
推荐指数
1
解决办法
229
查看次数

基于django地址的谷歌地图位置

我正在 django 中开发一个 web 应用程序,我想构建一个功能,在这个功能中,一个人可以在文本框中输入一个位置名称,相应的位置显示在下一页谷歌地图的中心。

请让我知道可以在 Django 中完成此操作的详细方法

先感谢您!

django geodjango google-maps-api-3

5
推荐指数
1
解决办法
4606
查看次数

heroku PostGIS syncdb错误

我无法在heroku上运行一个简单的GeoDjango应用程序.我为我的数据库创建了postgis扩展,但是我无法在不收到以下错误的情况下运行syncdb:

from django.contrib.gis.geometry.backend import Geometry
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/gis/geometry/backend/__init__.py", line 14, in <module>
'"%s".' % geom_backend)
django.core.exceptions.ImproperlyConfigured: Could not import user-defined GEOMETRY_BACKEND "geos".
Run Code Online (Sandbox Code Playgroud)

我有什么想法我做错了吗?也有人知道在heroku上运行一个简单的geodjango项目的教程吗?谢谢你的帮助

django postgis heroku geodjango geos

5
推荐指数
1
解决办法
936
查看次数

GeoDjango PointField 管理可视化

我想知道如何在 admin 中更改默认的 PointField 可视化(Openstreetmap),以便我可以输入简单的纬度/经度而不是在地图上选择一个点?

我看着这个点域的纬度/经度小部件?但无法在 Django 1.6b4 中以任何方式工作

谢谢

django-admin geodjango

5
推荐指数
2
解决办法
2397
查看次数

GeoDjango 和 Postgis 中以米为单位的距离内位置的最佳查询

我在具有 GeoDjango 的默认 SRID、WGS84 的 Postgis 数据库中有几何图形,并且发现直接以度为单位的查找比以公里为单位要快得多,因为数据库可以跳过我认为的投影。

基本上,Place.objects.filter(location__distance__lte=(point, D(km=10)))Place.objects.filter(location__dwithin=(point, 10))第一个查询产生表的完整扫描慢几个数量级。但有时我需要查找以公里为单位的距离阈值的地方。

是否有某种精确的方法将 10 公里转换为查询的度数?也许我应该使用另一个具有相同性能的等效查找?

gis django postgis geolocation geodjango

5
推荐指数
1
解决办法
1349
查看次数

Geodjango 中的 OSError: [WinError 127] : 找不到指定的过程

我尝试使用Djangowith Geodjango,我遵循了所有文档步骤,但在尝试进行迁移时仍然遇到此错误:

OSError: [WinError 127] : The specified procedure could not be found
Run Code Online (Sandbox Code Playgroud)

models.py是正确的,我正在从网站使用geodjango,这是我的settings.py

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'ci3qd6ti+d+#-4pae7d*)^8nmmgb2j@cacivgt8rdvsngu2$mj'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []


# …
Run Code Online (Sandbox Code Playgroud)

python django geodjango python-3.x

5
推荐指数
1
解决办法
7280
查看次数

如何有效地将数据从 geopandas 保存到 django(从 shapely 转换为 geodjango)?

我正在操作 GIS 数据并将geopandas其存储在各种Django模型中。 在引擎盖下geopandas使用,而没有。 shapelyDjango

这是一些代码:

import geopandas as gpd
from django.contrib.gis.db import models

class MyModel(models.Model):
  geometry = models.PolygonField()
  name = models.CharField(max_length=255, null=False, unique=True)
  some_property = models.IntegerField()

gdf = gpd.read_file("some_data.geojson")
# ...do some stuff w/ gdf...

for data in gdf.to_dict("records"):
  name = data.pop("name")
  MyModel.objects.create_or_update(
    name=name,
    defaults=data,
  )
Run Code Online (Sandbox Code Playgroud)

上面的代码将会失败,并出现以下错误:

类型错误:无法使用类型值设置 MyModel SpatialProxy (POLYGON):<class 'shapely.geometry.polygon.Polygon'>

除非我添加一些讨厌的代码,例如:

from django.contrib.gis.geos import fromstr, Polygon 
data["geometry"] = Polygon(fromstr(str(data["geometry"])))
Run Code Online (Sandbox Code Playgroud)

有没有办法避免这种情况并直接映射 from shapelyto Django


编辑

以下是一些值:

>> data["geometry"] …
Run Code Online (Sandbox Code Playgroud)

python django geodjango shapely geopandas

5
推荐指数
1
解决办法
3754
查看次数

在 Docker 中安装地理空间库

Django 的官方文档列出了开始开发 PostGIS 应用程序所需的 3 个依赖项。他们根据数据库列出一个表。

我使用 docker 进行本地开发,但我很困惑哪些包应该安装在 Django 容器中,哪些包应该安装在 PostgreSQL 容器中。我猜其中一些应该同时存在。

我将非常感谢您对此的帮助。

django postgresql postgis gdal geodjango

5
推荐指数
1
解决办法
1614
查看次数