【发布时间】:2021-02-02 07:18:29
【问题描述】:
我有一个看起来像 XML 的 KML 文件,我需要上传这个文件并更新一个 mysql 数据库。数据是这样的。
<Document>
<name>GPSWaypoints-2020-10-16.kml</name>
<Style id="inline">
<LineStyle>
<color>ff0000ff</color>
<width>2</width>
</LineStyle>
</Style>
<Style id="waypoint">
<IconStyle>
<Icon><href>http://maps.google.com/mapfiles/kml/pal4/icon61.png</href></Icon>
</IconStyle>
</Style>
<Folder>
<name>Waypoints</name>
<open>1</open>
<Placemark>
<name>WPT 0011</name>
<TimeStamp><when>2020-09-26T08:21:14Z</when></TimeStamp>
<styleUrl>#waypoint</styleUrl>
<Point><coordinates>-74.91270224,10.8081995</coordinates></Point>
<ExtendedData>
<Data name="accuracy">
<displayName>Accuracy</displayName>
<value>3.216</value>
</Data>
<Data name="provider">
<displayName>Provider</displayName>
<value>gps</value>
</Data>
</ExtendedData>
</Placemark>
</Folder>
</Document>
</kml>
我有这个方法可以导入KML文件
public function uploadKML(Request $request)
{
$file = $request->file('kml');
$filename = $file->getClientOriginalName();
$filename = time() . "." . $request->kml->extension();
$file->move(public_path('kml'), $filename);
$path = $request->image->store('public');
return response()->json(["message" => "Upload Success"]);
}
上传文件后,我需要读取 KML 并更新具有相同 ID 表的坐标。 ID 位于 KML 的名称字段中。例如,在 <name> WPT 0011 </name> 字段中,ID 将是 0011,没有 WPT。
我目前的更新方式是
public function update(Request $request, $id)
{
$data= Data::findOrFail($id);
return $data->update($request->all());
}
这是我的数据模型
<?php
class Data extends Model
{
protected $fillable = ['id', 'coordinates' ....];
}
【问题讨论】:
-
根据文件的大小,您可能不想将实际内容保存在数据库中,而是要保存文件位置参考,例如
file/location/file.kml。至于阅读它,可能有处理 KML 的库,或者您可以使用 XML 逻辑来加载/解析。你有没有尝试过? -
我可以使用哪些库?有什么推荐吗?
-
我不知道有什么在我头上,对不起。
-
到目前为止你都干了什么?你被困在哪里了?
-
我已经保存了 KML 文件,它使用 public_path 公开保存,但我不知道如何打开它并更新已创建的表中的数据。我需要一种方法来读取文件并更新该数据,更具体地说是坐标