【问题标题】:Valid KML not loading when put on web server放在 Web 服务器上时未加载有效的 KML
【发布时间】:2017-10-18 21:24:00
【问题描述】:

试图做简单的事情,但似乎有些东西把它扔掉了。只想从网页加载 KML 文件。

因此,我在 Google 地球中制作了一个非常简单的 KML 文件,上面有一个地标,将其保存并上传到我们的定向运动俱乐部网站(如果有任何不同,则托管在 GoDaddy 上)。然后,我从KML Layers 网页复制了 html 代码并将其加载到我的网站上并更改了关键代码 - 工作正常。

接下来我所做的就是更改纬度/经度位置值,然后列出我自己的 kml 文件、完整 URL ......它会拉出一张地图,居中,但没有地标。确认!

我已阅读并想知道是否需要在服务器端执行某些操作才能读取 KML?由于它是 GoDaddy 主机,如果这是问题,我无法控制它。

KML 只列出了一个地标,我已经阅读了 Google 地图架构,这一切似乎都是合法的。反正就是这样。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
    <name>Test1</name>
    <Style id="s_ylw-pushpin">
        <IconStyle>
            <scale>1.3</scale>
            <Icon>
                <href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
            </Icon>
            <hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
        </IconStyle>
    </Style>
    <Placemark>
        <name>testmark</name>
        <styleUrl>#s_ylw-pushpin</styleUrl>
        <Point>
            <gx:drawOrder>1</gx:drawOrder>
            <coordinates>-73.20975393157571,44.46282408596932,0</coordinates>
        </Point>
    </Placemark>
</Document>
</kml>

如前所述,我只是使用 KML 图层网页中完全相同的文本,并将位置更改为我的纬度/经度(工作),但从未找到 kml 文件。 “…… var ctaLayer = 新的 google.maps.KmlLayer({ 网址:“http://www.gmoclub.org/kml/8gove3.kml”, 地图:地图 ……”

也曾在多个浏览器中尝试过。 IE 使用无法清除 Active X 控件的消息栏阻止它,Chrome 和 Firefox 显示空白地图。

当我尝试了几个 jsfiddle 选项时,添加 KML 链接时总是失败。

完整链接我做错了什么?!有什么概念吗?很抱歉成为这样的人,但是......它发生了。

【问题讨论】:

  • 你检查过服务器的内容类型(mime-type)吗?有时,当您将文件发布到文件服务器时,URL 是指向通过 JavaScript 而不是 KML 内容本身自动加载内容的网页。您是否验证了 URL 是内容 - 首先尝试使用 cURL 之类的方法来获取 URL。

标签: javascript google-maps google-maps-api-3 kml godaddy-api


【解决方案1】:

KML 文件必须可公开访问(而不是通过密码/登录名)才能让 Google 地球和地图能够访问和加载它。您提供的 URL 指向您服务器上的 404 页面......所以该文件可能不再存在,或者它不允许我访问它,因为我没有经过身份验证/登录?尝试将 KML 放在您 100% 确定是公开的位置(测试通过隐身标签访问它)。

正如 JasonM1 在评论中提到的,您还需要确保在提供的文件上正确设置了 MIME 类型。如果您将文件放在公开的地方,但继续获取原始 XML 而不是下载 KML 文件,请检查 MIME 类型设置。

如果您真的只想在 Google 地图中添加一个点,使用 Maps API 选项添加标记可能会更容易。

哦,当我将它直接复制到地球时,您提供的示例 KML 看起来和工作正常。

【讨论】:

  • MIME 类型...从来没有这样做过。快速网络搜索为我提供了一个 web.config 文件,但是当我将它加载到根目录时,地图仍然不加载地标。
    对...我认为您的 KML 不止一个点。 :-) 对于 MIME 类型,看起来应该是正确的,但如果没有有效的 KML URL,则很难确认。是否可以共享一个有效的 KML 链接,以验证 MIME 问题并尝试其他调试?仅供参考,有关 MIME 类型的文档位于本页底部:developers.google.com/kml/documentation/kml_tut#kml_server
【解决方案2】:

所以答案是双重的,并且与 MIME 类型和完全公共的 URL 相关。

  1. MIME 类型:所以我的网站托管在 GoDaddy 上,由于您无法像在完整的 Windows 服务器上那样控制 MIME 类型,因此您需要添加一个 web.config 文件,我在上面已经提到过。添加这似乎是关键,但使用 GoDaddy,您可能需要等待 >~24 小时才能注册。一段痛苦的时期,尤其是当他们没有告诉你它正在生效时。你只需要继续尝试......谈论烦人。

  2. 完全公开的 URL:所以这个属于“你一定是在开玩笑”,因为我知道我的网站是公开的,并且 html 文件将加载并居中基本地图,但没有 KML呈现。问题是我的链接从“https://godaddy ...”开始,而 KML 链接不需要其中的“s”,只是“http://.ACK!我使用的脚本以某种方式得到了” s' 在那里,这就是工作的结束。

所以在两者之间,它是行不通的。可能已经看到了“s”,但我永远不会发现 MIME 类型问题。非常感谢各位!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    相关资源
    最近更新 更多