1
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 / longs 转换为可以正常工作的 PointClass 吗?

我正在使用 VS2010 ArcEngine 10 C#

4

2 回答 2

3

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

您显示的点是标准纬度/经度点。很可能是 Nad83(北美)或 WGS84(世界)。这些是具有地理坐标系的空间参考。您可能正在尝试在Projected Coordinate System上绘制该点。

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

由于我不知道您的地图的空间参考,我只能给您一个将纬度/经度转换为 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 当前空间参考,然后绘制该点。

祝你好运。

于 2010-08-24T21:40:20.980 回答
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);
于 2010-08-25T15:24:06.767 回答