我正在开发一个应用程序,我有shapefile(.shp
)。
我已经将这些形状读入我的PostgreSQL数据库,我可以通过Google Map显示这些形状坐标。
现在我有一个用例,我需要将这些LGA(局部治理区域)划分为子区域(比如将LGA划分为10km2子区域)。
有没有人知道如何使用Python / Django / GeoDjango做到这一点?
答案 0 :(得分:1)
由于您使用的是PostgreSQL和PostGIS,因此可以使用ST_Split
和ST_Dump
数据库函数进行一种多边形分割。
使用另一个帖子中的方法:How to make/use a custom database function in Django(免责声明:,这是我写的Q& A)来包装那些用于Django的数据库方法:
from django.contrib.gis.db.models.functions import GeoFunc
class SplitGeom(GeoFunc):
function='ST_Split'
class DumpGeom(GeoFunc):
function='ST_Dump'
我们将修改ST_Split文档中提供的示例,假设您有一个名为MyModel
的模型,其中包含一个名为lga
的多边形字段和一个不同的pk
。
创建一条线/多线(或其他适合您的几何图形),以用作“刀片”来剪切/分割特定多边形。我们称之为blade
行:
blade = LineString((lon_1, lat_1), (lon_2, lat_2))
使用annotate
包装的方法将包含创建的多边形的字段添加到MyModel
对象中:
MyModel.objects.annotate(
subareas=DumpGeom(
SplitGeom('lga', blade)
)
)
重要提示:这不是方法,它是一种方法,可以帮助您掌握GeoDjango可以做的事情的逻辑。
如何将多边形分割为PostgreSQL的另一个例子:http://www.gistutor.com/postgresqlpostgis/6-advanced-postgresqlpostgis-tutorials/21-how-to-cut-or-split-a-polygon-using-a-line-with-postgis.html