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(); 只要没有写锁,读锁可 ...
随机推荐
- 学习笔记3——WordPress文件目录结构详解
**********根目录********** 1.index.php:WordPress核心索引文件,即博客输出文件.2.license.txt:WordPress GPL许可证文件.3.my-ha ...
- PHP读取xlsx Excel 文件
<?php require_once 'simplexlsx.class.php'; if ( $xlsx = SimpleXLSX::parse('pricelist.xlsx') ) { p ...
- 网页QQ唤起
网页QQ唤起 <html> <head> <meta http-equiv="Content-Type" content="text/htm ...
- 公钥密码之RSA密码算法大素数判定:Miller-Rabin判定法!
公钥密码之RSA密码算法大素数判定:Miller-Rabin判定法! 先存档再说,以后实验报告还得打印上交. Miller-Rabin大素数判定对于学算法的人来讲不是什么难事,主要了解其原理. 先来灌 ...
- 安装oracle提示swap交换分区太小
1.用dd命令创建一个16G的文件 #dd if=/dev/zero of=/var/swapfile bs=1G count=16 2.将它创建为Linux Swap虚拟交换文件 #mkswap ...
- iOS学习笔记04-视图切换
一.视图切换 UITabBarController (分页控制器) - 平行管理视图 UINavigationController (导航控制器) - 压栈出栈管理视图 模态窗口 二.UITabBar ...
- 【Luogu】P3455Zip-Queries(莫比乌斯反演)
题目链接 真是神TM莫比乌斯 首先来看一个神奇的结论:求gcd(x,y)==k的对数,其中1<=x<=n,1<=y<=m 等同于求gcd(x,y)==1的对数,其中1<= ...
- HDU——2473Junk-Mail Filter(并查集删点)
Junk-Mail Filter Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- farm
farm 时间限制:C/C++ 4秒,其他语言8秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 White Rabbit has ...
- NOJ1203 最多约数问题 [搜索 数论]
传送门 njczy2010 1203 Accepted 79MS 1400K 2321Byte G++ 2015-01-25 13:14:25.0 最多约数问题 时间限制(普通/Java) : 2 ...