지리적 URI 인 텐트로 시작된지도에 마커를 표시하려면 어떻게하나요?


107

특정 지리적 좌표로 Google지도를 시작하여 다른 위치 (한 번에 하나씩, 사용자 입력에 의해 선택됨)를 표시하려는 응용 프로그램이 있습니다.

나는 현재 이것을 사용하고 있습니다 (물론 실제 위도 및 경도 값 포함) :

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:<lat>,<long>?z=17"));
startActivity(intent);

지정된 지점에 대한 표시 기나 마커가 표시되지 않는다는 점을 제외하고는 내가 원하는 것과 정확히 일치합니다. 그것은 그 위치에만 집중됩니다.

MapView를 사용하지 않고 마커 또는 다른 것을 포함하는 방법이 있습니까?


가장 최근지도 업데이트에서 라벨 표시가 중지되었습니다. .. 어떻게해야합니까?
user2297550

답변:


254

이 시도:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:<lat>,<long>?q=<lat>,<long>(Label+Name)"));
startActivity(intent);

레이블을 원하지 않는 경우 (Label + Name)을 생략 할 수 있으며, 가장 가까운 거리 또는 관련성이 있다고 생각되는 다른 항목을 기반으로 무작위로 하나를 선택합니다.


이 URI를 구현 한 후 확대 / 축소 설정에 문제가 있습니다. 지금 쓸모없는 것 같습니다
LuckyMalaka

8
@mmm ... :? z를 & z로 변경해야합니다. 당신은 하나만 가질 수 있습니까? URI에서. BAD : geo : N, M? z = 10? q = N, M (Place) GOOD : geo : N, M? z = 10 & q = N, M (Place)
Josh

확대 / 축소가 여전히 작동하지 않습니다 (하지만 레이블은 작동합니다). 또한지도에서 관련 항목을 찾을 수없는 경우 (라벨과 함께 제공하더라도) 토스트 오류가 표시됩니다. 이 솔루션은 작동하지만 반 최적입니다.
Warpzit

3
줌은 지리 의도가 아닌 단순한 쿼리이기 때문에 무시됩니다. 여기서 일어나는 일은 실제로 Google에 전송되는 일반 쿼리이며 서버는 이에 해당하는 "검색 결과"로 응답합니다. maps.google.com에서 <lat>, <long> (Label + Name)을 검색하면 동일한 결과를 얻을 수 있습니다
robpvn 2013 년

4
this (또는 레이블이 지정된 쿼리를 포함하는 다른 방법)을 사용하면 해당 geo:부분 의 geopoint를 완전히 무시한다고 lke robpvn이 지적했습니다. 경우에 따라 위도 / 경도를 사용하여 쿼리가 실패한 다음 지오 포인트로 돌아가는 대신 "결과 없음"알림이 표시됩니다. 어떤 종류의 GIS 앱에도 유용하지 않습니다.
Geobits

45

레이블에 앰퍼샌드 (&)가있는 경우를 제외하고 허용되는 대답은 정확합니다.

지리적 위치에 대한 Uniform Resource Identifier ( 'geo'URI) 살펴보기 :

섹션 5.1은 다음과 같이 설명합니다.

최종 URI가 '쿼리'구성 요소를 포함하는 경우 구성 요소 구분 기호 "?"를 추가합니다. 결과의 끝에 인코딩 된 쿼리 문자열이 이어집니다.

불행히도 이렇게하면 우리가 원하는 것이 아닌 '='도 피할 수 있습니다.

이렇게해야합니다.

String label = "Cinnamon & Toast";
String uriBegin = "geo:12,34";
String query = "12,34(" + label + ")";
String encodedQuery = Uri.encode(query);
String uriString = uriBegin + "?q=" + encodedQuery;
Uri uri = Uri.parse(uriString);
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, uri);
startActivity(intent);

2
이 기능은 새 Google지도 7.x에서 중단되었습니다. code.google.com/p/android/issues/detail?id=58507
ATom 2013 년

42

인 텐트를 사용하여 Google지도를 시작하는 더 많은 옵션이 있습니다.

   Double myLatitude = 44.433106;
   Double myLongitude = 26.103687;
   String labelLocation = "Jorgesys @ Bucharest";

1)

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:<" + myLatitude  + ">,<" + myLongitude + ">?q=<" + myLatitude  + ">,<" + myLongitude + ">(" + labelLocation + ")"));
    startActivity(intent);

2)

String urlAddress = "http://maps.google.com/maps?q="+ myLatitude  +"," + myLongitude +"("+ labelLocation + ")&iwloc=A&hl=es";
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlAddress));
    startActivity(intent);

삼)

   String urlAddress = "http://maps.googleapis.com/maps/api/streetview?size=500x500&location=" + myLatitude  + "," + myLongitude + "&fov=90&heading=235&pitch=10&sensor=false";
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlAddress));
        startActivity(intent);

2 모양) "& iwloc = A & HL = ES"정말 필요하지 않습니다
올리비에 드 욘게

"iwloc"은 정보 창 위치를 나타내고 "hl"은 언어를 나타냅니다.이 값을 설정하지 않으면 기본값이 적용됩니다. =)
Jorgesys

)두 번째 방법 을 그리워 합니다.
Sen

업! 두 번째와 세 번째 옵션! 감사합니다. ᕦ '• ᴥ •`ᕥ @Baras
Jorgesys

5

이 문자열은 나를 위해 잘 작동합니다.

String geoUriString="geo:"+lat+","+lon+"?q=("+head+")@"+lat+","+lon;
Uri geoUri = Uri.parse(geoUriString);
Log.e(TAG, "String: "+geoUriString);
Intent mapCall  = new Intent(Intent.ACTION_VIEW, geoUri);
startActivity(mapCall);

2

geo : uri에 (LocationMarkerName)을 추가해보십시오. 예 : "geo :,? z = 17 (LocationMarkerName)"

Android의 Google지도에서 23.0980,30.6797 (NamedMarker)을 검색하면지도 중앙에 이름이 NamedMarker 인 마커를 해당 위치에 배치하는 것 같습니다.


1

@Kenton Price의 다음 스 니펫이 Android 4.4 (KitKat)에서 여전히 작동하는지 확인했습니다.

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:<lat>,<long>?q=<lat>,<long>(Label+Name)"));
startActivity(intent);

0

지도 위에 마커를 그리기 위해 MapView와 함께 오버레이 만 사용했습니다. 뷰에 맵이 표시되는 경우 뷰에 이미지를 그리는 것과 같은 방식으로 화면 중앙에 마커를 그릴 수 있습니다.

그러나 마커는 실제지도 좌표에 연결되지 않지만 정적보기 인 경우 연결될 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.