- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在 KML 图层后面渲染多边形?
我已将一个 KML 图层导入到我的 Google map Canvas 中。另外,我还实现了一个多边形,只要您单击绘制,就会在 Canvas 上绘制该多边形。
问题是,当您单击绘制时,多边形会绘制在 kml 标记的顶部。因此,我无法单击任何标记并可视化它们各自的名称。换句话说,我希望能够知道绘制的多边形内包含哪些标记,为此我需要单击该标记并查看其相应的名称。
我相信解决方案在于使用 Pane 。我知道 Pane 及其排列顺序,但我不知道如何使用它们实现解决方案。
接下来,我将几乎完全按照我的代码添加代码,这样您就可以看到我正在谈论的内容并自行测试。唯一的区别是我没有包含我的 GoogleMaps key ,因此在您看到 API_KEY 的地方,请替换为您自己的 key 。提前致谢。
HTML:
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.1.min.js" type="text/javascript"></script>
<script type="text/javascript"src="https://maps.googleapis.com/maps/api/js?key=API_KEY&libraries=geometry"></script>
<script src="GoogleMapTEST.js"></script>
<style>
html{
height:100%;
margin:0;
padding:0;
}
body{
height:60%;
font-family:'Trebuchet MS', 'Arial', 'Helvetica', 'sans-serif';
font-size:10pt;
background-color: LightGray;
line-height:1.6em;
}
#map-canvas {
width:80%;
height:500px;
margin-left: auto;
margin-right: auto;
margin-top: 50px;
margin-bottom: 25px;
}
.col2{
border: #bfbfbf 1px solid;
vertical-align: middle;
display: inline;
width: 39%;
height: 90px;
margin-left: 4%;
}
</style>
<div id="map-canvas"></div>
<div>
<form>
<fieldset class="col2">
Search radius (km): <br><br>
<input type="text" id="DrawTxt" value="30">
<input type="button" id="DrawBtn" value="Draw">
</fieldset>
</form>
</div>
Javascript:
var map;
var overlays_array = [];
function initialize()
{
var MyLatLng = new google.maps.LatLng(51,-114);
var mapOptions = {
center: MyLatLng,
zoom: 10
};
map = new google.maps.Map(document.getElementById('map-canvas'),mapOptions);
$("#DrawBtn").click( function(){
ClearOverlays();
var radius = $("#DrawTxt").val();
var circle = DrawCircle(map.getCenter(), radius);
AddOverlay(circle);
});
var CP_url = 'https://drive.google.com/uc?export=download&id=0B2KR4Lz3foYEd04za21sMXZYaEE'
var CP_options = {
preserveViewport: true,
map: map
};
var CP_layer = new google.maps.KmlLayer(CP_url, CP_options);
}
google.maps.event.addDomListener(window, 'load', initialize);
function DrawCircle(center, radius)
{
var nodes = 72;
var latConv = google.maps.geometry.spherical.computeDistanceBetween( center, new google.maps.LatLng(center.lat()+0.1, center.lng()) )/100;
var lngConv = google.maps.geometry.spherical.computeDistanceBetween( center, new google.maps.LatLng(center.lat(), center.lng()+0.1) )/100;
var points = [];
var step = parseInt(360/nodes)||10;
for(var i=0; i<=360; i+=step)
{
var pint = new google.maps.LatLng(center.lat() + (radius/latConv * Math.cos(i * Math.PI/180)), center.lng() + (radius/lngConv * Math.sin(i * Math.PI/180)));
points.push(pint);
}
points.push(points[0]);
var poly = new google.maps.Polygon({
paths: points,
strokeColor: "#00A2FF",
strokeOpacity: 0,
strokeWeight: 0,
fillColor: "#80D0FF",
fillOpacity: 0.3
});
return poly;
}
function AddOverlay(overlay)
{
if(overlay)
{
overlay.setMap(map);
overlays_array.push(overlay);
}
}
function ClearOverlays()
{
while(overlays_array[0])
{
overlays_array.pop().setMap(null);
}
}
最佳答案
一种选择(如果您的 KML 不太复杂)是使用第三方解析器(如 geoxml3)将 KML 渲染为正常的 Google Maps Javascript API 对象。或geoxml-v3 ,那么您可以控制它们相对于圆的顺序。
<script type="text/javascript" src="http://geoxml3.googlecode.com/svn/branches/polys/geoxml3.js"></script>
<script>
function initialize() {
var MyLatLng = new google.maps.LatLng(51,-114);
var mapOptions = {
center: MyLatLng,
zoom: 10
};
map = new google.maps.Map(document.getElementById('map-canvas'),mapOptions);
geoXml = new geoXML3.parser({
map: map,
infoWindow: infowindow,
singleInfoWindow: true,
markerOptions: {optimized: false}
});
geoXml.parse("http://www.geocodezip.com/geoxml3_test/kml/CPs_Calgary.kml");
// ...
关于javascript - 谷歌地图 API : kml on top of polygon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28837030/
您如何将城市与谷歌地球的 kml 曲线(线)联系起来? 最佳答案 首先,由于您在 SO 我假设您是从 KML 的角度询问,而不仅仅是在桌面应用程序中。 你需要有两个城市的坐标。然后,您将从 docs
我有一个在 map 上绘制并生成 kml 字符串的项目。我想通过 ajax 请求将其发送到 kml 文件。 $.ajax({ type: 'PUT', url: 'myurl.kml'
我需要深入研究 KML,所以我在网上查看规范和示例,但我得到了一些不一致的信息。 例如,有些网站说你写了 true 之类的东西。而其他人有1 ,而其他人则说不再需要 tessellate,因为 Alt
我想用谷歌地球每 10 秒加载一个 kml 文件,我找到了这个例子 http://ukhas.org.uk/code:kml_live_update但它似乎不起作用。
我有一个具有以下结构的巨大 kml 文件: 1.5 30ffa911
我想在我的 KML 中添加一个图例,无论您在 map 上的哪个位置,该图例都将始终位于同一位置。你怎么做到这一点?叠加层什么的?非常感谢 最佳答案 您可以使用屏幕覆盖添加静态图例(尽管您需要创建手动使
我试图让 gx:track 的线根据某些条件在轨道的不同部分具有不同的颜色,但我无法找到为轨道的一部分着色的方法。我正在使用 C# 生成 kml 文件。顺便说一句,我的 gx:track 有扩展数据。
我生成的 KML 文件可能有 50,000 个或更多地标,根据特定于域的分组排列在文件夹中。 KML 文件使用打包到 KMZ 文件中的自定义图像。 我希望将单个 KML 文件分解为多个文件,根据分组进
你好,我正在编写一些 KML,然后我按顺序创建了多重几何体 地标A地标 B 我不能选择 PlMark A 因为 B 更大,但是当我有 地标 B地标A 是的,因为我认为 A 较小并且它是最后一个被绘制的
我试图让 gx:track 的线路根据某些条件在轨道的不同部分具有不同的颜色,但我无法找到为轨道的部分着色的方法。我正在使用 C# 生成 kml 文件。顺便说一句,我的 gx:track 已经扩展了数
我正在构建一个为独立的 Google 地球客户端提供数据的应用程序。我想发送一组初始数据,然后使用 动态更新它和 标签随着服务器上的变化而变化。我正在使用 Java API for KML (JAK
我对 google earth 的 kml 文件有疑问。当我使用高度模式 clampToGround 时,它完全符合我的预期,它很好地跟随地面。 pm1kml
我正在从 ArcMap 图层创建 KML 文件,该图层使用 XSLT 生成带有文件夹自定义链接的 HTML 弹出窗口。其中一些链接有嵌入的空间。当我尝试在 Google 地球中打开这些链接时,它什么也
当我在 Excel 中打开 KML 文件时,同一地标的坐标与 Google Earth 中显示的坐标不同。例如,Google Earth 中显示的地标坐标点为 24.484138°、54.400700
这个问题困扰了我大约 2 天,谷歌并没有帮助我解决这个问题。基本上,下面的代码应该定义气球内的文本。不幸的是,它不是那样工作的。如果 GE 无法处理 KML 中定义的样式,我们最终会得到似乎是后备方案
Google map 是否像 Google 地球一样支持 KML 区域? 谷歌在这里给出了一个很好的区域描述/教程: https://developers.google.com/kml/documen
我创建了一个具有 15.439 轮廓的 kml 文件,每个文件都有 360 个坐标。文件大小为 369Mb。 当我尝试打开文件时,Google 地球显示一条消息: “Google 地球遇到问题需要关闭
我的 KML 地标具有这样填充的描述元素 someTag ]]> 使用 Google 地球 5,当您点击气球中的链接时,kml 将按预期下载并显示。 使用 Google 地球专业版 6,当您点击气
我正在读取 Kml 文件,更改地标的名称,然后再次保存。 var KmlFile = XDocument.Load("C:\\Inetpub\\wwwroot\\GeotagService\\Kml\
您好,我有一个多几何图形,当您将鼠标传递给线条时,样式如何像翻转一样,我的问题是多几何图形中的不同线串可能具有不同的颜色? 在下一个示例中,当您选择样式时,我有地标 Durham Tees Valle
我是一名优秀的程序员,十分优秀!