2013-01-11 36 views
2

我正在嘗試使用South來創建遷移,以將我的數據從使用4326 SRID轉換爲900913.遷移後,座標保持其4326格式。 (這很容易告訴4326點900913的預測之間的差別,因爲數字是900913大得多)遷移GeoDjango模型以更改投影SRID

這裏是正向()和後向()從遷移功能:

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檢查他們的值。另外,有趣的是,這種遷移「反作用」,它將我的座標變成更小(但不正確)的數字。

回答

2

問題似乎是我轉換的數據沒有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()