kml 相关问题

Keyhole标记语言(KML)是用于表达地理标注和可视化的XML标准。 KML文件格式用于在Google地球和其他应用程序中显示和注释地理数据。

将KML导入MySQL

我有这个 KML 文件要插入 MySQL 表中: 我有这个 KML 文件要插入 MySQL 表中: <?xml version="1.0" encoding="utf-8" ?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Document id="root_doc"> <Schema name="secc_cpv_e_20111101_01_r_ine" id="secc_cpv_e_20111101_01_r_ine"> <SimpleField name="Name" type="string"></SimpleField> </Schema> <Folder> <name>secc_cpv_e_20111101_01_r_ine</name> <Placemark> <name>5200101001</name> <Style> <LineStyle> <color>ff0000ff</color> </LineStyle> <PolyStyle> <fill>0</fill> </PolyStyle> </Style> <MultiGeometry> <Polygon> <outerBoundaryIs> <LinearRing> <coordinates>-2.93698273596522,35.2979346176443,0 -2.93697084790041,35.2979326186938,0 -2.93695877204193,35.297933090301,0 -2.93694953435202,35.2979385903615,0 -2.93694137509274,35.2979447898008,0 -2.93692885164904,35.297946595687,0 -2.93691871628878,35.2979409773216,0 -2.93691413103252,35.2979323321398,0 -2.93690399979109,35.2979270789636,0 -2.93689431492369,35.2979220514443,0 -2.93688289797324,35.2979224151838,0 -2.93687516563971,35.2979298005764,0 </coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </MultiGeometry> </Placemark> </Folder> </Document> </kml> 当我启动PHP将KML插入MySQL时,只获取坐标的开头,不捕获所有数据;在坐标字段中记录 NULL: <?php $dom = new DOMDocument(); $dom->loadXML(file_get_contents('demo.kml')); foreach ($dom->getElementsByTagName('Folder') as $warehouse) { $warehouseName = $warehouse->getElementsByTagName('name')[0]->nodeValue; foreach ($warehouse->getElementsByTagName('Placemark') as $placemark) { $polygons = $placemark->getElementsByTagName('Polygon'); if ($polygons->length > 0) { $coordinates = $polygons[0]->getElementsByTagName('coordinates'); if ($coordinates->length > 0) { $zoneName = $placemark->getElementsByTagName('name')[0]->nodeValue; // $zoneDesc = $placemark->getElementsByTagName('description')[0]->nodeValue; $coordinates = explode("\n", $coordinates[0]->nodeValue); $coordinatesMysql = array(); foreach ($coordinates as $coordinate) { $coordinate = trim($coordinate); if (!empty($coordinate)) { list($lon, $lat, $elevation) = explode(",", trim($coordinate)); $coordinatesMysql[] = "$lat $lon"; } } echo 'insert into demozonas (name,polygon) values ' ."('$zoneName',ST_PolygonFromText('Polygon((" .implode(', ', $coordinatesMysql) ."))'));\n"; } } } } ?> 插入命令的结果是: insert into demozonas (name,polygon) values ('5200101001',ST_PolygonFromText('Polygon((35.2979346176443 -2.93698273596522))'));` 我尝试了另一个 KML 示例并有效,但我看不到我的 KML 文件中的错误在哪里,有人可以帮助我吗? 坐标值似乎是用空格而不是换行符分隔的。 Xpath可以简化代码,并且可以标准化坐标值。 $document = new DOMDocument(); $document->loadXML(getKMLString()); $xpath = new DOMXpath($document); // register prefix for namespace $xpath->registerNamespace('kml', 'http://www.opengis.net/kml/2.2'); $records = []; // iterate placemarks with polygon descendants foreach ($xpath->evaluate('//kml:Folder/kml:Placemark[count(.//kml:Polygon) > 0]') as $placemark) { // fetch the first polygon inside $placemark foreach ($xpath->evaluate('(//kml:Polygon)[1]', $placemark) as $polygon) { // fetch coordinates as string with all whitespaces normalized to single space characters $coordinates = parseCoordinates($xpath->evaluate('normalize-space(.//kml:coordinates)', $polygon)); $records[] = [ // fetch $placemakr name as string 'name' => trim($xpath->evaluate('string(kml:name)', $placemark)), // compile $coordinates array to Polygon((...)) 'polygon' => coordinatesToPolygon($coordinates), 'coordinates' => $coordinates, ]; } } var_dump($records); // parse coordinates into a nested array function parseCoordinates(string $coordinates) { return array_map( function($coordinate) { [$latitude, $longitude] = explode(',', $coordinate); return [$latitude, $longitude]; }, explode(' ', $coordinates) ); } function coordinatesToPolygon(array $coordinates) { return 'Polygon(('.implode( ', ', array_map(fn ($coordinate) => implode(' ', $coordinate), $coordinates) ).'))'; } function getKMLString() { return <<<'XML' <?xml version="1.0" encoding="utf-8" ?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Document id="root_doc"> <Schema name="secc_cpv_e_20111101_01_r_ine" id="secc_cpv_e_20111101_01_r_ine"> <SimpleField name="Name" type="string"></SimpleField> </Schema> <Folder> <name>secc_cpv_e_20111101_01_r_ine</name> <Placemark> <name>5200101001</name> <Style> <LineStyle> <color>ff0000ff</color> </LineStyle> <PolyStyle> <fill>0</fill> </PolyStyle> </Style> <MultiGeometry> <Polygon> <outerBoundaryIs> <LinearRing> <coordinates>-2.93698273596522,35.2979346176443,0 -2.93697084790041,35.2979326186938,0 -2.93695877204193,35.297933090301,0 -2.93694953435202,35.2979385903615,0 -2.93694137509274,35.2979447898008,0 -2.93692885164904,35.297946595687,0 -2.93691871628878,35.2979409773216,0 -2.93691413103252,35.2979323321398,0 -2.93690399979109,35.2979270789636,0 -2.93689431492369,35.2979220514443,0 -2.93688289797324,35.2979224151838,0 -2.93687516563971,35.2979298005764,0 </coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </MultiGeometry> </Placemark> </Folder> </Document> </kml> XML; } 输出: array(1) { [0]=> array(3) { ["name"]=> string(10) "5200101001" ["polygon"]=> string(439) "Polygon((-2.93698273596522 35.2979346176443, -2.93697084790041 35.2979326186938, -2.93695877204193 35.297933090301, -2.93694953435202 35.2979385903615, -2.93694137509274 35.2979447898008, -2.93692885164904 35.297946595687, -2.93691871628878 35.2979409773216, -2.93691413103252 35.2979323321398, -2.93690399979109 35.2979270789636, -2.93689431492369 35.2979220514443, -2.93688289797324 35.2979224151838, -2.93687516563971 35.2979298005764))" ["coordinates"]=> array(12) { [0]=> array(2) { [0]=> string(17) "-2.93698273596522" [1]=> string(16) "35.2979346176443" } [1]=> array(2) { [0]=> string(17) "-2.93697084790041" [1]=> string(16) "35.2979326186938" } [2]=> array(2) { [0]=> string(17) "-2.93695877204193" [1]=> string(15) "35.297933090301" } [3]=> array(2) { [0]=> string(17) "-2.93694953435202" [1]=> string(16) "35.2979385903615" } [4]=> array(2) { [0]=> string(17) "-2.93694137509274" [1]=> string(16) "35.2979447898008" } [5]=> array(2) { [0]=> string(17) "-2.93692885164904" [1]=> string(15) "35.297946595687" } [6]=> array(2) { [0]=> string(17) "-2.93691871628878" [1]=> string(16) "35.2979409773216" } [7]=> array(2) { [0]=> string(17) "-2.93691413103252" [1]=> string(16) "35.2979323321398" } [8]=> array(2) { [0]=> string(17) "-2.93690399979109" [1]=> string(16) "35.2979270789636" } [9]=> array(2) { [0]=> string(17) "-2.93689431492369" [1]=> string(16) "35.2979220514443" } [10]=> array(2) { [0]=> string(17) "-2.93688289797324" [1]=> string(16) "35.2979224151838" } [11]=> array(2) { [0]=> string(17) "-2.93687516563971" [1]=> string(16) "35.2979298005764" } } } }

回答 1 投票 0

有没有办法修复 Google 地球专业版中 .kml 文件上的 LineStrings 切断问题?

我正在使用 python 库 simplekml 制作一个 .kml 文件,该文件显示连接机场的路线,用 Points 显示机场,用 LineStrings 显示可能的航班。生成的 .kml 文件...

回答 1 投票 0

使用Python解析KML文件并存储在数据库中

我有 4 个带有多个多边形的 KML 文件。我想解析 KML 文件,提取数据,然后将其存储到我的数据库中。经过研究,我发现解析 KML fi 的最佳方法...

回答 1 投票 0

zipfile 将最后几行从我的文件中删除 - 为什么?

所以我在Python中使用zipfile模块时遇到了问题。目前,当我尝试压缩 KML 文件以创建新的 KMZ 文件时,我缺少最后几行。看起来如何并不重要...

回答 3 投票 0

如何将kml文件添加到google_maps_flutter中?

在GoogleMaps flutter中,不支持KML文件集成 我找到了这个解决方法 https://brunozaranza.medium.com/google-maps-flutter-com-kml-e750c8c5b793 但它只适用于安卓 可以

回答 2 投票 0

Google 地图 Kml 图层缩放[重复]

我正在使用我的地图的初始化。我希望我的地图进入我的“地图容器”并放大更多(也许是 16 倍)。在哪里可以添加这个缩放参数?这可能吗? 功能

回答 1 投票 0

无法在 Google Maps API 中显示 KML 图层

我一直在努力让我的 KML 文件在 Google 地图 API 上运行。我最初下载了一个 GPX 文件并将其转换为 .kml,以便在我的地图上使用。 HTML 代码如下: <p>我花了好几天的时间才让我的 KML 文件在 Google 地图 API 上运行。我最初下载了一个 GPX 文件并将其转换为 .kml,以便在我的地图上使用它。</p> <p>这是 HTML 代码:</p> <pre><code>&lt;script type=&#34;text/javascript&#34;&gt; function initialize() { var mapProp = { center: new google.maps.LatLng(47.2769,8.650017), zoom:9, panControl:true, zoomControl:false, mapTypeControl:true, scaleControl:false, streetViewControl:false, overviewMapControl:false, rotateControl:false, mapTypeId:google.maps.MapTypeId.HYBRID }; var map = new google.maps.Map(document.getElementById(&#34;map-canvas&#34;), mapProp); var ctaLayer = new google.maps.KmlLayer({ url: &#39;kml/route.kml&#39; }); ctaLayer.setMap(map); } google.maps.event.addDomListener(window, &#39;load&#39;, initialize); &lt;/script&gt; </code></pre> <p>问题出在哪里?显示地图,但不显示带有 KML 信息的图层。这是否与 Google 连接错误有关?我的 Firebug 控制台不断向我报告网络错误,例如:</p> <blockquote> <p>“网络错误:407 需要身份验证 - <a href="https://maps.gstatic.com/intl/de_de/mapfiles/api-3/15/0/main.js" rel="nofollow">https://maps.gstatic.com/intl/de_de/mapfiles/api-3/15/0/main.js</a>”</p> </blockquote> <p>顺便说一句,KML 文件似乎没问题。我把它上传到谷歌地图上,它确实有效。</p> <p>有人知道更好的解决方案让我的 GPX 自行车课程显示在 Google 地图上吗?</p> </question> <answer tick="false" vote="-1"> <p>您应该将 kml 文件托管在某个地方。 <a href="https://developers.google.com/kml/articles/pagesforkml?hl=en" rel="nofollow">https://developers.google.com/kml/articles/pagesforkml?hl=en</a></p> </answer> </body></html>

回答 0 投票 0

Google Maps API 缩放以适应 KmlLayer

我目前正在使用 Android 版 Google 地图 API。我正在尝试对添加到地图中的 KmlLayer 进行缩放,但我不知道如何进行。 https://developers.google.com/maps/documentation/android...

回答 1 投票 0

如何在 R 中正确读取 KML 文件,或将集中变量分离到列中

我使用以下内容读取了 KML 文件: 诊所 = st_read(dsn = "数据/诊所-kml.kml","诊所") 然而,我的所有变量(坐标除外)都集中到“描述”下的 1 列中...

回答 3 投票 0

保护 KML 文件免遭下载或访问

我正在尝试保护我的 KML 文件,以免被下载或轻松提取其数据。我想要的只是在谷歌地图或谷歌地球中查看的文件,但不允许任何人下载或电子...

回答 5 投票 0

如何将此图像添加到以度数指定的范围延伸的地图中?

我有一个codepen https://codepen.io/ericg_off/pen/gOqmpEE 虽然我希望将此代码作为工作片段提供,但它超出了这些限制。 Washb64 的值可以在...

回答 1 投票 0

为什么 OL KMZ 示例不适用于我的文件?

我需要使用 OpenLayers 查看 KMZ 文件。 我正在使用的 KMZ 位于 https://github.com/eric-g-97477-so/wash_kmz/blob/main/wash.kmz KMZ (zip) 文件的结构为: 洗/ 文件/ ...

回答 1 投票 0

我的地图 - 上传 kml 或 gpx 文件时发生错误

在“我的地图”中,导入 gpx 或 kml 文件时,“我的地图”显示发生错误。无法加载 GPS 轨迹 我想上传在法国科西嘉岛徒步旅行的 gpx 文件,它的名字是 « Mare I mare cent...

回答 1 投票 0

在iPhone上生成KML文件

在我的应用程序中,我必须借助 MKAnnotation 和 MKOverlay 类在 MKMapView 中绘制用户位置和目标位置之间的路线。我已经浏览了 Apple 的 KMLViewer 示例代码

回答 1 投票 0

如何使用Python以KML格式(谷歌地球)创建风玫瑰

我需要创建一个风玫瑰KML文件,以便在谷歌地球中打开,如下图(类似于)。 我可以使用 Windrose python 模块创建风玫瑰,如下所示: 我知道如何...

回答 2 投票 0

Python 中的 KML/KMZ

我有一个matlab图,我想将其转换为kml/kmz,但似乎无法弄清楚,我目前有一个.csv,我在其中使用我将每个点排序为十六进制值,我只是无法转换到 kml/k...

回答 1 投票 0

字符串 XSLT 命名空间问题

我有一个 XSLT 文件,我想在其中使用 String 名称空间中的一堆函数。即,http://exslt.org/strings,但该网站似乎不再存在。因此我的代码如下

回答 1 投票 0

Android:如何加载 KML

有人可以告诉我是否有一种方法可以将kml文件加载到android中的谷歌地图中。 谢谢

回答 4 投票 0

TurfJs union - 如何忽略在 union 内部但差异不大的点?

我使用了 2 个 geojson 对象作为多边形。它太大了,我无法在这里发布。现在我使用 TurfJs 来合并这个多边形 geojson 并将其绘制在地图上。但它不起作用

回答 4 投票 0

如何使用 R 创建 KML 文件

我编写了一个 R 脚本来获取一些地图点数据(纬度和经度值)。我能够在 R 中绘制它们并将它们可视化。但现在我想从这些数据生成一个 KML 文件并查看你...

r kml
回答 5 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.