Javascript 如何获得标记';s像素坐标

Javascript 如何获得标记';s像素坐标,javascript,google-maps,coordinates,Javascript,Google Maps,Coordinates,每次单击地图时,我的代码都会在地图上放置一个标记。 目标是获得每个时间标记的lat/lon坐标和像素坐标。到目前为止,我只在获得lat/lon坐标方面取得了成功。下一步是将这些作为输入并计算像素坐标 <script> function initMap() {41.85, -87.65 var myLatlng = {lat: 41.85, lng: -87.65}; var map = new google.maps.Map( docume

每次单击地图时,我的代码都会在地图上放置一个标记。 目标是获得每个时间标记的lat/lon坐标和像素坐标。到目前为止,我只在获得lat/lon坐标方面取得了成功。下一步是将这些作为输入并计算像素坐标

<script>
    function initMap() {41.85, -87.65
    var myLatlng = {lat: 41.85, lng: -87.65};
    var map = new google.maps.Map(
          document.getElementById('map'), {zoom: 18,
                                           center: myLatlng,
                                           disableDefaultUI: false,
                                           mapTypeId: 'satellite',
                                           zoomControl: true,
                                           mapTypeControl: true,
                                           scaleControl: true,
                                           streetViewControl: false,
                                           rotateControl: false,
                                           fullscreenControl: true});

    map.setOptions({draggableCursor:'default'});
    map.addListener('click', function(marker){

    marker = new google.maps.Marker({map: map,
                                     clickable: false,
                                     position: marker.latLng,
                                     })

    var markerposLat = marker.getPosition().lat();
    var markerposLon = marker.getPosition().lng();
    
     function pixl(markerposLat,markerposLon){
       var projection = map.getProjection();
       var bounds = map.getBounds();
       var topRight = projection.fromLatLngToPoint(bounds.getNorthEast());
       var bottomLeft = projection.fromLatLngToPoint(bounds.getSouthWest());
       var scale = Math.pow(2, map.getZoom());
       var worldPoint = projection.fromLatLngToPoint(markerposLat,markerposLon);
       return [Math.floor((worldPoint.x - bottomLeft.x) * scale), Math.floor((worldPoint.y - topRight.y) * scale)]
    };

    localStorage["pixl"] = JSON.stringify(pixl);
    localStorage["markerLat"] = JSON.stringify(markerposLat);
    localStorage["markerLon"] = JSON.stringify(markerposLon);
    console.log(localStorage["pixl"],localStorage["markerLat"], localStorage["markerLon"]);
  });

}
</script>

函数initMap(){41.85,-87.65
var Mylatng={lat:41.85,lng:-87.65};
var map=new google.maps.map(
document.getElementById('map'),{zoom:18,
中心:myLatlng,
disableDefaultUI:false,
mapTypeId:'卫星',
动物控制:对,
mapTypeControl:true,
scaleControl:对,
街景控制:错误,
旋转控制:错误,
fullscreenControl:true});
setOptions({draggableCursor:'default'});
map.addListener('click',函数(marker){
marker=新的google.maps.marker({map:map,
可点击:false,
位置:marker.latLng,
})
var markerposLat=marker.getPosition().lat();
var markerposLon=marker.getPosition().lng();
函数pixl(markerposLat,markerposLon){
var projection=map.getProjection();
var bounds=map.getBounds();
var topRight=projection.fromLatLngToPoint(bounds.getNorthEast());
var bottomLeft=projection.fromLatLngToPoint(bounds.getsoutwest());
var scale=Math.pow(2,map.getZoom());
var worldPoint=投影。从LatlngTopoint(markerposLat,markerposLon);
返回[Math.floor((worldPoint.x-bottomLeft.x)*比例),Math.floor((worldPoint.y-top right.y)*比例)]
};
localStorage[“pixl”]=JSON.stringify(pixl);
localStorage[“markerLat”]=JSON.stringify(markerposLat);
localStorage[“markerLon”]=JSON.stringify(markerposLon);
log(localStorage[“pixl”]、localStorage[“markerLat”]、localStorage[“markerLon”]);
});
}

函数pixl始终未定义。我意识到这是一个被问了很多次的问题。事实上,我尝试了很多方法。我的出发点是:当然还有:。我无法发现问题。

请注意,
fromLatLngToPoint
方法需要一个
google.maps.LatLng
类作为其参数。从:

fromLatLngToPoint(latLng[,point])

参数:
latLng:latLng
点:点可选

返回值:点可选

从板条圆柱体平移到点平面。此接口指定一个函数,该函数实现从给定的LatLng值到地图投影上的世界坐标的转换。Maps API在需要在屏幕上绘制位置时调用此方法。投影对象必须实现此方法,但如果投影无法计算点,则可能返回null

因此,在您的代码中,我会这样做:

var worldPoint = projection.fromLatLngToPoint(marker.getPosition());
我(和@geocodezip)注意到的另一件事是,您没有向
pixl
函数传递参数。这就是为什么您希望得到
未定义的
响应的原因。为了获得正确的值,应包含如下参数:

localStorage["pixl"] = JSON.stringify(pixl((markerposLat,markerposLon)));

以下是解决此问题的方法。

在我看来,您将函数指针传递到
JSON.stringify
中,而不是调用函数并传递其结果。