2

Southを使用して、4326 SRIDの使用から900913にデータを変換するための移行を作成しようとしています。移行後、座標は4326形式のままです。(4326と900913の予測の違いは、900913の方がはるかに大きいため、簡単にわかります)

その移行からのforward()関数とbackward()関数は次のとおりです。

class Migration(SchemaMigration):

    def forwards(self, orm):
        # Changing field 'ZipCoords.point'
        zips = orm.ZipCoords.objects.all()
        db.alter_column('itinerary_generator_zipcoords', 'point', self.gf('django.contrib.gis.db.models.fields.PointField')(srid=900913, null=True))
        for zip in zips:
            zip.point.transform(900913)
            zip.save()

    def backwards(self, orm):
        # Changing field 'ZipCoords.point'
        zips = orm.ZipCoords.objects.all()
        db.alter_column('itinerary_generator_zipcoords', 'point', self.gf('django.contrib.gis.db.models.fields.PointField')(null=True))
        for zip in zips:
            zip.point.transform(4326)
            zip.save()

DjangoAdminを使用して値を確認しています。また、興味深いことに、この移行は逆に「機能」し、座標をはるかに小さい(ただし正しくない)数値に変換します。

4

1 に答える 1

3

問題は、変換元のデータに SRID がなかったことです。(または、おそらく SRID が 900913 で、transform() でノーオペレーションが発生した可能性があります。私はテストしませんでした。) この更新された forward() 関数は機能します:

def forwards(self, orm):
    # Changing field 'ZipCoords.point'
    zips = orm.ZipCoords.objects.all()
    db.alter_column('itinerary_generator_zipcoords', 'point', self.gf('django.contrib.gis.db.models.fields.PointField')(srid=900913, null=True))
    for zip in zips:
        zip.point.srid = 4326
        zip.point.transform(900913)
        zip.save()
于 2013-01-16T00:56:10.083 に答える