首页 / 浏览问题 / 云GIS / 问题详情
地图中心点和权限的问题
匿名
2017年01月11日
使用产品: iserver 8c
数据类型: 文件型
问题描述:
    使用idesktop 8C中的一个china100的地图,发布到iserver 8C上作为服务。使用iclient for javascript开发,代码如下:
    function init(){
    map = new SuperMap.Map("map");
    
    var bounds = new SuperMap.Bounds();
    bounds.extend(new SuperMap.LonLat(18,73));
    bounds.extend(new SuperMap.LonLat(122,53));
    bounds.toBBOX();
    /*
    map.minExtent=bounds;
    */
    //map.zoomToExtent(bounds);
    //map.restrictedExtent=bounds;
    //map.zoomToScale();
    layer = new SuperMap.Layer.TiledDynamicRESTLayer(layerName, url, null, {maxResolution:"auto"});
    //map.setBaseLayer(layer);
    //map.zoomToExtent(bounds);
    layer.events.on({"layerInitialized": addLayer});
}    

function addLayer(){
    map.addLayer(layer);
    //map.setCenter(new SuperMap.LonLat(0, 0), 5);        
    map.setCenter(new SuperMap.LonLat(108, 34), 5);
}
    问题:
    1.加载图层后,想通过经纬度来设置地图中心点,代码中写了(108,34)作为地图中心点,但是实际上地图中心位置看起来在非洲往西一些,不论怎么修改这个数字,地图中心点基本上就在非洲西边一些。
    这是什么原因呢?是因为要把经纬度转为墨卡托坐标吗?
    2.如何设置地图的baselayer?在尝试过设置地图中心点不起作用后,又尝试把地图显示范围控制在一个指定的经纬度范围内,但是一直出现baselayer没有设置的错误,经过map.setBaseLayer(layer);设置也不行。
    请问怎么样设置地图的baselayer?
    3.如果标注要分权限应该怎么做?比如监控车辆,每个人看到的车辆经过授权,只能看到经过授权的车的位置。想在后台在地图上标注好,不在前端浏览器上用javascript标注,应该怎么做呢?由于对web地图不熟悉,请麻烦讲详细一点。

    谢谢!

2 个回答

经过试验: 要用墨卡托坐标可以实现设置中心点。那么什么情况下,可以直接通过经纬度来设置中心点?

是不是在idesktop中把坐标系做个转换呢?

我不是学地理的,用idesktop进行转换,不知道应该怎么转。
匿名
2017年01月12日
地图是什么坐标系,就以该坐标系的坐标点进行中心点的设置

可在idesktop的联机帮助搜索“投影转换”
1,600EXP 2017年01月12日
哪剩下的两个问题呢?

一个是baselayer的问题,一个是权限的问题
哪剩下的两个问题呢?

一个是baselayer的问题,一个是权限的问题。

还有:

map = new SuperMap.Map("map",{controls:[new SuperMap.Control.Navigation()]});
    var options={
        units:'km'    
    };
    map.setOptions(options);
    control = new SuperMap.Control.MousePosition();
    map.addControl(control);

我设置了地图的单位是KM,但是不起作用。我这么设置有问题?
1.baselayer: 默认以你添加进去的第一个layer为底图 你也可以通过map.setBaseLayer()或者layer.isBaseLayer来自定义map的底图

2.标注授权:  这个问题你可以在点数据集里设置一个字段(是否通过授权)而你不想要通过JavaScript客户端来的话,你可以通过Java组件对地图里该点数据集对应的图层进行过滤显示 在保存工作空间 iserver这边的地图就会同步变化

3.地图单位:  你的设置没问题  不起作用具体表现是什么
地图单位我如上设置,但是在量距离的时候,通过var  unit = measureEventArgs.result.unit;H获取到的依然是MATER.

另外,idesktop中的china100这个地图,看地图属性中,投影坐标是墨卡托坐标,地理坐标是WGS-84.而且在idesktop中投影转换设置中,貌似只能一个图层一个图层的转换,不能一次性转换,而且选择UTM ZONE ?,这个是多少呢? 再有,要是用经纬度,是不是地理坐标系要是WGS84,投影坐标系要是UTM中的某一个?

我有这样一个想法,就是想地图每个车都在上方把车牌号码展示出来,但是没有在例子中看到过。这里有两个问题:一个是车的图标我想用个自己定义的图片,最好supermap支持图片能够根据GPS数据中的角度转向,另一个就是把车牌号码显示在车的图片上方。如果有相关例子,请告诉我哪里能看到。如果没有,请提示一下应该怎么做.
马上就要过年了,多问些问题,也是不想放假后抓瞎,在此请原谅。

1. 量算的时候 默认量算单位是米 你可以直接修改2.在idesktop里面 你对数据源设置投影的话 是可以应用到数据源下的每个数据集的

3.JavaScript里面 对于SuperMap.Feature.Vector,是可以进行自定义图片,文本以及文本偏移的 如图:

继续问一下,

我要在地图上画多边形或圆形的禁区,禁区的数据要保存到数据库中。我是用例子中的如下代码画的:

function drawZone(type){
    plottingDrawCancel();
    
    var plottingLayerName = "plottingLayer_" + Math.ceil(Math.random() * 1000);
    var layerArray=map.layers;
    var isCurrent=false;
    for(var i=0;i<layerArray.length;i++){
        var layer=layerArray[i];
        if(layer.name==plottingLayerName){
            isCurrent=true;
            break;
        }
    }
    if(!isCurrent){
        var plottingLayer = new SuperMap.Layer.PlottingLayer(plottingLayerName, plotUrl);
        plottingLayer.style=plotStyle;
        plottingLayer.events.on({"added" : layerAdded});
        map.addLayers([plottingLayer]);
    }
    var symbolCode;
    if(type=="R"){
        symbolCode=32;
    }else if(type=="C"){
        symbolCode=29;
    }
    
    if(drawGraphicObject && drawGraphicObject !== null){
        drawGraphicObject.activate();
        drawGraphicObject.handler.libID = 0;//421;
        drawGraphicObject.handler.symbolCode = symbolCode;//10200;
        drawGraphicObject.handler.serverUrl = plotUrl;
    }
}

这样画圆或者多边形倒是方便。可存在两个问题:第一个是必须依赖iserver发布的动态标签服务。动态标签服务我能自己发布吗?第二个问题就是要依赖导入的图元库。

在看帮助的时候,SuperMap.Feature.ShapeFactory里面提到了可以用

用于符号专题图: 圆形 - 参数对象:<Supermap.Feature.ShapeParameters.Cilcle>。

那么是不是可以理解为我可以不依赖导入的图元库,自己可以直接画一个圆形的图元?

在画完这个图元后,我就想直接弹出一个对话框,这个对话框一方面获取图元的圆心坐标和半径,一方面再填写一些其他属性。请问一下,如何在画完图元后返回图元这个对象,而不用再去选择这个图元?

如果你只是想要化圆的话 你不需要动态标绘图层 使用我们的drawFeature就可以直接画圆

在绘制完成的回调里面 就会返回当前的所绘制的图形 可以参考http://support.supermap.com.cn:8090/iserver/iClient/forJavaScript/examples/examples.html#queryByGeometry  几何查询里面“圆”的部分
...