gpt4 book ai didi

python - GeoDjango 图层映射和外键

转载 作者:太空狗 更新时间:2023-10-29 18:06:36 24 4
gpt4 key购买 nike

我正在尝试使用 GeoDjango 的 LayerMapping 功能将我的 KML 文件导入到模型中。我已经运行测试并且在进行常规导入时没有任何问题。但是,我最近在我的模型中添加了一个外键。我的模型称为 PlaceMark,它现在有一个名为 Layer 的模型的 FK。我也愿意

  1. 覆盖导入并手动设置外键字段的值或
  2. 更新我的 KML 文件以包含一个新元素,该元素通过图层的 pk 或名称字段将 PlaceMark 连接到图层。

这是我从 shell 测试的方式和相关错误:

>>>from locator import load
>>>load.run()
...
TypeError: ForeignKey mapping must be of dictionary type.
....

这是我的load.py 文件:

import os
from django.contrib.gis.utils import LayerMapping
from models import PlaceMark

placemark_mapping = {
'name' : 'Name',
'description' : 'Description',
# This line below is the one that is suspect #
'layer': 'Layer',
'geom' : 'POINT25D',
}

placemark_kml = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data/claim.kml'))

def run(verbose=True):
lm = LayerMapping(PlaceMark, placemark_kml, placemark_mapping,
transform=False, encoding='iso-8859-1')

lm.save(strict=True, verbose=verbose)

KML 文件:

<?xml version="1.0" encoding="Windows-1252"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Folder>
<description><![CDATA[TankSafe_Claims]]></description>
<Placemark>
<name><![CDATA[G2184729A]]></name>
<description><![CDATA[<br><br><br>
<table border="1" padding="0">
<tr><td>Policy_Number</td><td>53645645</td></tr>
<tr><td>Claim_Number</td><td>2342342234</td></tr>
<tr><td>Policy_Type</td><td>TSP</td></tr>
<tr><td>Name</td><td>Al's Total</td></tr>
<tr><td>Street_Address</td><td>555 109th Avenue</td></tr>
<tr><td>City</td><td>Pullman</td></tr>
<tr><td>State</td><td>NY</td></tr>
<tr><td>Zip_Code</td><td>55555</td></tr>
<tr><td>County</td><td>Allegan</td></tr>
]]></description>
<visibility>1</visibility>
<open>0</open>
<Point>
<extrude>1</extrude>
<altitudeMode>relativeToGround</altitudeMode>
<coordinates>-86.092641,42.483953,0</coordinates>
</Point>
<!--- ***Should I add the line below?*** -->
<Layer><name>claims</name></Layer>
</Placemark>
</Folder>
</kml>

我的目标是只获取所有导入的 PlaceMarks 以及对相关图层的引用。有什么想法吗?

谢谢!拉里

最佳答案

layer_mapping = {
'fk': {'nm_field': 'NAME'}, # foreign key field
'this_field': 'THIS',
'that_field': 'THAT',
'geom': 'POLYGON',
}

您收到的外键字段应该是字典的错误基本上是在请求额外映射到与外键相关的模型。

在上面的片段中:

  • “fk”是数据加载到的模型中的外键字段名称(我们称之为“加载模型”)
  • “nm_field”是模型中的字段名称,“加载模型”与其具有外键关系(我们称之为“主模型”)
  • 'NAME' 是加载到'load model' 的数据中的字段名称,它与'primary model' 保持关系

更明确地说,假设“主要模型”是一个湖泊数据集,并且它们有一个名为“nm_field”的字段,该字段是湖泊名称的字符串。

现在想象一下,“负载模型”是代表所有湖泊上所有浮标的点的数据集,并且有一个字段名称“fk”,它是“主要模型”的外键,用于分配每个浮标所属的湖泊.

最后,您加载到“加载模型”中的数据有一个名为“名称”的字符串字段,它包含每个浮标所属湖泊的预填充名称。该字符串名称是关系领带。它允许“负载模型”使用该名称来识别“主模型”中的哪个湖应该与之建立外键。

关于python - GeoDjango 图层映射和外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21197483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com