0

JSON API の緯度と経度を地図上に表示しようとしてきましたが、json 値を解析し、android book を使用してアイテム化されたオーバーレイを作成しました。ただし、2 つのことは接続されておらず、解析された緯度/経度をマップに配置する方法がわかりません。誰でも私に解決策を教えてもらえますか

値を配列に解析してマップに表示しようとしています。

どうすればこれを達成できますか?

どんな解決策でも感謝します。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.mapview);

    mapView = (MapView) findViewById(R.id.mapview);
    mapView.setBuiltInZoomControls(true);
   // mapView.setStreetView(true);
   // mapView.isStreetView();
   // mapView.isSatellite();

    JSONArray properties = null;
    JSONParser jParser = new JSONParser();
    JSONObject json = jParser.getJSONFromUrl(url);
    try {
        // Getting Array of Contacts
        properties = json.getJSONArray(TAG_PROPERTY);

        // looping through All Contacts
        for (int i = 0; i < properties.length(); i++) {
            JSONObject c = 
                            properties.getJSONObject(i);                
            String lat = c.getString(TAG_LATITUDE);
            String longi = c.getString(TAG_LONGITUDE);
            System.out.println(lat);


        }
    } catch (Exception e) {
    }//getting JSOn values

    Drawable marker=getResources().getDrawable(R.drawable.mapmarker); 
    marker.setBounds((int)(-marker.getIntrinsicWidth()/2),
            -marker.getIntrinsicHeight(),
            (int) (marker.getIntrinsicWidth()/2), 
            0);

    InterestingLocations funPlaces = new InterestingLocations(marker);
    mapView.getOverlays().add(funPlaces);

    GeoPoint pt = funPlaces.getCenterPt();
    double latSpan = funPlaces.getLatSpanE6();
    double lonSpan = funPlaces.getLonSpanE6();
    Log.v("Overlays", "Lat span is " + latSpan);
    Log.v("Overlays", "Lon span is " + lonSpan);

    MapController mc = mapView.getController();
    mc.setCenter(pt);
    mc.zoomToSpan((int)(latSpan*1.5), (int)(lonSpan*1.5));
}



@Override
protected boolean isLocationDisplayed() {
    return false;
}

@Override
protected boolean isRouteDisplayed() {
    return false;
}

class InterestingLocations extends ItemizedOverlay {
    private ArrayList<OverlayItem> locations = new ArrayList<OverlayItem>();
    private GeoPoint center = null;

オブジェクトの配列を使用して以下のコードを置き換える必要があります

    public InterestingLocations(Drawable marker)
    {
        super(marker);

        // create locations of interest
        GeoPoint Maddox = new 
            GeoPoint((int)(51.513292002080306*1000000),(int)(-0.1420965932139256*1000000));

        GeoPoint WoburnPlace = new 
            GeoPoint((int)(51.52457273349151*1000000),(int)(-0.12765430497584865*1000000));

        GeoPoint Capstansquare = new 
                GeoPoint((int)(51.49858590609855*1000000),(int)(-0.007696115597470304*1000000));

        GeoPoint Devonshire = new 
                GeoPoint((int)(51.52222533547292*1000000),(int)(-0.1440394063396748*1000000));

        GeoPoint Bolsover = new 
                GeoPoint((int)(51.52266783118477*1000000),(int)(-0.14358896505772278*1000000));


        GeoPoint Haymarket = new 
                GeoPoint((int)(51.51000027761305*1000000),(int)(-0.13300746016819762*1000000));


        locations.add(new OverlayItem(Haymarket, 
                "Seven Seas Lagoon", "Seven Seas Lagoon"));

        locations.add(new OverlayItem(Bolsover, 
                "Seven Seas Lagoon", "Seven Seas Lagoon"));

        locations.add(new OverlayItem(Devonshire, 
                "Seven Seas Lagoon", "Seven Seas Lagoon"));

        locations.add(new OverlayItem(Capstansquare, 
                "Seven Seas Lagoon", "Seven Seas Lagoon"));

       locations.add(new OverlayItem(WoburnPlace, 
               "Seven Seas Lagoon", "Seven Seas Lagoon"));

        locations.add(new OverlayItem(Maddox, 
               "Magic Kingdom", "Magic Kingdom"));

        populate();
    }

    //  We added this method to find the middle point of the cluster
    //  Start each edge on its opposite side and move across with each point.
    //  The top of the world is +90, the bottom -90,
    //  the west edge is -180, the east +180
    public GeoPoint getCenterPt() {
        if(center == null) {
            int northEdge = -90000000;   // i.e., -90E6 microdegrees
            int southEdge = 90000000;
            int eastEdge = -180000000;
            int westEdge = 180000000;
            Iterator<OverlayItem> iter = locations.iterator();
            while(iter.hasNext()) {
                GeoPoint pt = iter.next().getPoint();
                if(pt.getLatitudeE6() > northEdge) northEdge = pt.getLatitudeE6();
                if(pt.getLatitudeE6() < southEdge) southEdge = pt.getLatitudeE6();
                if(pt.getLongitudeE6() > eastEdge) eastEdge = pt.getLongitudeE6();
                if(pt.getLongitudeE6() < westEdge) westEdge = pt.getLongitudeE6();
            }
            center = new GeoPoint((int)((northEdge + southEdge)/2),
                    (int)((westEdge + eastEdge)/2));
        }
        return center;
    }

    @Override
    public void draw(Canvas canvas, MapView mapview, boolean shadow) {
        // Here is where we can eliminate shadows by setting to false
        super.draw(canvas, mapview, shadow);
    }


    @Override
    protected OverlayItem createItem(int i) {
        return locations.get(i);
    }

    @Override
    public int size() {
        return locations.size();
    }
}

私はこのような何かを達成する必要があります

4

1 に答える 1

1

http://www.codeproject.com/Articles/349646/Dynamic-JSON-parser

これはあなたが探しているものですか?これにより、JSON を解析できるようになります。マップに配置する方法はわかりません。bingMaps Rest サービスしか使用していません。この JSON パーサーに満足できない場合は、Google を少し調べてください。

編集:また、なぜリスト上の配列ですか? リストは、配列に入力する入力の数が不明な場合に特に便利です。リスト myLatitude = List(); Web アプリのプログラミング中に配列を使用することはほとんどないという点で、これは非常に便利な方法です。

地図にジオポイントを追加することへの答え:

GeoPoint point2 = new GeoPoint(35410000, 139460000);
OverlayItem overlayitem2 = new OverlayItem(point2, "Sekai, konichiwa!", "I'm in Japan!");

オーバーレイの仕組みの詳細については、次のリンクのパート 2 を参照してください: http://developer.android.com/resources/tutorials/views/hello-mapview.html ここでは、Android マップ ビューの使用方法に関する有用な例を多数示します。幸運を!

于 2012-04-17T15:53:45.340 に答える