Javascript OpenLayers-3 ol.proj.transform不使用自定义投影

Javascript OpenLayers-3 ol.proj.transform不使用自定义投影,javascript,transform,projection,openlayers-3,Javascript,Transform,Projection,Openlayers 3,我正在努力使transform使用自定义投影。我的地图在新西兰横贯墨卡托(EPSG:2193)。我想在单击地图时将坐标转换回EPSG:4326(long/lat)。这里是我声明投影、设置映射和单击事件处理程序的地方: <script src="http://epsg.io/2193.js"></script> <script src="http://epsg.io/4326.js"></script> <script src="https:/

我正在努力使transform使用自定义投影。我的地图在新西兰横贯墨卡托(EPSG:2193)。我想在单击地图时将坐标转换回EPSG:4326(long/lat)。这里是我声明投影、设置映射和单击事件处理程序的地方:

<script src="http://epsg.io/2193.js"></script>
<script src="http://epsg.io/4326.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.3.6/proj4.js"></script>   

var nztmproj = new ol.proj.Projection({
  code: 'EPSG:2193',
  extent: [827933.23, 3729820.29, 3195373.59, 7039943.58]
});
ol.proj.addProjection(nztmproj)
var map = new ol.Map({
  target: 'map',
  view: new ol.View({
    projection: nztmproj,
    center: [1824728.56,5534935.14],
    resolutions: [4233.333333,3175,2116.666667,1058.333333,529.1666667,264.58333333,132.2916667,92.60416667,66.14583333,39.6875,26.45833333,19.84375,13.22916667,9.260416667,6.614583333,5.291666667,3.96875,2.645833333,1.984375,1.322916667,0.661458333,0.264583333,0.132291667],
    zoom: 19
  })
});
map.on('click', function(evt) {
  var coord = evt.coordinate;
  var mygeom = new ol.geom.Point(coord);
  mygeom.transform(ol.proj.transform(nztmproj, 'EPSG:4326'));
  var newcoord = mygeom.getCoordinates();
  var lon = newcoord[0];
  var lat = newcoord[1];
  var element = overlay.getElement();
  element.innerHTML = lon + "," + lat;
  overlay.setPosition(coord);
  map.addOverlay(overlay);
});

var nztmproj=新ol.proj.Projection({
代码:“EPSG:2193”,
范围:[827933.233729820.293195373.597039943.58]
});
ol.proj.addProjection(nztmproj)
var map=新ol.map({
目标:“地图”,
视图:新ol.view({
预测:nztmproj,
中心:[1824728.565534935.14],
决议:[4233.3333333 1752116.66666 71058.333333 529.1666667264.58333333132.2916667,92.60416667,66.14583333,39.6875,26.45833333,19.84375,13.2291667,9.260416667,6.614583333,5.291666667,3.96875,2.645833333,1.984375,1.32291667,0.661458333,0.2645583333,0.1322967],
缩放:19
})
});
映射打开('click',函数(evt){
var coord=evt.坐标;
var mygeom=新的ol.geom.Point(坐标);
mygeom.transform(ol.proj.transform(nztmproj,'EPSG:4326'));
var newcoord=mygeom.getCoordinates();
var-lon=newcoord[0];
var lat=newcoord[1];
var element=overlay.getElement();
element.innerHTML=lon+“,”+lat;
覆盖。设置位置(坐标);
map.addOverlay(覆盖);
});

当我尝试单击地图时,我得到一个TypeError:destinationProjection为null

如果您要设置一个jsfiddle,您会在上面看到错误

ol.proj.addProjection(nztmproj)
正确:

ol.proj.addProjection(nztmproj);
不确定,您想用它做什么:

mygeom.transform(ol.proj.transform(nztmproj, 'EPSG:4326'));
但是先变换evt坐标不是更容易吗? 比如:

我很确定这不会输出任何有效的EPSG:4326坐标(请参阅),但它是关于scheme的transformfunction(坐标、fromprojection、toprojection)

var coord = ol.proj.transform(evt.coordinate, nztmproj, 'EPSG:4326');