如何在geodjango中获取MultiPolygon对象的边界框?在API http://geodjango.org/docs/geos.html中找不到任何内容......
我正在 django 中开发一个 web 应用程序,我想构建一个功能,在这个功能中,一个人可以在文本框中输入一个位置名称,相应的位置显示在下一页谷歌地图的中心。
请让我知道可以在 Django 中完成此操作的详细方法
先感谢您!
我正在尝试使用GeoDjango构建我的第一个GIS应用程序,在开始之前我有几个问题:
第一:GeoDjango与谷歌地图有什么关系?它只是处理信息,然后传递给谷歌地图等服务?
如果这是真的,那么使用GeoDjango与简单地在数据库中存储纬度/经度并将它们传递给谷歌地图有什么好处?
假设上述所有情况都属实,如果我突然想要改变地图提供者(从谷歌到Bing,我们可以说),GeoDjango是否更容易和更模块化?
我在理解GeoDjango和地图服务之间的关系时遇到了一些麻烦,如果有人可以通过一些例子为我澄清这一点,那就太棒了.
下一步:如果我在GeoDjango中有一个我希望集成的现有项目使用MySQL,我是否应该将所有内容移到PostgreSQL上,因为GeoDjango与MySQL不兼容?我应该怎么做数据库?
我无法在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项目的教程吗?谢谢你的帮助
我想知道如何在 admin 中更改默认的 PointField 可视化(Openstreetmap),以便我可以输入简单的纬度/经度而不是在地图上选择一个点?
我看着这个点域的纬度/经度小部件?但无法在 Django 1.6b4 中以任何方式工作
谢谢
我在具有 GeoDjango 的默认 SRID、WGS84 的 Postgis 数据库中有几何图形,并且发现直接以度为单位的查找比以公里为单位要快得多,因为数据库可以跳过我认为的投影。
基本上,Place.objects.filter(location__distance__lte=(point, D(km=10)))比Place.objects.filter(location__dwithin=(point, 10))第一个查询产生表的完整扫描慢几个数量级。但有时我需要查找以公里为单位的距离阈值的地方。
是否有某种精确的方法将 10 公里转换为查询的度数?也许我应该使用另一个具有相同性能的等效查找?
在工作的django 1.9应用程序中设置geodjango时我遇到了这个错误.
我的应用程序生活在亚马逊EC2实例和RDS postgres实例中.
错误是:
django.core.exceptions.ImproperlyConfigured: 'django.contrib.gis.db.backends.postgis' isn't an available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
'mysql', 'oracle', 'postgresql', 'sqlite3
Run Code Online (Sandbox Code Playgroud)
我做了什么:
修改我的项目settings.py以包括:
修改我的app models.py以从django.contrib.gis.db导入模型,而不是django.db
有什么猜测我错过了吗?
在我的项目中,我需要从shapefiles导入一些几何图形。
其中一些是MULTIPOLYGON Z类型,但所有 Z 坐标都是 0 值。
当我尝试保存几何图形时,出现错误:
“几何有 Z 维度,但列没有”
剥离 Z 维度的最佳方法是什么?
我的代码:
ds = DataSource(file_path, encoding='ISO-8859-1')
layers = ds[0]
#need something HERE to coerce geometry to 2D
obj=MyModel(geometry=GEOSGeometry(layers[0].geom.hex))
obj.save()
Run Code Online (Sandbox Code Playgroud) 我一直在寻找一个最新且特定于我的问题的解决方案,但是还没有找到解决方案或明确的文档来说明我真正需要做的事情,以便使关系变得平坦以符合geojson.
这个问题几乎与我的问题相同,但是解决方案或答案并没有解决问题,仍然会产生无效的GeoJSON.
我有一个Location模型,其中包含pointfieldSRID = 4326.我也有一个TrainStation有模型location字段作为外键来Location.当我序列化TrainStation经由GeoFeatureModelSerializer其产生无效GeoJSON的(参见实施例下面的"无效GeoJSON的").
(当然,如果我PointField将TrainStation模型存储在哪里,可以获得有效的GeoJSON ,但在我的情况下,我不能这样做,所以我需要以某种方式压扁它.)
我是Python和Django的新手,因此我还不太擅长阅读其他人的源代码,但我想我可以得出结论,我需要以某种方式覆盖该to_representation()方法以获得我想要的东西,但我的搜索是如此没有结果,所以我被卡住了.
class Location(models.Model):
point = models.PointField()
class TrainStation(models.Model):
location_signature = models.CharField(primary_key=True, max_length=32)
advertised_location_name = models.CharField(max_length=32)
country_code = models.ForeignKey(Country)
county_no = models.ForeignKey(County)
location = models.ForeignKey(Location, null=True)
Run Code Online (Sandbox Code Playgroud)
class LocationSerializer(ModelSerializer):
class Meta:
model = Location
geo_field = 'point'
fields = …Run Code Online (Sandbox Code Playgroud) django geodjango geojson django-rest-framework django-rest-framework-gis
序幕:
这是在SO中经常出现的一个问题:
我想撰写一个关于SO文档的示例,但是geodjango本章从未停止过,并且自从文档于2017年8月8日关闭以来,我将遵循这个广受赞誉并讨论了元答案的建议,并将我的示例写为自我回答发布。
当然,我也很高兴看到任何其他方法!!
题:
假设模型:
class MyModel(models.Model):
name = models.CharField()
coordinates = models.PointField()
Run Code Online (Sandbox Code Playgroud)
我将点存储在coordinate变量中作为lan, lng, alt点的位置:
MyModel.objects.create(
name='point_name',
coordinates='SRID=3857;POINT Z (100.00 10.00 150)')
Run Code Online (Sandbox Code Playgroud)
我正在尝试计算两个这样的点之间的3D距离:
p1 = MyModel.objects.get(name='point_1').coordinates
p2 = MyModel.objects.get(name='point_2').coordinates
d = Distance(m=p1.distance(p2))
Run Code Online (Sandbox Code Playgroud)
现在d=X以米为单位。
如果仅更改其中一个点的高度,则:
例如:
p1.coordinates = 'SRID=3857;POINT Z (100.00 10.00 200)'
Run Code Online (Sandbox Code Playgroud)
从150以前,计算:
d = Distance(m=p1.distance(p2))
Run Code Online (Sandbox Code Playgroud)
d=X再次返回,就像忽略高程一样。
如何计算两点之间的3D距离?
geodjango ×10
django ×9
gis ×4
postgis ×4
python ×3
geos ×2
database ×1
django-admin ×1
geojson ×1
geolocation ×1
google-maps ×1
heroku ×1
postgresql ×1