gpt4 book ai didi

django-rest-framework - 使用 django rest framework gis 降低多面域的精度

转载 作者:行者123 更新时间:2023-12-03 23:22:10 24 4
gpt4 key购买 nike

我正在使用 django rest gis 加载传单 map ,在我的应用程序的顶层,我正在查看世界地图。 basemap 来自 Mapbox。我调用我的 rest-api 并返回应用程序中包含的所有单个国家的概要。目前,返回的 GeoJSON 文件大小为 1.1MB,我有更多国家要添加,所以我想减小大小以提高性能。

以下是内容示例:

{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[[[[-64.54916992187498,-54.71621093749998],[-64.43881835937495,-54.739355468749984],[-64.22050781249999,-54.721972656249996],[-64.10532226562495,-54.72167968750003],[-64.054931640625,-54.72988281250001],[-64.03242187499995,-54.74238281249998],[-63.881933593750006,-54.72294921875002],[-63.81542968749997,-54.725097656250014],[-63.83256835937499,-54.76796874999995],[-63.97124023437499,-54.810644531250034],[-64.0283203125,-54.79257812499999],[-64.32290039062497,-54.79648437499999],[-64.45327148437497,-54.84033203124995],[-64.50869140625,-54.83994140624996],[-64.637353515625,-54.90253906250001],

文件的大小是点数和这些点的精度的函数。我在想,在保留原始数据的同时减小尺寸的最便捷方法是降低几何点的精度。但是,我对如何做到这一点有点茫然。我查看了 github 上的文档,没有找到任何线索。

是否有降低返回 GeoJSON 精度的字段选项?或者,有没有另一种方法来实现我想要做的事情?

非常感谢。

最佳答案

我最终使用 PostGIS 简化了几何,然后将该查询集传递给序列化程序。我开始在模型管理器中创建一个原始查询。

class RegionQueryset(models.query.QuerySet):
def simplified(self):
return self.raw(
"SELECT region_code, country_code, name, slug, ST_SimplifyVW(geom, 0.01) as geom FROM regions_region "
"WHERE active=TRUE AND region_type = 'Country'"
)

class RegionsManager (models.GeoManager):
def get_queryset(self):
return RegionQueryset(self.model, using=self._db)

def simplified(self):
return self.get_queryset().simplified()

View 很简单:
class CountryApiGeoListView(ListAPIView):
queryset = Region.objects.simplified()
serializer_class = CountryGeoSerializer

和序列化器:
class CountryGeoSerializer(GeoFeatureModelSerializer):
class Meta:
model = Region
geo_field = 'geom'
queryset = Region.objects.filter(active=True)
fields = ('name', 'slug', 'region_code', 'geom')

我最终选择了 PostGIS function ST_SimplifyVW()运行一些测试后。

我的数据集有 20 个国家,其几何由 Natural Earth 提供。未经优化,geojson 文件大小为 1.2MB,查询运行时间为 17 毫秒,在我的浏览器中加载时间为 1.15 秒。当然,渲染轮廓的质量非常好。然后我尝试了具有不同参数的 ST_Simplify() 和 ST_SimplifyVW() 函数。从这些非常粗略的测试中,我决定使用 ST_SimplifyVW(geom, 0.01)
**Function                 Size   Query time   Load time   Appearance**
None 1.2MB 17ms 1.15s Great
ST_Simplify(geom, 0.1) 240K 15.94ms 371ms Barely Acceptable
ST_Simplify(geom, 0.01) 935k 22.45ms 840ms Good
ST_SimplifyVW(geom, 0.01) 409K 25.92ms 628ms Good

我的设置是 Postgres 9.4 和 PostGIS 2.2。 ST_SimplifyVW 不包含在 PostGIS 2.1 中,因此您必须使用 2.2。

关于django-rest-framework - 使用 django rest framework gis 降低多面域的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38470965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com