문제

Android 1.0에는 방향을 운전하기위한 com.google.googlenav 네임 스페이스가있었습니다.
루트 - 개선 된 Google 운전 방향
그러나 새로운 SDK에서는 어떤 이유로 든 제거되었습니다 ...
Android : API 1.0 이후 운전 방향이 제거되었습니다 - 1.5/1.6에서 어떻게해야합니까?BlackBerry에는 그러한 것들에 대한 API도 부족합니다.
Blackberry에서 두 곳 사이의 경로를 찾는 방법은 무엇입니까?

CSIE-TW는 해결 방법을 제공합니다 (KML 파일의 쿼리 GMAPS 및 구문 분석) :
안드로이드 - 운전 방향 (경로 경로)
또한 안드레아 만들어졌다 운전 방향 도우미 수업 안드로이드의 경우.
J2ME 에서이 기능에 대해 약간의 도우미를 썼으므로 Android 및 BlackBerry에서 샘플을 공유하고 싶습니다.

업데이트
의견에 언급 된 바와 같이 공식적으로 허용되지 않습니다. Google은 APIS 서비스 약관을지도합니다 :

Google Maps/Google Earth APIS 서비스 약관
마지막 업데이트 : 2009 년 5 월 27 일
...
10. 라이센스 제한. 이 약관에 따라 명시 적으로 허용되거나 Google으로부터 사전 서면 승인을받지 않는 한 (또는 해당되는 특정 콘텐츠 제공 업체) 위의 Google 라이센스는 아래의 모든 제한 사항을 준수해야합니다. 섹션 7 또는 MAPS API 문서에서 명시 적으로 허용되는 경우를 제외하고, 귀하는 다음과 같은 사람을 허용하지 않아야합니다.
...
10.9 제품, 시스템 또는 응용 프로그램과 함께 서비스 또는 콘텐츠를 사용하십시오.
(a) 사용자의 센서 지원 장치의 위치와 동기화 된 전환 경로 지침을 포함하되 이에 국한되지 않는 실시간 탐색 또는 경로 지침;

특정 앱에 대해 비활성화 될 수 있습니다 (어떻게 든 적어도 Android에서) ... .NET 대화에서 지오 코드 스크래핑:

API 이용 약관에서는 허용되지 않습니다. Google지도를 긁어서 지오 코드를 생성해서는 안됩니다. 서버의 자동화 된 쿼리를하는 서비스를 차단합니다.

브렛 테일러
Google지도 제품 관리자

대안 및/또는 제안에 감사 할 것입니다!
감사!

도움이 되었습니까?

해결책

J2ME 맵 경로 공급자

maps.google.com에는 노선 정보를 제공 할 수있는 내비게이션 서비스가 있습니다. KML 체재.

KML 파일을 얻으려면 시작 및 대상 위치와 함께 URL을 형성해야합니다.

public static String getUrl(double fromLat, double fromLon,
                            double toLat, double toLon) {// connect to map web service
    StringBuffer urlString = new StringBuffer();
    urlString.append("http://maps.google.com/maps?f=d&hl=en");
    urlString.append("&saddr=");// from
    urlString.append(Double.toString(fromLat));
    urlString.append(",");
    urlString.append(Double.toString(fromLon));
    urlString.append("&daddr=");// to
    urlString.append(Double.toString(toLat));
    urlString.append(",");
    urlString.append(Double.toString(toLon));
    urlString.append("&ie=UTF8&0&om=0&output=kml");
    return urlString.toString();
}

다음으로 XML (saxparser로 구현)을 구문 분석하고 데이터 구조를 채워야합니다.

public class Point {
    String mName;
    String mDescription;
    String mIconUrl;
    double mLatitude;
    double mLongitude;
}

public class Road {
    public String mName;
    public String mDescription;
    public int mColor;
    public int mWidth;
    public double[][] mRoute = new double[][] {};
    public Point[] mPoints = new Point[] {};
}

네트워크 연결은 Android 및 BlackBerry에서 다양한 방식으로 구현되므로 먼저 URL을 구성해야합니다.

 public static String getUrl(double fromLat, double fromLon,
     double toLat, double toLon)

그런 다음이 URL과 연결을 작성하고 입력 스트림을 얻습니다.
그런 다음이 입력 스트림을 전달하고 구문 분석 데이터 구조를 얻습니다.

 public static Road getRoute(InputStream is) 

전체 소스 코드 RoadProvider.java

블랙 베리

class MapPathScreen extends MainScreen {
    MapControl map;
    Road mRoad = new Road();
    public MapPathScreen() {
        double fromLat = 49.85, fromLon = 24.016667;
        double toLat = 50.45, toLon = 30.523333;
        String url = RoadProvider.getUrl(fromLat, fromLon, toLat, toLon);
        InputStream is = getConnection(url);
        mRoad = RoadProvider.getRoute(is);
        map = new MapControl();
        add(new LabelField(mRoad.mName));
        add(new LabelField(mRoad.mDescription));
        add(map);
    }
    protected void onUiEngineAttached(boolean attached) {
        super.onUiEngineAttached(attached);
        if (attached) {
            map.drawPath(mRoad);
        }
    }
    private InputStream getConnection(String url) {
        HttpConnection urlConnection = null;
        InputStream is = null;
        try {
            urlConnection = (HttpConnection) Connector.open(url);
            urlConnection.setRequestMethod("GET");
            is = urlConnection.openInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return is;
    }
}

전체 코드를 참조하십시오 j2memaprouteblackberryex Google 코드에서

기계적 인조 인간

Android G1 screenshot

public class MapRouteActivity extends MapActivity {
    LinearLayout linearLayout;
    MapView mapView;
    private Road mRoad;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mapView = (MapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);
        new Thread() {
            @Override
            public void run() {
                double fromLat = 49.85, fromLon = 24.016667;
                double toLat = 50.45, toLon = 30.523333;
                String url = RoadProvider
                        .getUrl(fromLat, fromLon, toLat, toLon);
                InputStream is = getConnection(url);
                mRoad = RoadProvider.getRoute(is);
                mHandler.sendEmptyMessage(0);
            }
        }.start();
    }

    Handler mHandler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            TextView textView = (TextView) findViewById(R.id.description);
            textView.setText(mRoad.mName + " " + mRoad.mDescription);
            MapOverlay mapOverlay = new MapOverlay(mRoad, mapView);
            List<Overlay> listOfOverlays = mapView.getOverlays();
            listOfOverlays.clear();
            listOfOverlays.add(mapOverlay);
            mapView.invalidate();
        };
    };

    private InputStream getConnection(String url) {
        InputStream is = null;
        try {
            URLConnection conn = new URL(url).openConnection();
            is = conn.getInputStream();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return is;
    }
    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }
}

전체 코드를 참조하십시오 J2MemaprouteAndroidex Google 코드에서

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top