将多面积区域划分为子区域

时间:2017-11-24 10:32:42

标签: python django postgresql postgis geodjango

我正在开发一个应用程序,我有shapefile(.shp)。
我已经将这些形状读入我的PostgreSQL数据库,我可以通过Google Map显示这些形状坐标。

现在我有一个用例,我需要将这些LGA(局部治理区域)划分为子区域(比如将LGA划分为10km2子区域)。

有没有人知道如何使用Python / Django / GeoDjango做到这一点?

1 个答案:

答案 0 :(得分:1)

由于您使用的是PostgreSQL和PostGIS,因此可以使用ST_SplitST_Dump数据库函数进行一种多边形分割。

  1. 使用另一个帖子中的方法: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'
    
  2. 我们将修改ST_Split文档中提供的示例,假设您有一个名为MyModel的模型,其中包含一个名为lga的多边形字段和一个不同的pk

  3. 创建一条线/多线(或其他适合您的几何图形),以用作“刀片”来剪切/分割特定多边形。我们称之为blade行:

    blade = LineString((lon_1, lat_1), (lon_2, lat_2))
    
  4. 使用annotate包装的方法将包含创建的多边形的字段添加到MyModel对象中:

    MyModel.objects.annotate(
        subareas=DumpGeom(
            SplitGeom('lga', blade)
        ) 
    )
    
  5. 重要提示:这不是方法,它是一种方法,可以帮助您掌握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