// 받아온 위도 경도 좌표를 지도상에 보여주는 함수 private void showMyLocation(double latitude, double longitude) { NMapViewerResourceProvider mMapViewerResourceProvider = null; NMapOverlayManager mOverlayManager; mMapViewerResourceProvider = new NMapViewerResourceProvider(this); mOverlayManager = new NMapOverlayManager(this, mapview, mMapViewerResourceProvider); NGeoPoint myPoint = new NGeoPoint(longitude, latitude); // 위치 좌표에 오버레이 아이템을 표시하여 지도상에 보여주는 부분 // 오버레이 아이템 상에 있는 이미지 PIN을 이용하는 부분 int markerId = NMapPOIflagType.PIN; NMapPOIdata poiData = new NMapPOIdata(1, mMapViewerResourceProvider); poiData.beginPOIdata(1); // 좌표 정보와 오버레이 아이템 정보, 텍스트 정보를 설정한다. poiData.addPOIitem(myPoint, "현재 위치", markerId, 0); poiData.endPOIdata(); NMapPOIdataOverlay poiDataOverlay = mOverlayManager.createPOIdataOverlay(poiData, null); poiDataOverlay.showAllPOIdata(0); // 지도 상에 위치 좌표와 오버레이 아이템 모두를 보여준다. (최종적으로 지도상에 표시하고 보여주는 부분) NMapController controller = mapview.getMapController(); controller.animateTo(myPoint); }
private void adjustTextBounds(NMapView mapView) { // First determine the screen coordinates of the selected MapLocation mapView.getMapProjection().toPixels(mOverlayItem.getPointInUtmk(), mTempPoint); int mapViewWidth = mapView.getMapController().getViewFrameVisibleWidth(); if (mTitleTruncated == null || mWidthTitleTruncated != mapViewWidth) { mWidthTitleTruncated = mapViewWidth; float maxWidth = mWidthTitleTruncated - 2 * mMarginX - 2 * mPaddingX; if (DEBUG) { Log.i( LOG_TAG, "adjustTextBounds: maxWidth=" + maxWidth + ", mMarginX=" + mMarginX + ", mPaddingX=" + mPaddingX); } if (mDrawableRightButton != null) { maxWidth -= mPaddingX + mCalloutRightButtonWidth; } if (mTailText != null) { mTextPaint.getTextBounds(mTailText, 0, mTailText.length(), mTempRect); mTailTextWidth = mTempRect.width(); maxWidth -= mTailGapX + mTailTextWidth; } final String title = TextUtils.ellipsize( mOverlayItem.getTitle(), mTextPaint, maxWidth, TextUtils.TruncateAt.END) .toString(); mTitleTruncated = title; if (DEBUG) { Log.i( LOG_TAG, "adjustTextBounds: mTitleTruncated=" + mTitleTruncated + ", length=" + mTitleTruncated.length()); } } mTextPaint.getTextBounds(mTitleTruncated, 0, mTitleTruncated.length(), mTempRect); if (mDrawableRightButton != null) { mTempRect.right += mPaddingX + mCalloutRightButtonWidth; } if (mTailText != null) { mTempRect.right += mTailGapX + mTailTextWidth; } if (DEBUG) { Log.i( LOG_TAG, "adjustTextBounds: mTempRect.width=" + mTempRect.width() + ", mTempRect.height=" + mTempRect.height()); } // Setup the callout with the right size & location mTempRectF.set(mTempRect); final float dy = (mBackgroundHeight - mTempRect.height()) / 2; mTempRectF.inset(-mPaddingX, -dy); // mTempRectF.inset(-mPaddingX, -mPaddingY); // set minimum size if (mTempRectF.width() < mMinimumWidth) { final float dx = (mMinimumWidth - mTempRectF.width()) / 2; mTempRectF.inset(-dx, 0); } // set position float left = mTempPoint.x - (int) (mTempRectF.width() * mOverlayItem.getAnchorXRatio()); float top = mTempPoint.y - (int) (mItemBounds.height() * mOverlayItem.getAnchorYRatio()) - mItemGapY - mTotalHeight; mTempRectF.set(left, top, left + mTempRectF.width(), top + mTempRectF.height()); }