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()

我正在使用 Django Admin 检查它们的值。此外,有趣的是,这种迁移是反向“起作用”的,它将我的坐标变成了更小(但不正确)的数字。

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 回答