gpt4 book ai didi

javascript - 如何使用 OpenLayer 显示折线

转载 作者:行者123 更新时间:2023-12-02 17:20:09 25 4
gpt4 key购买 nike

使用以下代码我得到了我想要的结果,即我得到了给定纬度、经度上的折线

<html>
<head>
<title>OpenLayers Example</title>
<script src="http://openlayers.org/api/OpenLayers.js"></script>
</head>
<body>
<div style="width:100%; height:100%" id="map"></div>
<script defer="defer" type="text/javascript">
var map = new OpenLayers.Map('map');
var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
"http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} );



var start_point = new OpenLayers.Geometry.Point(0,10);
var start_point_1= new OpenLayers.Geometry.Point(0,15);
var start_point_2= new OpenLayers.Geometry.Point(5,20);
var end_point = new OpenLayers.Geometry.Point(30,0);
var end_point_1 = new OpenLayers.Geometry.Point(40,0);

var myTrip =[start_point, start_point_1, start_point_2 , end_point, end_point_1];
var vector = new OpenLayers.Layer.Vector();
vector.addFeatures([new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(myTrip ))]);
map.addLayers([vector]);


map.addLayers([wms]);
map.zoomToMaxExtent();
</script>

</body>
</html>

输出

enter image description here

但是当我使用谷歌地图时它不起作用,即它只是向我显示简单的 map 。

<html>
<head>
<title>OpenLayers Example</title>
<script src="http://openlayers.org/api/OpenLayers.js"></script>
<script src="http://maps.google.com/maps/api/js?v=3.2&sensor=false"></script>
</head>
<body>
<div style="width:100%; height:100%" id="map"></div>
<script defer="defer" type="text/javascript">
var map = new OpenLayers.Map('map');
var wms = new OpenLayers.Layer.Google(
"Google Streets", // the default
{numZoomLevels: 20}
);

var lonlat = new OpenLayers.LonLat(73.589,19.54).transform(
new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
new OpenLayers.Projection("EPSG:900913") // to Spherical Mercator
);

var zoom = 7;



var start_point = new OpenLayers.Geometry.Point(0,10);
var start_point_1= new OpenLayers.Geometry.Point(0,15);
var start_point_2= new OpenLayers.Geometry.Point(5,20);
var end_point = new OpenLayers.Geometry.Point(30,0);
var end_point_1 = new OpenLayers.Geometry.Point(40,0);

var myTrip =[start_point, start_point_1, start_point_2 , end_point, end_point_1];
var vector = new OpenLayers.Layer.Vector();
vector.addFeatures([new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(myTrip ))]);
map.addLayers([vector]);


map.addLayer(wms);
map.zoomToMaxExtent();
map.setCenter(lonlat, zoom);
</script>

</body>
</html>

输出

enter image description here

为什么这不起作用,我怎样才能使其工作。如果我直接使用 Google Map API 而不是 openlayer,我可以获得所需的结果。

最佳答案

Google map 使用墨卡托 (EPSG:900913) 坐标,但您的几何图形采用未投影的地理坐标 (EPSG:4326)。结果,这条线将是赤道上的一个极小的点。

您应该将其转换为墨卡托(使用 lonlat 变量已完成相同的操作):

var myTrip =[start_point, start_point_1, start_point_2 , end_point, end_point_1];
var vector = new OpenLayers.Layer.Vector();
var geom = new OpenLayers.Geometry.LineString(myTrip);
geom = geom.transform(
new OpenLayers.Projection("EPSG:4326"),
new OpenLayers.Projection("EPSG:900913")
);
vector.addFeatures([new OpenLayers.Feature.Vector(geom)]);
map.addLayers([vector]);

请注意,该线串将放置到非洲,但您的 map 将缩放到印度。要看到这条线,您必须从初始 View 缩小 map 。

关于javascript - 如何使用 OpenLayer 显示折线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24044305/

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