Mit Google Maps Restaurants in der Umgebung anzeigen lassen

  • Antworten:4
Christina
  • Forum-Beiträge: 2

13.06.2012, 23:45:32 via Website

Hallo liebe Androider,

so ich sitz gerade vor einem Thema, mit dem sich bestimmt schon mehrere beschäftigt haben, ich aber keine sinnvolle Lösung find.

Also ich möchte gerne eine Google Maps Abfrage zu den Restaurants in meiner Umgebung machen und diese dann im MapView anzeigen.
Nun hab ich schon eine MapView mit Marker meiner jetztigen Position, habe das dann an https://maps.googleapis.com/maps/api/place/search/json?location=...&types=...usw. geschickt. Die Anfrage stimmt soweit, ich bekomm auch die Daten, die ich haben will, aber eben nur in einer häßlichen Liste.

Meine Frage ist nun: Wie bekomm ich die gewonnen Daten am besten zurück auf meine Map, mit Marker und kurzer Beschreibung (Name, Adresse).
Gibt es da nicht von der Google Maps API eine elegante Lösung?

Antworten
Christina
  • Forum-Beiträge: 2

14.06.2012, 23:40:41 via Website

Danke für den Link.
In meiner Liste stehen nun die Antworten von der Json-Abfrage, also Name und Location, irgendwelche IDs und noch ein paar Werte. Meine Idee wär jetzt halt Name und Location aus der Liste wieder rauszuholen und damit Marker auf meiner Map setzen. Aber ich hätt halt auch gern nähere Informationen zu den Marker, wenn ich sie anklick. So wie das eben bei Google Maps auch funktioniert.
Ich hab irgendwie das Gefühl, dass ich ziemlich kompliziert denke und es einen einfacheren Weg geben müsste.

Viele Grüße

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

15.06.2012, 10:41:22 via Website

In meinem Tankbuch nutze ich diese JSON Abfrage um Krankenhäuser, Werkstätten, etc. in der Nähe zu finden.

Ich arbeite sehr gerne mit regulären Ausdrücken, deshalb habe ich mir einen Pattern für das Ergebnis gebaut:

1private static final String url = "http://maps.google.com/maps?q=%s&mrt=yp&sll=%s,%s&output=json&hl=%s";
2
3 private static final Pattern patternMarkers = Pattern.compile("\\{id:\"(.+?)\"[\\s,]+?cid:\"(.+?)\"[\\s,]+?latlng:[\\{\\s]+?lat:([\\d\\.]+?)[\\s,]+?lng:([\\d\\.]+?)\\}.+?laddr:\"(.*?)\".+?sxph:\"(.*?)\"", Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
4
5 HttpGet httpGet = new HttpGet(newUrl);
6 HttpResponse httpResponse = httpClient.execute(httpGet, httpContext);
7 if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
8 HttpEntity httpEntity = httpResponse.getEntity();
9 if (httpEntity != null) {
10 arrayListPois = new ArrayList<Poi>();
11 String content = EntityUtils.toString(httpEntity, HTTP.UTF_8);
12 if (!StringUtils.isEmpty(content)) {
13 Matcher matcher = patternMarkers.matcher(content);
14 while (matcher.find()) {
15 Poi poi = new Poi();
16 poi.setCid(matcher.group(2));
17 poi.setId(matcher.group(1));
18 poi.setLaddr(matcher.group(5));
19 poi.setLatitude(Tools.toDouble(matcher.group(3)));
20 poi.setLongitude(Tools.toDouble(matcher.group(4)));
21 poi.setPoityp(poityp_id);
22 poi.setSxph(matcher.group(6));
23 arrayListPois.add(poi);
24 }
25 }
26 }
27 }

Antworten