将Lat / long转换为PointClass

时间:2010-08-24 21:28:38

标签: c# arcobjects

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

当我运行此代码时,该点总是在堪萨斯附近结束。任何人都可以帮我将lat / long转换为可以正常工作的PointClass吗?

我正在使用VS2010 ArcEngine 10 C#

2 个答案:

答案 0 :(得分:3)

这比你目前给出的要多得多。纬度/经度点和地图都有特定的空间参考。如果它们不匹配,很可能您的观点会以意想不到的方式进行绘制。

您要显示的是标准纬度/经度点。这可能是Nad83(北美),或WGS84(世界)。这些是具有Geographical Coordinate System的空间参考。您可能正试图在Projected Coordinate System上绘制点。

您需要使MapControl的空间参考与您尝试绘制的点类型相匹配。

由于我不知道地图的空间参考,我只能举例说明将Lat / Lon转换为MapControl的当前空间参考。

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);

这将接受您的观点并将其投影到MapControls当前空间参考,然后绘制点。

祝你好运。

答案 1 :(得分:0)

以下是缩放和居中拉/长的代码,上面的海报很有帮助,但他的解决方案对我不起作用。

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);