资源简介
描述:
在矢量多边形区域中,一个坐标点的位置是否在区域内
算法:
C#代码,适用于任意多边形(凹凸多边形),但是没有考虑实际误差范围的情况(应用在实际问题解决中,接近区域一定范围是可以忽略的,这个误差范围考虑后算法的复杂度会加倍,所以没有做这方面的考虑)
代码片段和文件信息
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace p
{
class Program
{
static void Main(string[] args)
{
Point p = new Point(112.3839540000 37.9901770000);
Point[] ps = new Point[] { new Point(112.4091887500 38.0200324167) new Point(112.4668669727 37.7316897817) new Point(112.6701140430 37.7686085000) new Point(112.6234221484 38.0070487978) };
Console.WriteLine(“x:“ + p.X + “y:“ + p.Y);
Console.WriteLine(“result:“ + (isPtInPoly(p.X p.Y ps) ? “yes“ : “no“));
Console.ReadKey();
}
///
/// 判断指定的经纬度坐标点是否落在指定的多边形区域内
///
/// 指定点的经度
/// 指定点的纬度
/// 指定多边形区域各个节点坐标
/// True 落在范围内 False 不在范围内
public static bool isPtInPoly(double ALon double ALat Point[] APoints)
{
int iSum iCount iIndex;
double dLon1 = 0 dLon2 = 0 dLat1 = 0 dLat2 = 0 dLon;
if (APoints.Length < 3)
{
return false;
}
iSum = 0;
iCount = APoints.Length;
for (iIndex = 0; iIndex < iCount - 1; iIndex++)
{
if (iIndex == iCount - 1)
{
dLon1 = APoints[iIndex].X;
dLat1 = APoints[iIndex].Y;
dLon2 = APoints[0].X;
dLat2 = APoints[0].Y;
}
else
{
dLon1 = APoints[iIndex].X;
dLat1 = APoints[iIndex].Y;
dLon2 = APoints[iIndex + 1].X;
dLat2 = APoints[iIndex + 1].Y;
}
if (((ALat >= dLat1) && (ALat < dLat2)) || ((ALat >= dLat2) && (ALat < dLat1)))
{
if (Math.Abs(dLat1 - dLat2) > 0)
{
dLon = dLon1 - ((dLon1 - dLon2) * (dLat1 - ALat)) / (dLat1 - dLat2);
if (dLon < ALon)
iSum++;
}
}
}
if ((iSum % 2) != 0)
return true;
return false;
}
}
///
/// 坐标
///
public class Point
{
private Double x;
private Double y;
public Point()
{
this.x = 0;
this.y = 0;
}
public Point(double _x double _y)
{
this.x = _x;
this.y = _y;
}
public Double X
{
get { return x; }
set { x = value; }
}
public Double Y
{
get { return y; }
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3164 2012-06-16 14:56 Program.cs
- 上一篇:C# mapx 开发GIS
- 下一篇:电力组态设计软件.net wpf源码
相关资源
- C# mapx 开发GIS
- GIS简易裁剪算法和道格拉斯压缩算法
- C#写的地理信息系统初级代码
- 9种预测、处理算法实现源代码c#
- 加密算法,采用js加密,c#可以解密
- SM2 SM3 SM4国密算法
- C# CRC 循环冗余校验算法
- C#进化计算:遗传算法源代码
- ArcGIS+Engine+C#
- 计算机图形学 扫描线种子填充算法
- A*算法C#实现,三次B样条优化
- 蒋波涛插件式GIS应用程序框架的设计
- c# AE 属性查询
- C#模拟退火算法排课系统
- c# 基于BP算法的贝叶斯网络参数学习
- 棋盘覆盖 C#可视化实现
- 基于C#的霍夫变换检测直线算法
- 操作系统课程设计—进程调度算法C
- 肖维勒算法剔除数据
- C#9种预测处理算法
- C#实现的 路由 距离矢量算法
- C#将tif影像转成jpg方法显示保持颜色不
- C# 矩阵算法
- 磨皮滤镜程序DEMO
- C# 道格拉斯线压缩算法 Douglas一Pe
- C#实现字符串RSA加密与解密 算法工程
- 算法设计的螺钉螺母问题
- C# 自动排课系统 算法 源码
- 点,线缓冲区生成算法实现c#)
- AES加密算法C#实现带中文说明
评论
共有 条评论