Arcgis Engine(ae)接口详解(5):IGeometry几何基础操作
//点操作~~~~~~~~~~~~~~~~~~~~~~~~~
//通过坐标生成点
IPoint point = new PointClass();
point.PutCoords(, );
//获取点坐标
double x = point.X;
double y = point.Y;
//线操作~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//通过点集生成线
IPolyline polyline = new PolylineClass();
//思路是通过点集接口IPointCollection添加线的点,创建线和面同样可用此方法
IPointCollection pointColl = polyline as IPointCollection;
point = new PointClass();
point.PutCoords(, );
pointColl.AddPoint(point);
point = new PointClass();
point.PutCoords(, );
pointColl.AddPoint(point);
//通过点集生成线 完成~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//获取线的起点和终点
IPoint pointStart = polyline.FromPoint;
IPoint pointEnd = polyline.ToPoint;
//获取线的长度
double length = polyline.Length;
//获取线的矩形范围(envelop),面的获取方式也一样
//线和面都有envelope,不过点的envelop没有意义
IEnvelope envelope = polyline.Envelope;
//获取线是否是闭合的线
bool isClosed = polyline.IsClosed;
//把线的方向反转,就是起点和终点,点的顺序反转
polyline.ReverseOrientation();
//获取线的所有点,对于面同样可用此方法
for (int i = ; i < pointColl.PointCount; i++)
{
IPoint point1 = pointColl.Point[i];
}
//面操作~~~~~~~~~~~~~~~~~~~~~~~~~~~
IPolygon polygon = new PolygonClass();
//通过点集生成线:与线一样
//注意:生成面时点集要求第一个点做坐标和最后一个点的坐标一样,也可理解为同一个点添加了两次,否则会出错
//获取面的周长
length = polygon.Length;
IArea area = polygon as IArea;
//获取面的面积
double area1 = area.Area;
//获取面的所有点,跟线获取的方法一样
//几何通用操作~~~~~~~~~~~~~~~~~~~~~~~~~~~
//点线面都可以as到IGeometry,所有几何对象的类型都可以,因此所有几何类型接口都继承了IGeometry
IGeometry geometry = polygon as IGeometry;
//获取几何类型,可以区分出点,线,面等
//如果有种情况获取到的几何对象的类型是IGeometry,那可以通过这个判断是什么几何类型,然后在as到对应的接口再做下一步操作
esriGeometryType geometryType = geometry.GeometryType;
//获取是否空几何对象
//空几何对象和null不同,例如点对象可是没有点坐标,线对象没有一个点等等
//空几何对象其中一种情况是,从feature获取到的几何对象,可能是空的,因为一条要素肯定有一个对应的几何对象,可是编辑时又可以不录入几何对象(而只是录入属性字段值)
bool isEmpty = geometry.IsEmpty;
//矩形范围(Envelope)操作~~~~~~~~~~~~~~~~~~~~~~~~~~~
IEnvelope envelope2 = polygon.Envelope;
//获取矩形的坐标,矩形用最小点(左下角的点)和最大点(右上角的点)两个点就足够表示
double xmin = envelope2.XMin;
double ymin = envelope2.YMin;
double xmax = envelope2.XMax;
double ymax = envelope2.YMax;
//获取矩形的宽和高
double height = envelope2.Height;
double width = envelope2.Width;
//通过坐标创建矩形
envelope2 = new EnvelopeClass();
envelope2.PutCoords(, , , );
//扩大和缩小
//有两种情况,根据参数3设置,false=按长度,true=按比例
//下例是水平扩大10(米),垂直扩大20(米)
envelope2.Expand(, , false);
//下例是水平设为原来的0.8倍(可以理解为缩小了20%),垂直设为原来的1.1倍(可以理解为放大了10%)
envelope2.Expand(0.8, 1.1, true);
//移动
//把矩形中心点移到某个点(实际是整个矩形移动)
envelope2.CenterAt(point);
//矩形转面
//逻辑上矩形也是面,但在ae对象中IEnvelop和IPolygon不能互转,下面是edm的转换方法
polygon = GeometryHelper.EnvelopeToPolygon(envelope);
Arcgis Engine(ae)接口详解(5):IGeometry几何基础操作的更多相关文章
- JDBC常用接口详解
JDBC中常用接口详解 ***DriverManager 第一.注册驱动 第一种方式:DriverManager.registerDriver(new com.mysql.jdbc.Driver()) ...
- Java6.0中Comparable接口与Comparator接口详解
Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者 ...
- socket接口详解
1. socket概述 socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket起源于UNIX,在Unix一切 ...
- “全栈2019”Java第八十四章:接口中嵌套接口详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第八十三章:内部类与接口详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java接口 详解(二)
上一篇Java接口 详解(一)讲到了接口的基本概念.接口的使用和接口的实际应用(标准定义).我们接着来讲. 一.接口的应用—工厂设计模式(Factory) 我们先看一个范例: package com. ...
- [转载]MII/MDIO接口详解
原文地址:MII/MDIO接口详解作者:心田麦浪 本文主要分析MII/RMII/SMII,以及GMII/RGMII/SGMII接口的信号定义,及相关知识,同时本文也对RJ-45接口进行了总结,分析了在 ...
- map接口详解
1.Map接口详解(1)映射(map)是一个存储键.键值对的对象,给定一个键,可以查询得到它的值,键和值都可以是对象(2)键必须是唯一的,值可以重复(Map接口映射唯一的键到值)(3)有些映射可以接收 ...
- ReadWriteLock 接口详解
ReadWriteLock 接口详解 这是本人阅读ReadWriteLock接口源码的注释后,写出的一篇知识分享博客 读写锁的成分是什么? 读锁 Lock readLock(); 只要没有写锁,读锁可 ...
随机推荐
- python算法-二叉树广度优先遍历
广度优先遍历:优先遍历兄弟节点,再遍历子节点 算法:通过队列实现-->先进先出 广度优先遍历的结果: 50,20,60,15,30,70,12 程序遍历这个二叉树: # encoding=utf ...
- 七丶人生苦短,我用python【第七篇】
模块 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个 ...
- 九度oj 题目1100:最短路径
题目描述: N个城市,标号从0到N-1,M条道路,第K条道路(K从0开始)的长度为2^K,求编号为0的城市到其他城市的最短距离 输入: 第一行两个正整数N(2<=N<=100)M(M< ...
- iOS-APP图标和启动页的尺寸
图标
- BZOJ 1007 [HNOI2008]水平可见直线 ——计算几何
用了trinkle的方法,半平面交转凸包. 写了一发,既没有精度误差,也很好写. #include <map> #include <ctime> #include <cm ...
- [BZOJ1590] [Usaco2008 Dec]Secret Message 秘密信息(字典树)
传送门 看到前缀就要想到字典树! 看到前缀就要想到字典树! 看到前缀就要想到字典树! #include <cstdio> #include <iostream> #define ...
- 计算系数(codevs 1137)
题目描述 Description 给定一个多项式(ax + by)^k,请求出多项式展开后x^n y^m项的系数. 输入描述 Input Description 共一行,包含 5 个整数,分别为a,b ...
- 【Codevs1922】骑士共存问题(最小割,二分图最大独立集转最大匹配)
题意: 在一个n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些方格设置了障碍,骑士不得进入. 对于给定的n*n个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可以放置多少个 ...
- R语言入门视频笔记--2--一些简单的命令
一.对象 1.列举当前内存中的对象 ls() 2.删除不需要的对象 rm(某对象名称) 3.查看向量长度 length(某向量名称) 4.查看向量类型 mode(某向量名称) 二.函数 1.seq函数 ...
- Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1) E. Vasya and Good Sequences
题目链接 官网题解写的好清楚,和昨晚Aguin说的一模一样…… 这题只和每个数1的个数有关,设每个数1的个数的数组为$b$,就是首先一段如果是好的,要满足两个条件: 1.这一段$b$数组和为偶数,因为 ...