Arcgis API for js 使用投影为PROJCS["User_Defined_Albers",.....的地图时,无法在地图上绘图

使用的Arcgis API for js 3.16,客户要求使用他们提供的地图服务,使用ArcGISDynamicMapServiceLayer加载地图后,地图的显示效果不美观。然后换用ArcGISTiledMapServiceLayer加载地图,结果地图可以显示出来,但不能在地图上进行绘图定位等操作。检查后发现是可能是因为投影的原因,但第一次使用这种投影,不知道该怎么处理。请大神们指教一二,在此先谢过了。。。
 地图服务是arcgisserver发布的,信息如下:
Tile Info:Height: 256
Width: 256
DPI: 96
Levels of Detail: (# Levels 8)

Level ID: 0 [ Start Tile, End Tile ]

Resolution: 15875.031750063501
Scale: 6.0E7

Level ID: 1 [ Start Tile, End Tile ]

Resolution: 7937.5158750317505
Scale: 3.0E7

Level ID: 2 [ Start Tile, End Tile ]

Resolution: 5291.677250021167
Scale: 2.0E7

Level ID: 3 [ Start Tile, End Tile ]

Resolution: 1322.9193125052918
Scale: 5000000.0

Level ID: 4 [ Start Tile, End Tile ]

Resolution: 793.7515875031751
Scale: 3000000.0

Level ID: 5 [ Start Tile, End Tile ]

Resolution: 529.1677250021168
Scale: 2000000.0

Level ID: 6 [ Start Tile, End Tile ]

Resolution: 264.5838625010584
Scale: 1000000.0

Level ID: 7 [ Start Tile, End Tile ]

Resolution: 132.2919312505292
Scale: 500000.0

Format: PNG24
Compression Quality: 0
Origin: X: -1.90634667792894E7
Y: 3.23584987511698E7
Spatial Reference:PROJCS["User_Defined_Albers",GEOGCS["GCS_User_Defined",DATUM["D_User_Defined",SPHEROID["User_Defined_Spheroid",6378140.0,298.2569978029123]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Albers"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",110.0],PARAMETER["Standard_Parallel_1",25.0],PARAMETER["Standard_Parallel_2",47.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]Initial Extent:XMin: -1078116.5724347506
YMin: 1797518.0028617454
XMax: 804662.1931227809
YMax: 2934170.276166292
Spatial Reference: PROJCS["User_Defined_Albers",GEOGCS["GCS_User_Defined",DATUM["D_User_Defined",SPHEROID["User_Defined_Spheroid",6378140.0,298.2569978029123]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Albers"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",110.0],PARAMETER["Standard_Parallel_1",25.0],PARAMETER["Standard_Parallel_2",47.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]
Full Extent:XMin: -1103889.4427378792
YMin: 1511121.9695368607
XMax: 1061464.8879707824
YMax: 2928762.3048175317
Spatial Reference: PROJCS["User_Defined_Albers",GEOGCS["GCS_User_Defined",DATUM["D_User_Defined",SPHEROID["User_Defined_Spheroid",6378140.0,298.2569978029123]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Albers"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",110.0],PARAMETER["Standard_Parallel_1",25.0],PARAMETER["Standard_Parallel_2",47.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]

 
已邀请:

gishome - GIS之家,我们的团队,具备丰富的webgis项目开发经验以及开源GIS项目经验(openlayer+geoserver、三维开源GIS cesium.js);GIS之家知乎专栏:https://zhuanlan.zhihu.com/gishome

赞同来自: liangda

你这个需要用arcgis api的project投影转换了,比如你自己绘图定位的坐标系跟你底图服务的投影坐标系不一致情况下,就要投影转换了;
//坐标投影转换函数
var geometryService = new esri.tasks.GeometryService(MapConfig.geometryURL);
function project_geometry(geometry,wkid,geocallback) {
    var PrjParams = new esri.tasks.ProjectParameters();
    //PrjParams.geometries = [geometry];
    PrjParams.geometries = geometry;
    var outSR = new esri.SpatialReference(wkid);
    PrjParams.outSR = outSR;
    geometryService.project(PrjParams, function (geo) {
        geocallback(geo);
    },function (error) {
        alert(error);
    });


其中:
/*地图几何服务*/
MapConfig.geometryURL = "http://GISSERVER:6080/arcgis/rest/services/Utilities/Geometry/GeometryServer";//几何服务 
调用:var geometrys =[];
var geometry = new esri.geometry.Point(json[i].x,json[i].y,map.spatialReference);
geometrys.push(geometry);    
project_geometry(geometrys,4326,function (geo) {
for(var j=0;j<geo.length;j++){
}
});
 wkid:4326是我需要转换的坐标系,底图的坐标系 
 map.spatialReference 指自己绘图的坐标系                            

要回复问题请先登录注册