[英]GetLonLat function returning incorrect LonLat
每次在地图上放置地图标记时,我都会尝试获取POI的经度和纬度。
这似乎有效,但它没有返回正确的LonLat - 它是一个更大的数字,不是一个lonlat点。
GetLonLatFromPixel是正确的方法吗?
为凌乱的代码提前道歉!
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
#heatmapArea {
position:relative;
float:left;
width:800px;
height:600px;
border:1px dashed black;
}
</style>
</head>
<body>
<div id="main">
<div id="heatmapArea">
</div>
<script src="http://openlayers.org/api/OpenLayers.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
var map, layer
function init(){
//create new map position :
map = new OpenLayers.Map('heatmapArea');
var layer = new OpenLayers.Layer.OSM();
var fromProjection = new OpenLayers.Projection("EPSG:4326"); // Transform from WGS 1984
var toProjection = new OpenLayers.Projection("EPSG:900913"); // 23834 to Spherical Mercator Projection
var position = new OpenLayers.LonLat(0,51.4791).transform( fromProjection, toProjection);
var zoom = 16;
map.addLayers([layer]);
map.setCenter(position,zoom);
markers = new OpenLayers.Layer.Markers( "Markers" );
markers.id = "Markers";
map.addLayer(markers);
//get lonlat:
map.events.register("click", map, function(e) {
//var position = this.events.getMousePosition(e);
var position = map.getLonLatFromPixel(e.xy);
var size = new OpenLayers.Size(40,50);
var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
var icon = new OpenLayers.Icon('eats.png', size, offset);
var markerslayer = map.getLayer('Markers');
markerslayer.addMarker(new OpenLayers.Marker(position,icon));
$("<p>{lat:"+position["lat"]+",lon:"+position["lon"]+",count=1},</p>").insertAfter("p.longlat");
});
}
window.onload = function(){
init();
};
</script>
<div id="position">
<p class="longlat">LonLat</p>
</div>
</html>
lon
和lat
将位于“地图单位”中。 仅当您的地图位于地理投影中时,此值与经度和纬度相同。
要使它成为您期望的纬度和经度值,您需要在LonLat
对象上运行transform
:
map.events.register("click", map, function(e) {
var toProjection = new OpenLayers.Projection("EPSG:4326");
var position = map.getLonLatFromPixel(e.xy).transform(map.getProjectionObject(), toProjection);
...
(当然,如果你通过另一种机制使回调可用,那么你每次运行回调时都不需要经历创建toProjection对象的开销。)
请注意,运行transform()
将改变LonLat
对象,因此如果您需要以地图单位出于其他目的,请务必首先clone()
它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.