2013-08-26 2 views
3

Android에서지도 애플리케이션을 작업 중이며 Google Maps Android API V2를 사용 중입니다. 웹 서비스에서 폴리곤 데이터를 가져 와서 XML 파싱으로 변환하고 문제없이지도에 표시 할 수 있습니다. 그러나 사용자가 폴리곤을 터치 할 때 팝업처럼 열 수있는 방법이 없습니까? 또는 사용자가 선택한 다각형의 좌표를 변경하려고하는 경우 일 수 있습니다. 나는 많은 예를 보았지만 자바 스크립트로 끝나거나 다른 제 3자를 사용한다. 누군가에게 조언이 있습니까? 미리 감사드립니다.Android Google지도 다각형 클릭 이벤트

답변

0

당신이 언론의 위도와 경도를 반환 리스너 (OnMapClickListener)입니다 작업을해야하는 것은

공공 추상적 무효 onMapClick (LatLng를 포인트) 사용자가지도에 탭 제스처를 보낼 때

는하지만 경우에만, 호출 지도의 오버레이 중 아무 것도 제스처를 처리하지 못했습니다. 이 메소드의 구현은 항상 주 스레드에서 호출됩니다. 매개 변수 점 두드린 (화면 지점에서 투영 된)지면상의 지점.

그런 다음 latlng이 다각형 안에 있는지 확인하십시오.

How to determine if a point is inside a 2D convex polygon?

내가 좀 함께이 재현하지만 좋은 소식은 위도이며, LNG 이미 두 배입니다. 행운을 빌어 요

+0

하지만 하나의 다각형이있을뿐만 아니라 더 많은 것이 있습니다. 그래서 모든 폴리곤에 대해 그 점을 확인해야합니까? – Rnklnc

+0

또한이 방법을 사용하면 점이 다각형 안에 있는지 확인할 수 있습니다. 맞습니까? 다각형에 대한 좌표 또는 정보를 얻을 수 없습니까? – Rnklnc

1

나는 동일한 문제가있었습니다. onMapClickListener는 사용자가 다각형을 두드릴 때 호출되지 않으며 다른 오버레이 (예 : 다각형)가 탭 이벤트를 처리하지 않을 때만 호출됩니다. Polygon은 처리 할 수있는 것처럼 처리합니다. - GM은 다각형을 화면 가운데로 이동시킵니다. 그리고 이벤트는 onMapClickListener로 전달되지 않습니다. 설명해 드리 자면, GM이 처리하기 전에 탭 이벤트를 가로 채고, 설명 된대로 MapFragment를 래핑하고, here으로 설명한 다음 프로젝트 좌표에서지도 좌표로 클릭 한 다음지도의 다각형 안에 있는지 확인합니다. here (기타

public class MySupportMapFragment extends SupportMapFragment { 
private View mOriginalContentView; 
private TouchableWrapper mTouchView; 
private BasicMapActivity mActivity; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mActivity = (BasicMapActivity) getActivity(); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup parent, 
     Bundle savedInstanceState) { 
    mOriginalContentView = super.onCreateView(inflater, parent, 
      savedInstanceState); 
    mTouchView = new TouchableWrapper(); 
    mTouchView.addView(mOriginalContentView); 
    return mTouchView; 
} 

@Override 
public View getView() { 
    return mOriginalContentView; 
} 

class TouchableWrapper extends FrameLayout { 

    public TouchableWrapper() { 
     super(mActivity); 
    } 

    @Override 
    public boolean dispatchTouchEvent(MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      break; 
     case MotionEvent.ACTION_UP: { 
      int x = (int) event.getX(); 
      int y = (int) event.getY(); 
      mActivity.tapEvent(x,y); 
      break; 
     } 
    } 
    return super.dispatchTouchEvent(event); 
    } 
} 

} 

BasicMapActivity :

public void tapEvent(int x, int y) { 
    Log.d(TAG,String.format("tap event x=%d y=%d",x,y)); 
    if(!isEditMode()) { 
     Projection pp = mMap.getProjection(); 
     LatLng point = pp.fromScreenLocation(new Point(x, y)); 
     for (Shape ss : mPolygons) { 
      if(ss.isPointInPolygon(point)) { 
       ss.mMarkers.get(0).marker.showInfoWindow(); 
      } 
     } 
    } 
} 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_map); 
} 

레이아웃 :

,536,913 대답은) 너무 그것에 대해

관련 코드를 알려줍니다

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<fragment 
    android:id="@+id/map" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    class="au.com.datalink.plugins.MySupportMapFragment" /> 

</RelativeLayout>