Mapx中如何显示一个符号

在MAXP应用程序开发中,最基本的一个功能是在地图上显示一个目标,这个目标一般用一个符号表示,在地图上表示为一个图标。

CMapXFeatureFactory FeaFac; 
CMapXLayer   Layer;
CMapXFeature Feature;
CMapXStyle   Style;
double centerX,centerY;    //得到地图的中心
centerX = m_ctrlMapX.GetCenterX();
centerY = m_ctrlMapX.GetCenterY();

// 判断是否存在tempLayer图层
CMapXLayers layers=m_ctrlMapX.GetLayers();
BOOL Flag = FALSE;

for(int i=0;i<layers.GetCount();i++)
{
	Layer=layers.Item(i+1);
	if(Layer.GetName()=="tempLayer") 
	{
		Flag=true;  
		break;
	} 
}

//没有tempLayer图层,就新建
if (Flag==false)
{
	CMapXLayer lyr=m_ctrlMapX.GetLayers().CreateLayer("tempLayer");
	m_ctrlMapX.GetLayers().SetAnimationLayer(lyr); //设为动态图层  
}

Layer=m_ctrlMapX.GetLayers().Item("tempLayer");
FeaFac=m_ctrlMapX.GetFeatureFactory();

//加点
centerX = ((long)centerX + rand() % 20)%90;
centerY = ((long)centerY + rand() % 20)%90;


//判断边界,如果超出范围,则移动
if ((m_pRect.GetXMax() < centerX ) 
	|| (m_pRect.GetXMin() > centerX ) 
	|| (m_pRect.GetYMax() < centerY ) 
	|| (m_pRect.GetYMax() < centerY ))
{
	m_ctrlMapX.ZoomTo(m_dCurZoom, centerX, centerY);
	ATLTRACE("移动位置\n");
}
//
try
{
	Feature = FeaFac.CreateSymbol(); //添加符号
	Style=Feature.GetStyle();
	Style.SetSymbolType(miSymbolTypeBitmap);
	Style.SetSymbolBitmapName("CAUT1-32.BMP");
	Style.SetSymbolBitmapSize(16);
	Style.SetSymbolBitmapTransparent(TRUE);

	Feature.SetStyle(Style.m_lpDispatch);
	Feature.GetPoint().Set(centerX, centerY);
	iCount = Layer.AllFeatures().GetCount();

	for (int i = 0; i < Layer.AllFeatures().GetCount(); i++)
	{
		Layer.DeleteFeature(Layer.AllFeatures().Item(Layer.AllFeatures().GetCount()).GetFeatureID());
		iCount = Layer.AllFeatures().GetCount();
	}
	Layer.AddFeature(Feature);  //加入Feature
	Layer.Refresh();            //更新图层
}


在地图视图位置改变时,会触发一个事件,我们通过该事件,获取目前边界范围

BOOL CMapView::OnMapViewChanged()
{
	m_dPrevZoom = m_dCurZoom;
	m_dPrevX = m_dCurX;
	m_dPrevY = m_dCurY;

	try 
	{
		m_dCurZoom = m_ctrlMapX.GetZoom();
		m_dCurX = m_ctrlMapX.GetCenterX();
		m_dCurY = m_ctrlMapX.GetCenterY();

		m_pRect = m_ctrlMapX.GetBounds();   //获取边界
	}
	catch (COleDispatchException *e) {
		e->ReportError();
		e->Delete();
	}
	catch (COleException *e) {
		e->ReportError();
		e->Delete();
	}

	return TRUE;
}


在设置符号的时候,判断坐标的位置,是否在边界内,如果在边界内,就直接显示符号,否则,我们要移动地图的位置,以便能在可视范围内看见图标。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值