试图在我的机器上安装GeoDjango.我是Python的新手,并被带入一个对其他团队成员来说非常棘手的安装项目.我使用brew安装了Python 2.7和GEOS,并运行了PSQL 9.2.4但是当我尝试运行webserver时仍然遇到此错误:
__import__(name)
File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site
packages/django/contrib/gis/geometry/backend/geos.py", line 1, in <module>
from django.contrib.gis.geos import (
File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site
packages/django/contrib/gis/geos/__init__.py", line 6, in <module>
from django.contrib.gis.geos.geometry import GEOSGeometry, wkt_regex, hex_regex
File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site
packages/django/contrib/gis/geos/geometry.py", line 14, in <module>
from django.contrib.gis.geos.coordseq import GEOSCoordSeq
File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site-
packages/django/contrib/gis/geos/coordseq.py", line 9, in <module>
from django.contrib.gis.geos.libgeos import CS_PTR
File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site-
packages/django/contrib/gis/geos/libgeos.py", line 119, in <module>
_verinfo = geos_version_info()
File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site
packages/django/contrib/gis/geos/libgeos.py", line 115, in geos_version_info
if not m: raise GEOSException('Could not parse version info string "%s"' % ver) …
Run Code Online (Sandbox Code Playgroud) 我正在尝试heroku run python manage.py syncdb
在Heroku上运行我的GeoDjango应用程序,但是我收到以下错误:
AttributeError:'DatabaseOperations'对象没有属性'geo_db_type'
所有 的 我的 研究已经取得了相同的解决方案:确保使用django.contrib.gis.db.backends.postgis
的数据库引擎.有趣的是,我已经这样做了(我也有django.contrib.gis
在INSTALLED_APPS
):
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': '...',
'HOST': '...',
'PORT': ...,
'USER': '...',
'PASSWORD': '...'
}
}
INSTALLED_APPS = (
...,
'django.contrib.gis',
)
Run Code Online (Sandbox Code Playgroud)
还有其他我想念的东西吗?非常感谢任何帮助,下面是完整的错误跟踪供参考:
Running `python manage.py syncdb` attached to terminal... up, run.1
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table …
Run Code Online (Sandbox Code Playgroud) 我希望使用经度和纬度来存储我的用户位置,目前这是来自谷歌地图,但我将使用GeoDango和一些点来计算点到点之间的距离.
然而,我的第一个困惑是我应该使用Django中的哪个字段来存储经度和纬度值?我得到的信息是冲突的.
官方文档使用FloatField
https://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/#geographic-models
lon = models.FloatField()
lat = models.FloatField()
Run Code Online (Sandbox Code Playgroud)
几乎所有关于stackoverflow的答案都显示了 DecimalField
long = models.DecimalField(max_digits=8, decimal_places=3)
lat = models.DecimalField(max_digits=8, decimal_places=3)
Run Code Online (Sandbox Code Playgroud)
那么我应该使用什么?
我正在尝试将一个SHP文件放入我的PostGIS数据库中,数据有点偏差.我想这是因为我使用了错误的SRID.PRJ文件的内容如下:
GEOGCS["GCS_North_American_1983",
DATUM["D_North_American_1983",
SPHEROID["GRS_1980",6378137.0,298.257222101]],
PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]]
Run Code Online (Sandbox Code Playgroud)
SRID与此相关的是什么?更一般地说,如何根据PRJ文件中的信息查找SRID?在某个地方是否有一个列出所有SRID及其"geogcs"等价物的查找表?
作为参考,这里是使用导入的一些数据的图像srid=4269
(我也尝试了4326并获得了完全相同的结果):
图片http://img245.imageshack.us/img245/2545/4326sand.png
黄色是我从SHP导入的数据,背景来自openlayers(来自geodjango admin).这是否意味着我使用了错误的SRID,或者这只是预期的误差范围?
shp文件来自这里
我正在尝试推出GeoDjango应用.我在Lion上使用brew安装了Postgres和PostGIS.我创建使用template_postgis数据库:createdb -T template_postgis test
.
当我运行时python manage.py syncdb
,我收到以下错误:
django.core.exceptions.ImproperlyConfigured:无法确定数据库"test"的PostGIS版本.GeoDjango至少需要PostGIS 1.3版.是否从空间数据库模板创建了数据库?
如何追踪错误来源?我已经检查过用户和传递配置是否可以访问数据库等.
我有一个带有PointField属性的地理模型.一切都在本地完美,但当我尝试在服务器上保存实例时,我收到以下错误:
django.db.utils.DatabaseError: invalid byte sequence for encoding "UTF8": 0x00
Run Code Online (Sandbox Code Playgroud)
我挖掘了源代码,发现值的序列化方式不同; 具体而言,在服务器上执行查询之前,该值未被转义.它似乎正在进行转义psycopg2.Binary.getquoted()
,当然,它不会在服务器上返回正确的值.
在我的机器上:
from psycopg2 import Binary
Binary('\0').getquoted() # > "'\\\\000'::bytea"
Run Code Online (Sandbox Code Playgroud)
在服务器上:
from psycopg2 import Binary
Binary('\0').getquoted() # > "'\\000'::bytea"
Run Code Online (Sandbox Code Playgroud)
好的,这解释了为什么它认为我试图插入一个空字节.(因为我.)所以现在我已经足够了解Jonathan S.在django-users组中找到类似的报告会出现什么问题但是,就像Jonathan一样,我不知道这是错误还是配置错误.
有人能指出我正确的方向吗?
以下是有关设置的一些信息:
My computer Server
OS OSX 10.7 CentOS 5.5
Python 2.7 2.6
Django 1.3 1.3
Postgres 9.0.4 9.9.1
postgis 1.5.2 1.5.3-2.rhel5
geos 3.3.0 3.3.0-1.rhel5
Run Code Online (Sandbox Code Playgroud) 我有以下型号:
class Vacancy(models.Model):
lat = models.FloatField('Latitude', blank=True)
lng = models.FloatField('Longitude', blank=True)
Run Code Online (Sandbox Code Playgroud)
我应该如何进行查询以按距离排序(距离是无穷大)?
如果需要,可以使用PosgreSQL,GeoDjango.
谢谢.
class SinglePoint(models.Model):
attributes = models.TextField(blank=True)
name = models.CharField(max_length=100)
geom = models.PointField() #Kartenposition
objects = models.GeoManager()
class Connection(models.Model):
name = models.CharField(max_length=100)
#points = models.ManyToManyField(SinglePoint) #OLD
p1 = models.ForeignKey(SinglePoint, related_name='p1_set') #NEW
p2 = models.ForeignKey(SinglePoint, related_name='p2_set') #NEW
obs = models.ManyToManyField(Observation, blank=True)
conds = models.ManyToManyField(Condition, blank=True)
objects = models.GeoManager()
class Meta:
order_with_respect_to = 'p1'
Run Code Online (Sandbox Code Playgroud)
在我的view.py中:
...
p1_points = SinglePoint.objects.filter(p1_set__vektordata__order__project__slug=slug)
p2_points = SinglePoint.objects.filter(p2_set__vektordata__order__project__slug=slug)
...
Run Code Online (Sandbox Code Playgroud)
在我切换到ForeignKey之前,它适用于:
points = SinglePoint.objects.filter(connection__vektordata__order__project__slug=slug)
Run Code Online (Sandbox Code Playgroud)
如何将这两个QuerySet"连接"到一个QuerySet并创建一个distinct()?
谢谢!
所以我正在浏览GeoDjango教程并且我坚持这个错误消息:
postgres@lucid32:~$ createdb -E UTF8 template_postgis
createdb: database creation failed: ERROR: encoding UTF8 does not match locale en_US
DETAIL: The chosen LC_CTYPE setting requires encoding LATIN1.
Run Code Online (Sandbox Code Playgroud)
我用Google搜索并阅读了一些Ubuntu文档,但无济于事.任何见解将不胜感激!
我正在使用默认的Vagrant Box清晰32,用于测试我的设置.
我一直在使用django和mysql开发应用程序,我现在正在尝试从这里开始学习这个教程
http://docs.djangoproject.com/en/1.2/ref/contrib/gis/tutorial/
但是当我运行syncdb时出现以下错误,它失败了
AttributeError: 'DatabaseOperations' object has no attribute 'geo_db_type'
Run Code Online (Sandbox Code Playgroud)
当我阅读时,它说如果改变后端使用postGIS,这可以解决.有没有办法继续使用mysql作为我的后端,但能够使用geodjango?如果没有,是否可以在同一个项目中使用它们?
问候,