首页 / 浏览问题 / 三维GIS / 问题详情
cad数据集如何做缓冲区分析
82EXP 2016年12月21日
cad数据集如何做缓冲区分析,导入的建筑模型为cad数据集

1个回答

您好,CAD模型数据集是不能做缓冲区分析的。

您可以考虑提取模型底面,或者获取模型中心点通过面或者点做缓冲区分析。

需要组件开发。
3,389EXP 2016年12月21日
例如:我在地面上挖开一个区域,查询出该区域下所包含的管线,如何查询这些管线到周边cad模型建筑的水平距离与空间距离,请给予思路,谢谢

(1)sql查询。前提是要知道某个建筑的某些属性信息,通过属性信息来查询。

(2)周边查询。通过管线上的某点,设置一个半径做缓冲区分析,得到一个结果A,用A和建筑做空间查询,查询相交的建筑即可。如果是CAD模型建筑,提取CAD模型建筑底面来做空间查询。

缓冲区画面查询二维线数据 ,为什么所有的线数据都查询出来来了?查询半径是1米//缓冲区查询距离
                bufferDistance: 1,
                //attributeFilter: "SMID > 0",
                //用于查询的数据集
                datasetNames: ["xixiaoqu:热力二维线"],
                returnContent: true,
                toIndex: -1, //获取所有
                geometry: geometry1

您好,您这条件看不出毛病。

建议您参考二维缓冲区查询范例:

http://localhost:8090/iserver/iClient/forJavaScript/examples/examples.html#getFeatureByBuffer

这是在地形上画的面

for (var i = 0; i < region3D.getPart(0).get_count(); i++) {
        point = region3D.getPart(0).get_item(i);
        //array[i] = new SuperMap.Geometry.Point(point.x, point.y);
        array += point.x + "," + point.y + "|";
}

然后将这个点数组放到cookie 中传到另一个页面

这样获取的面,对吗?

var arr = getCookie("abc");
            if (arr != null && arr != "") {
                try {
                    arr = arr.substring(0, arr.length - 1);
                    array = arr.split('|');
                    for (var i = 0; i < array.length; i++) {
                        array_child = array[i].split(',');
                        points[i] = new SuperMap.Geometry.Point(array_child[0], array_child[1]);
                    }
                } catch (e) {
                    alert(e.message);
                }

            }
            var linearRings = new SuperMap.Geometry.LinearRing(points);
            var region = new SuperMap.Geometry.Polygon([linearRings]);
            drawCompleted(region);
您好,您确定一下地图的单位,您的有可能是度,不是米,所以有问题。
我的面是度,怎么转一下??
1、数据把经纬度投影转换成投影的。

2、米转换为弧度。
面是经纬度的,转投影是那个类库?

坐标投影转换使用

客户端坐标投影转换的使用方法如下:

(1)对于SuperMap支持的投影,可用如下方法实现客户端的投影转换:

方法(一),通过设置map的 projection 和 displayProjection 属性实现,例如:

var mapOptions = {
    //设置地图的投影方式
    projection: "EPSG:3857",
    //设置MousePosition控件的鼠标位置的需要进行的投影方式
    displayProjection: "EPSG:4326"
};
var map = new SuperMap.Map('map', mapOptions);
map.addControl(new SuperMap.Control.MousePosition());

方法(二),可调用 transform() 方法进行坐标转换,例如:

var point = new SuperMap.LonLat(-71.147, 42.472);
    point.transform("EPSG:3857", "EPSG:4326");

详细方法可参见范例 地图图层---地图投影转换

(2) 对于SuperMap 不支持或者用户自定义的投影

首先需要下载、解压缩 proj4 的产品包,并引入产品包中的 proj4.js 文件。

自定义投影,可通过Proj4js.defs[]静态常量定义键值对实现。有关各种投影的参数定义,可参考http://spatialreference.org;如果已有定义,可搜索并查看其投影参数,例如EPSG:21418,其投影参数为http://spatialreference.org/ref/epsg/21418/proj4/

用户自定义一个EPSGCODE,然后再用(1)的方法调用,代码如下:

//自定义一个defs,用来实现用户自定义的投影转换。其中,EPSG:10010为自定义的EPSGCODE,键值内容为参考投影参数,其分别代表了名称、
 //投影、转换到wgs84坐标系(三参数)、椭球长半轴、扁率、原点纬线、中央经线、两条标准纬线、东偏移量、北偏移量、单位等。
Proj4js.defs["EPSG:10010"]    = "+title=Beijing1954 +proj=lcc +towgs84=0.0000,0.0000,0.0000 +a=6378245.0000 +rf=298.3 +lat_0=0.00000000 +lon_0=104.000000000 +lat_1=24.000000000 +lat_2=40.000000000 +x_0=0.000 +y_0=0.000 +units=m +no_defs";
var map = new SuperMap.Map({
    div: "map",
    //设置地图的投影方式
    projection: "EPSG:3857",
    //设置MousePosition控件的鼠标位置的需要进行的投影方式
    displayProjection: new SuperMap.Projection("EPSG:10010")
});

map.addControl(new SuperMap.Control.MousePosition());
米转度呢

您好,这个没有现成的方法,可以参考百度结果,如:

http://blog.csdn.net/starrain00/article/details/7256235

那咱们这个缓冲距离都写成米吗?我缓冲区分析画的面是wgs1984  要分析的数据也是wgs1984
缓冲区的单位和数据集的单位是一致的
...