C# 将Lat/long转换为PointClass

C# 将Lat/long转换为PointClass,c#,arcobjects,C#,Arcobjects,当我运行此代码时,该点总是在堪萨斯州附近结束。有人能帮我把lat/long转换成一个能正常工作的PointClass吗 我使用的是VS2010 ArcEngine 10 C 35;这比您目前给出的要多得多。lat/long点和地图都有特定的空间参照。如果它们不匹配,很可能你的观点会以一种意想不到的方式描绘出来 您显示的点是标准纬度/经度点。这可能是Nad83(北美)或WGS84(世界)。这些都是带有标记的空间参照。你很可能试图在地图上画出这一点 您需要使地图控件的空间参照与要打印的点的类型相匹配

当我运行此代码时,该点总是在堪萨斯州附近结束。有人能帮我把lat/long转换成一个能正常工作的PointClass吗


我使用的是VS2010 ArcEngine 10 C 35;

这比您目前给出的要多得多。lat/long点和地图都有特定的空间参照。如果它们不匹配,很可能你的观点会以一种意想不到的方式描绘出来

您显示的点是标准纬度/经度点。这可能是Nad83(北美)或WGS84(世界)。这些都是带有标记的空间参照。你很可能试图在地图上画出这一点

您需要使地图控件的空间参照与要打印的点的类型相匹配

因为我不知道地图的空间参考,所以我只能给您一个例子,将Lat/Lon转换为MapControl当前的空间参考

IPoint pPoint = new ESRI.ArcGIS.Geometry.PointClass();
pPoint.PutCoords(-92.96000, 44.9227); //This should be near Minneapolis
mapControl.CenterAt(pPoint); //mapControl is a AxMapControl
这将获取点并将其投影到MapControls当前空间参照,然后打印该点


祝你好运。

这是放大和居中拉长的代码,上面的海报很有用,但他的解决方案对我不起作用

ISpatialReferenceFactory srFactory = new SpatialReferenceEnvironmentClass();

IGeographicCoordinateSystem gcs = srFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);
ISpatialReference sr1 = gcs;

IPoint point = new PointClass() as IPoint;
point.PutCoords(-92.96000, 44.9227);

IGeometry geometryShape;
geometryShape = point;
geometryShape.SpatialReference = sr1;

geometryShape.Project(mapControl.SpatialReference);

mapControl.DrawShape(geometryShape);

您只询问了如何将lat/lon转换为pointclass。您的代码与我的代码完全相同,只是您在一个点上缩放并居中,而不是在地图上绘制该点。我的解决方案提供了回答您问题所需的正确信息。@jsmith我想知道您是否必须在输入坐标之前设置点的空间参考?我似乎是这样认为的,如果不是这样的话,那么我一定是把你的信贴错了。是的,你是这样认为的。在我的代码中,我设置了几何图形的空间参照,因为我正在绘制点。无需设置点本身的sr。您没有使用几何图形,因此可以只设置点本身的空间参照。
mapControl.MapScale = mapControl.MapScale / 2; //for zooming
ISpatialReferenceFactory srFactory = new SpatialReferenceEnvironmentClass(); //move up top later 
IGeographicCoordinateSystem gcs = srFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984); //World lat / long format
ISpatialReference sr1 = gcs;
IPoint point = new PointClass(); 
point.SpatialReference = gcs;
point.PutCoords(-92.96000, 44.9227);
point.Project(mapControl.SpatialReference);
mapControl.CenterAt(point);