2016-05-13 10 views
0

関数ol.proj.transform()は、ユーザー入力に基づいて間違った座標を返します。テスト目的のために私は50.7712078,9.6679688を設定しました。 それらが値によって関数(add_marker(Y、X))に渡された場合、結果は:ol3 ol.proj.transform wrong transformation

1076233.3638212564、-4754497.267923687

しかし、私は同じ緯度と経度を表すローカル変数を作成私に与えユーザー入力 として:

1076233.3638212564、6580922.381627579

はOL3でこの機能に問題はありますか?

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; carset=utf-8"> 
     <link rel="stylesheet" href="./_css_II.css" type="text/css"> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js" type="text/javascript"></script> 
     <script src="https://cdnjs.cloudflare.com/ajax/libs/ol3/3.5.0/ol.js" type="text/javascript"></script> 
     <script src="./_script.js" type="text/javascript"></script> 
    </head> 

    <body> 
     <div id="map" class="map"></div> 
     <div id="geo-marker" class="marker"></div> 

     <div id="inputForm"> 
      Latitude: 
     <input id="latitude" type="text" value="50.7712078"/>//default 
      Longitude: 
     <input id="longitude" type="text" value="9.6679688"/>//default 
     <input id="btn_addmarker" type="button" value="Add Marker" /> 
     </div> 
    </body> 
</html> 

_script.js

var map, marker; 

$(document).ready(function(){ 

    init_map(); 
    $("#btn_addmarker").on("click",function(){ 

     var lat = $("#latitude").val(); 
     var lon = $("#longitude").val(); 

     add_marker(lon,lat);  

    }); 
}); 

function init_map(){ 

    var OSM = new ol.layer.Tile({ 

     source: new ol.source.OSM() 
    }); 

    var v_OSM = new ol.View({ 

     center:[2061969,7281059], 
     zoom: 14 
    }); 

    var map = new ol.Map({ 

     layers: [OSM], 
     target: "map", 
     renderer: "canvas", 
     view: v_OSM 
    }); 

    var markerHwnd = document.getElementById("geo-marker"); 

    marker = new ol.Overlay({ 

     position: [2061961,7281059], 
     positioning: "bottom-center", 
     offset: [0,0], 
     element: markerHwnd, 
     stopEvent: false   
    }); 

    map.addOverlay(marker); 
} 

function add_marker(y,x){ 

    var goodLat = 50.7712078; 
    var goodLon = 9.6679688; 


    var newCoord = ol.proj.transform([y,x],"EPSG:4326","EPSG:3857");  

    console.log(newCoord); //[1076233.3638212564, -4754497.267923687] <- Should be: [1076233.3638212564, 6580922.381627579] 

    /* 
     var newCoord = ol.proj.transform([goodLon,goodLat],"EPSG:4326","EPSG:3857");  
     console.log(newCoord);//[1076233.3638212564, 6580922.381627579] <- OK! 
    */ 

    marker.setPosition(newCoord); 

} 

答えて

0

あなたは、引数として文字列を渡しています。 メソッドを呼び出してメソッドを呼び出すときに、引数を明示的に解析します。 add_marker(parseFloat(lon),parseFloat(lat));