django是否有任何可以查看地理坐标(十进制纬度/长度)并确定是否在具有一定半径的圆圈内(比如100公里)?
我有某种类型的数据,每个都有一个纬度/经度,我想在数据库中进行搜索,以查看该数据是否位于具有指定半径大小的圆内.
我本可以自己编写一些可以处理这个问题的东西,但是如果有一些已经写好的内容可以解决这个问题我会徘徊
我正在尝试将坐标信息添加到我的数据库,添加django.contrib.gis对我的应用程序的支持.我正在编写一个south数据迁移,它从数据库中获取地址,并向Google询问坐标(到目前为止,我认为我最好的选择是geopy用于此).
接下来我需要将返回的坐标从WGS84:4326Google的坐标系转换为WGS84:22186我的坐标系.
我迷失在试图找到办法的GeoDjango文档中.到目前为止,我认为我需要这样做:
gcoord = SpatialReference("4326")
mycoord = SpatialReference("22186")
trans = CoordTransform(gcoord, mycoord)
Run Code Online (Sandbox Code Playgroud)
但后来,我不知道如何使用该CoordTransform对象..似乎是GDAL的数据对象使用的,但这对我想做的事情来说太过分了.
使用django-tastypie v0.9.11 django 1.4.1和geodjango.
在geodjango之前,我曾经将我的lat和lng值直接保存到我的模型中.然后,当我调用API时,我只是轻松地提取我的值.像这样的东西:
{
"id": "1",
"lat": "-26.0308215267084719",
"lng": "28.0101370772476450",
"author": "\/api\/v1\/user\/3\/",
"created_on": "2012-07-18T14:33:31.081105",
"name": "qweqwe",
"updated_on": "2012-09-06T14:17:01.658947",
"resource_uri": "\/api\/v1\/spot\/1\/",
"slug": "qweqwe"
},
Run Code Online (Sandbox Code Playgroud)
现在我已经升级了我的webapp以使用geodjango,现在我将我的信息存储在PointField()中.现在,如果我对我以前制作的API进行相同的调用,我会回复此:
{
"id": "1",
"point": "POINT (28.0101370772476450 -26.0308215267084719)",
"author": "\/api\/v1\/user\/3\/",
"created_on": "2012-07-18T14:33:31.081105",
"name": "qweqwe",
"updated_on": "2012-09-06T14:17:01.658947",
"resource_uri": "\/api\/v1\/spot\/1\/",
"slug": "qweqwe"
},
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,点值不同,因此我的移动应用程序正在破碎.
我的问题是如何从点数字段中获取纬度和经度值,并像以前一样使用查询集返回它们?
我正在尝试使用与geodjango的地理跨度关系来过滤某些项目,但我不明白为什么它不起作用.考虑这个例子:
class Location(models.Model):
name = models.CharField(max_length=32,)
marker = models.PointField(srid=4326) # the marker
objects = models.GeoManager()
class Item(models.Model):
name = models.CharField(max_length=200)
location = models.ForeignKey(Location)
poly = Polygon(
[(0.02780914306640625, 52.158980248467095),
(0.22350311279296875, 52.158980248467095),
(0.22350311279296875, 52.253657959623055),
(0.02780914306640625, 52.253657959623055),
(0.02780914306640625, 52.158980248467095)]
)
Run Code Online (Sandbox Code Playgroud)
如果我查询("一个位置"是数据库中的现有位置)
Item.objects.filter(location__name__exact="A location")
Run Code Online (Sandbox Code Playgroud)
有用.
如果相反,我查询
Item.objects.filter(location__marker__within=poly)
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
---------------------------------------------------------------------------
FieldError Traceback (most recent call last)
/home/mattions/.virtualenvs/ssouk_env/local/lib/python2.7/site-packages/django/core/management/commands/shell.pyc in <module>()
----> 1 Item.objects.filter(location__marker__within=poly)
/home/mattions/.virtualenvs/ssouk_env/local/lib/python2.7/site-packages/django/db/models/manager.pyc in filter(self, *args, **kwargs)
141
142 def filter(self, *args, **kwargs):
--> 143 return self.get_query_set().filter(*args, **kwargs)
144
145 def aggregate(self, *args, **kwargs):
/home/mattions/.virtualenvs/ssouk_env/local/lib/python2.7/site-packages/django/db/models/query.pyc …Run Code Online (Sandbox Code Playgroud) 这可能是一个愚蠢的问题,但我找不到任何明确的答案.
如何更改Django Admin中的显示,以便Pointfield不会像OpenLayer Map那样显示,而是显示为常规输入字段.我需要查看long,lat进行调试..
我必须更改字段类型吗?小工具?
谢谢!
我正在使用Django 1.6和Postgres/PostGIS(GeoDjango).我注意到当我从1.5升级到1.6时,我无法再通过管理页面使用WKT添加空间数据.以前,我可以将要显示的几何体的WKT粘贴到文本框中.现在,当我转到管理页面时,会显示一个允许我编辑几何图形的地图,但我无法添加数据.
是否有一个简单的修复程序,允许我禁用显示此地图?
我正在设置Django项目running tests.但我得到以下错误:
Got an error creating the test database: permission denied to copy database "template_postgis"
Run Code Online (Sandbox Code Playgroud)
注意:我的默认应用程序的数据库工作正常.的issue is happening while running tests.
完整的堆栈跟踪如下:
moin@moin-pc:~/workspace/mozio$ python manage.py test --verbosity=3
nosetests --verbosity=3
nose.config: INFO: Ignoring files matching ['^\\.', '^_', '^setup\\.py$']
Creating test database for alias 'default' ('test_my_db')...
Got an error creating the test database: permission denied to copy database "template_postgis"
Type 'yes' if you would like to try deleting the test database 'test_mozio_db_test', or 'no' to cancel: yes …Run Code Online (Sandbox Code Playgroud) 我使用GeoDjango和PostGIS作为后端.我有几个geojson文件,其功能如下例所示.GeoDjango提供了导入形状文件和其他格式但geojson格式的信息.如何将这些geojson文件导入数据库?
"features": [
{ "type": "Feature", "properties": { "SubName": "X", "SubSubName": "A" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 70.693828, 37.074496 ], [ 70.693828, 37.074496 ] ] ] } }
,
{ "type": "Feature", "properties": { "SubName": "X", "SubSubName": "B" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 70.502913, 27.065997 ], [ 70.502913, 27.065997 ] ] ] } }
Run Code Online (Sandbox Code Playgroud)
我有两个核心要求:
如果有关于GeoDjango的PostGIS使用和导入文件的适当文档,那将是很棒的.
提前致谢.
我正在尝试使Django的SQLite3接受空间查询。本教程建议将其添加到设置中:
SPATIALITE_LIBRARY_PATH = 'mod_spatialite'
Run Code Online (Sandbox Code Playgroud)
产生此错误:
django.core.exceptions.ImproperlyConfigured:无法加载SpatiaLite库扩展“ mod_spatialite”,因为:找不到指定的模块。
我也尝试这样做:
SPATIALITE_LIBRARY_PATH = r'C:\\Program Files (x86)\\Spatialite\\mod_spatialite-4.3.0a-win-x86\\mod_spatialite-4.3.0a-win-x86\\mod_spatialite.dll'
Run Code Online (Sandbox Code Playgroud)
如果不添加此变量,则在迁移时会收到此错误:
django.core.exceptions.ImproperlyConfigured:无法找到SpatiaLite库。确保它在您的库路径中,或在设置中设置SPATIALITE_LIBRARY_PATH。
谢谢..
我有一个GeoDjango实例连接到PostGIS数据库后端。当我查询此数据库中的表时,出现标题错误:
AttributeError: 'DatabaseOperations' object has no attribute 'select'
Run Code Online (Sandbox Code Playgroud)
如在其他地方建议的那样,我检查以确保我的local_settings.py文件指定了正确的数据库引擎:'ENGINE': 'django.contrib.gis.db.backends.postgis'。这在我的设置文件中已经是正确的。
您如何解决此问题?
django ×10
geodjango ×10
python ×6
postgis ×3
geolocation ×2
geopy ×2
admin ×1
api ×1
django-1.10 ×1
django-admin ×1
gis ×1
maps ×1
point ×1
python-2.7 ×1
spatial ×1
sqlite ×1
tastypie ×1