1

PostgreSQL 9.1、Django 1.3.1、psycopg2 2.4.5を使用し、ライブラリGEOS 3.3.0、PostGIS 1.5.4、ProJ 4.7.0を使用して、地理データを含むデータベースを構築しています。

シェープをより単純にするために少し最適化して、シェープファイルをデータベースにロードするコマンドがあります。

モデルを単純にするために、問題のあるフィールドを配置します。

class Circonscription(models.Model):
    shape = models.GeometryField()
    simple_shape = models.GeometryField()
    centroid = models.PointField(null=True)

シェープファイルから作成したい場合は、次のようにします。

Circonscription.objects.create(
            id_cep=feature['id_cep'],
            co_cep=feature['co_cep'],
            nm_cep=feature['nm_cep'],
            nmtri_cep=feature['nmtri_cep'],
            dh_maj=feature['dh_maj'],
            shape=geometry.wkt,
            simple_shape=simple_geometry.wkt,
            centroid=geometry.geos.centroid)

コマンドを実行すると、次のエラーで失敗します。

File "/home/pg/Projets/python/myproject/circonscriptions/management/commands/loadshapefiles.py", line 174, in add_boundaries_for_layer
centroid=geometry.geos.centroid)
File "/home/pg/.virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/manager.py", line 138, in create
    return self.get_query_set().create(**kwargs)
  File "/home/pg/.virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/query.py", line 360, in create
    obj.save(force_insert=True, using=self.db)
  File "/home/pg/.virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/base.py", line 460, in save
    self.save_base(using=using, force_insert=force_insert, force_update=force_update)
  File "/home/pg/.virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/base.py", line 543, in save_base
    for f in meta.local_fields if not isinstance(f, AutoField)]
  File "/home/pg/.virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/fields/subclassing.py", line 28, in inner
    return func(*args, **kwargs)
  File "/home/pg/.virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 786, in get_db_prep_save
    return connection.ops.value_to_db_decimal(self.to_python(value),
  File "/home/pg/.virtualenvs/myproject/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 761, in to_python
    return decimal.Decimal(value)
  File "/usr/lib/python2.7/decimal.py", line 658, in __new__
    raise TypeError("Cannot convert %r to Decimal" % value)
TypeError: Cannot convert <django.contrib.gis.gdal.field.OFTInteger object at 0x2458b50> to Decimal

誰かがそれについての手がかりを持っていますか?

4

2 に答える 2

1

それはどういうわけか値のエンコードと関係があり、それから別のエラーがこの問題についてであり、最終的にそれを解決しました。保存するモデルに値を渡す前に、必ず値を正しいエンコーディング(utf-8)に変換してください。

于 2012-07-17T19:24:15.110 に答える
0

Decimal は文字列を想定していますが、OTFInteger を入力しているため、プロセスのどこかで文字列に変換する必要があります

于 2012-07-14T09:52:46.787 に答える