Je construis une base de données en utilisant Django, geodjango et postgresql de données de terrain. Les données incluent les lats et les lons. L'une de mes tâches consiste à ingérer des données qui ont déjà été recueillies. Je voudrais utiliser le fichier .json pour définir les métadonnées et écrire du code pour traiter par lots des fichiers json.json au modèle geoDjango
Ce que j'ai jusqu'à présent est un modèle:
class deployment(models.Model):
'''
@brief This is the abstract deployment class.
'''
startPosition=models.PointField()
startTimeStamp=models.DateTimeField()
endTimeStamp=models.DateTimeField()
missionAim=models.TextField()
minDepth=models.FloatField() # IT seems there is no double in Django
maxDepth=models.FloatField()
class auvDeployment(deployment):
'''
@brief AUV meta data
'''
#==================================================#
# StartPosition : <point>
# distanceCovered : <double>
# startTimeStamp : <dateTime>
# endTimeStamp : <dateTime>
# transectShape : <>
# missionAim : <Text>
# minDepth : <double>
# maxDepth : <double>
#--------------------------------------------------#
# Maybe need to add unique AUV fields here later when
# we have more deployments
#==================================================#
transectShape=models.PolygonField()
distanceCovered=models.FloatField()
Je fonction que je veux utiliser pour ingérer les données
@staticmethod
def importDeploymentFromFile(file):
'''
@brief This function reads in a metadta file that includes campaign information. Destinction between deployment types is made on the fine name. <type><deployment>.<supported text> auvdeployment.json
@param file The file that holds the metata data. formats include .json todo:-> .xml .yaml
'''
catamiWebPortal.logging.info("Importing metadata from " + file)
fileName, fileExtension = os.path.splitext(file)
if fileExtension == '.json':
if os.path.basename(fileName.upper()) == 'AUVDEPLOYMENT':
catamiWebPortal.logging.info("Found valid deployment file")
data = json.load(open(file))
Model = auvDeployment(**data)
Model.save()
et le fichier que je suis en train de lire dans ce
{
"id":1,
"startTimeStamp":"2011-09-09 13:20:00",
"endTimeStamp":"2011-10-19 14:23:54",
"missionAim":"for fun times, call luke",
"minDepth":10.0,
"maxDepth":20.0,
"startPosition":{{"type": "PointField", "coordinates": [ 5.000000, 23.000000 ] }},
"distanceCovered":20.0
}
L'erreur que je reçois est ce
TypeError: cannot set auvDeployment GeometryProxy with value of type: <type 'dict'>
Si je supprime les géo-types du modèle et du fichier. Il va lire le fichier et remplir la table de base de données.
J'apprécierais n'importe quel conseil un comment je suis analyser le fichier de données avec les géotypes.
Merci