Я манипулирую данными ГИС w / geopandas
и сохраняю их в различных Django
моделях.geopandas
использует shapely
под капотом, а Django
- нет.
Вот некоторый код:
import geopandas as gpd
from django.contrib.gis.db import models
class MyModel(models.Model):
geometry = models.PolygonField()
name = models.CharField(max_length=255, null=False, unique=True)
some_property = models.IntegerField()
gdf = gpd.read_file("some_data.geojson")
# ...do some stuff w/ gdf...
for data in gdf.to_dict("records"):
name = data.pop("name")
MyModel.objects.create_or_update(
name=name,
defaults=data,
)
Вышеприведенное не будет работать с ошибками типа:
TypeError: Невозможно установить MyModel SpatialProxy (POLYGON) со значениемтип:
Если я не добавлю какой-нибудь непристойный код, например:
from django.contrib.gis.geos import fromstr, Polygon
data["geometry"] = Polygon(fromstr(str(data["geometry"])))
Есть ли способ избежать этого и напрямую отобразить с shapely
на Django
?
edit :
Вот некоторые значения:
>> data["geometry"]
<shapely.geometry.polygon.Polygon object at 0x7fb374f41908>
>> str(data["geometry"])
'POLYGON ((-4.337076919429241 53.41842814531255, -4.336698521348041 53.4182242737367, ....))'
>> fromstr(str(data["geometry"]))
<Polygon object at 0x7fb3733d158e>