问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C#开发ArcGIS Engine根据坐标提取对应区的属性

发布网友 发布时间:2022-04-12 14:12

我来回答

6个回答

懂视网 时间:2022-04-12 18:33

sqlserver目前已经可以支持地理空间字段了,也就是 geometry API地址: http://msdn.microsoft.com/zh-cn/LIBRARY/cc280487.aspx 创建表和geometry字段以及插入点,线,多边形的sql如下: IF OBJECT_ID ( dbo.SpatialTable, U ) IS NOT NULL DROP TABLE dbo.Sp


sqlserver目前已经可以支持地理空间字段了,也就是 geometry


API地址:

http://msdn.microsoft.com/zh-cn/LIBRARY/cc280487.aspx


创建表和geometry字段以及插入点,线,多边形的sql如下:

IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL 
 DROP TABLE dbo.SpatialTable;
GO

CREATE TABLE SpatialTable 
 ( id int IDENTITY (1,1),
 geom geometry, 
 adress varchar );
GO

INSERT INTO SpatialTable (geom)
VALUES (geometry::STGeomFromText('POINT (20 180)', 4326));

INSERT INTO SpatialTable (geom)
VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 4326));

INSERT INTO SpatialTable (geom)
VALUES (geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 4326));
GO


ps: 4326是空间引用标识符 (SRID) 一般写0或者4326



存入表中的geom字段如下:




查询语句

假如我们在数据库中存了很多坐标点的地址


选取圆形区域范围的 地址---也就是 圆心到半径范围内的所有点

DECLARE @g geometry;
set @g = geometry::STGeomFromText('POINT(104.12765 30.60445)', 4326)
SELECT address,geom.STY,geom.STX from SpatialTable where geom.STDistance(@g)<=0.005


PS:这里diatance的单位是 英里

查询出的结果如图

选取多边形

DECLARE @g geometry;
set @g = geometry::STGeomFromText('POLYGON ((104.12189573049204 30.608145728994504,104.12223905324595 30.60282680842528,104.13262456655161 30.603122311674902,104.13176625966685 30.610066378528995,104.12189573049204 30.608145728994504,104.12189573049204 30.608145728994504))',4326)
SELECT address from SpatialTable
where geom.STIntersects(@g)=1

查询出的结果如图


热心网友 时间:2022-04-12 15:41

在AE中这叫点选查询,其中你可以用你自己的坐标来替换 下面的
IMap pMap = axMapControl1.Map;
IActiveView pActiveView = pMap as IActiveView;
IFeatureLayer pFeatureLayer = pMap.get_Layer(0) as IFeatureLayer;
IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;

//设置点击点的位置
IPoint point = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);
ITopologicalOperator pTOpo = point as ITopologicalOperator;
double length;
length = ConvertPixelsToMapUnits(pActiveView, 4);
IGeometry pBuffer = pTOpo.Buffer(length);
IGeometry pGeomentry = pBuffer.Envelope;
//空间滤过器
ISpatialFilter pSpatialFilter = new SpatialFilter();
pSpatialFilter.Geometry = pGeomentry;
//根据被选择要素的不同,设置不同的空间滤过关系
switch (pFeatureClass.ShapeType)
{
case esriGeometryType.esriGeometryPoint:
pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
break;
case esriGeometryType.esriGeometryPolyline:
pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelCrosses;
break;
case esriGeometryType.esriGeometryPolygon:
pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
break;

}
IFeatureSelection pFSelection = pFeatureLayer as IFeatureSelection;
pFSelection.SelectFeatures(pSpatialFilter, esriSelectionResultEnum.esriSelectionResultNew, false);
ISelectionSet pSelectionset = pFSelection.SelectionSet;
ICursor pCursor;
pSelectionset.Search(null, true, out pCursor);
IFeatureCursor pFeatCursor = pCursor as IFeatureCursor;
IFeature pFeature = pFeatCursor.NextFeature();
while (pFeature != null)
{
pMap.SelectFeature(pFeatureLayer, pFeature);
pFeature = pFeatCursor.NextFeature();
pFeture.get_value("");//在这里你可以写上想要获取的属性的字段
}
pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphicSelection, null, null);

上述的自定义函数是将距离的转换

private double ConvertPixelsToMapUnits(IActiveView pActiveView, double pixelUnits)
{
// Uses the ratio of the size of the map in pixels to map units to do the conversion
IPoint p1 = pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.UpperLeft;
IPoint p2 = pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.UpperRight;
int x1, x2, y1, y2;
pActiveView.ScreenDisplay.DisplayTransformation.FromMapPoint(p1, out x1, out y1);
pActiveView.ScreenDisplay.DisplayTransformation.FromMapPoint(p2, out x2, out y2);
double pixelExtent = x2 - x1;
double realWorldDisplayExtent = pActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds.Width;
double sizeOfOnePixel = realWorldDisplayExtent / pixelExtent;
return pixelUnits * sizeOfOnePixel;
}

热心网友 时间:2022-04-12 16:59

这是c#中的“属性”
假如某个类中有一个成员变量(字段),一般是不允许外部访问的,为了安全性
如果要访问它,必须通过“属性”来访问,例如:
private int Id; //这是一个成员变量,private表示是私有的,外部不可访问
public int ID
{
get { return id; } //当外部访问“属性”ID时,返回id的值
set { id = value; } //当外部为“属性”ID赋值时,将id赋值为value,value就是外部为“属性”ID所赋的值
}
PS:你可以在set和get中写一些隐藏的逻辑来控制这个访问和赋值的过程,这对外部是不可见的
比如
set {
if(value==0)
id = 1;
else
id=value;
}
这样当外部将ID赋值为0时,id里的值实际上是1 8

热心网友 时间:2022-04-12 18:34

如果是地图 区的定义应该是长方的吧。
判断一个点是否在一个长方形中,这个函数很容易写。X1<x<X2,Y1<y<y2

Draw2d也有区域之间相交计算的函数。不过你这个是点跟区域的交
不知你这个区域怎么定的,如果是自定的多边形,可以用给的函数算,也可以自己写一个划分三角形然后分别判断的。

热心网友 时间:2022-04-12 20:25

可以的 方法是便利坐标点,利用每个点再区域里面搜包含的,然后读取属性 不是很难

热心网友 时间:2022-04-12 22:33

不能
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么药止痒效果好 慕容三藏履历 职业cf电脑配置cf电脑配置要求是什么 玩3a电脑配置要求想玩3a大作需要什么配置 台式电脑哪些可以畅享3a大作想玩3a大作需要什么配置 七彩虹i7-10700台式机 性能强劲 高效静音 小黄鱼游戏台式电脑主机(i7-10700F、16GB、512GB、RTX3070)-适用... 工伤保险记什么科目 在4×4的正方形格纸中,有一个以格点为顶点的△ABC,请你找到点C,使三角... 在4×4方格中, 要求C点在格点上,且以AB为边的△ABC为直角三角形,标出所... 3501041981是哪里的身份证? 开头数字是“35082”是哪里身份证号码? 350401哪地身份证 学平险是什么险种有必要买吗 学校统一买的100元保险是什么?保一年的保险没有用?到底要不要给孩子买? 桂圆是怎么长的,为什么外面有泥一样 桥南附近有没有给电脑装系统的 青岛市李村附近哪里能重装电脑系统 上海离火车站附近哪有给电脑装系统的? 番禺校区附近哪里有可以重装电脑系统的地方 笔记本电脑做系统哪能做 附近有修电脑或装系统的么 旅顺附近哪里有可以重做电脑系统的 斯巴鲁刚保养完仪表显示黄色机油灯是什么??? 附近的做电脑系统的电话号码是多少 望和新城旁边有给电脑做系统的吗? 斯巴鲁胎压灯怎么归零 当电脑系统损坏且附近没有有用的电脑如何用u盘制作系统? 斯巴鲁森林人2013款2.5排量保养后仪表如何清零. 有人知道辽大附近给电脑做系统的地方吗 今天刚认证的健康码怎么失效为今天夜晚?仅仅半天? “出息”的近义词是什么? 出息的近意词是什么? 出息近义词是什么 出息成意思相近的词语 向往和出息的近义词分别是什么 和“出息”意思相近的词语有哪些? 小乌鬼说我长大了一定要出息成一只小白兔,出息成相近的是变成还是成为 出息成的意思 出息是不是机灵的近义词 出息的近义词 成器的近义词是什么 希望自己的孩子有出息是形容什么词语 小乌龟谈理想出息成是什么意思 “将来”近义词是什么? 文件下载用哪款软件好些 有线电视的接头与数字电视机顶盒的接头不符合怎么办? iPhone耳机插孔接触不良可以使用蓝牙耳机吗? 苹果手机送话器坏了带蓝牙耳机说话别人可以听的到么? iPhone能用蓝牙耳机听歌吗?