ซ่อน/แสดง tag

Tag

เป็น feature หนึ่งของ Longdo Map ที่ช่วยให้สามารถแสดงสถานที่ประเภทต่างๆ ที่มีจำนวนมากๆ เช่น ปั๊มน้ำมัน, โรงพยาบาล และ ธนาคาร ได้ในคำสั่งเดียว และช่วยจัดการการแสดงผลไม่ให้สถานที่ถูกแสดงมากเกินไปในซูมต่ำๆ

การแสดง Tag

สามารถทำได้โดยใช้คำสั่ง Map.addTag() โดยส่งชื่อ tag ไปด้วย เช่น

ldmap.addTag("bank");

ชื่อ tag ที่ถูกใช้งานบ่อยๆ เช่น gas_station, hotel, building, bank, hospital, restaurant เป็นต้น

การลบ Tag

การลบ Tag ใช้คำสั่ง Map.removeTag() โดยส่งชื่อ Tag ไปด้วย เช่น

ldmap.removeTag("bank");

การแสดง Tag แบบกำหนดเอง (Custom Tag)

Custom Tag ทำงานเหมือน tag ปกติ แต่แอพพลิเคชั่นสามารถกำหนด URL เพื่อดาวน์โหลดข้อมูล tag และกำหนดว่าจะทำอะไรกับข้อมูล tag ที่ได้มา การเพิ่ม custom tag ลงไปบนแผนที่ แอพพลิเคชั่นจะต้องสร้าง class ที่ implement ICustomTagCallback เพื่อส่งให้กับ SDK ด้วย โดยมี method ที่ต้อง implement อยู่ 2 method คือ

onRequestUrl(int zoomLevel, long tileNumber)

เมื่อ SDK ต้องการ URL ที่จะไปดาวน์โหลดข้อมูล SDK จะส่งระดับซูมปัจุบัน (zoomLevel) และหมายเลข tile มาให้ (tileNumber) และ method จะต้องส่ง URL ที่สร้างด้วยข้อมูลทั้งสองอย่างหรืออย่างใดอย่างหนึ่งหรือไม่ใช้เลยก็ได้กลับไปให้ SDK

onCustomTagReady(String result)

เมื่อ SDK ดาวน์โหลดข้อมูลเสร็จแล้ว SDK จะส่งข้อมูลที่ได้จาก server มาเป็น String เช่น JSON หรือ XML

ตัวอย่าง

ICustomTagCallback callback = new ICustomTagCallback() {

    @Override
    public String onRequestUrl(int zoomLevel, long tileNumber) {
        return "https://clusterer.longdo.com/ClusterService/json/cluster/epsg3857/" + zoomLevel + "/" + tileNumber + "/th/?tag[0]=hospital&key=XXX";
    }

    @Override
    public void onCustomTagReady(String result) {
        try {
            JSONObject resultObj = new JSONObject(result);
            JSONArray tags = resultObj.getJSONArray("data");
            JSONObject meta = resultObj.getJSONObject("meta");
            int zoomLevel = meta.getInt("z");
            for(int i=0;i<tags.length();i++){
                JSONObject tag = tags.getJSONObject(i);
                Pin p = new Pin(new MapLocation(tag.getDouble("lon"),tag.getDouble("lat")),MainActivity.this,R.drawable.pin2);
                p.setMinZoom(zoomLevel);
                p.setMaxZoom(zoomLevel);
                ldmap.pushPin(p);
            }
        } catch (JSONException e) {
            Log.w("custom tag","error parsing custom tag json");
            e.printStackTrace();
        }
    }
};

ldmap.addCustomTag("custom_gas_station",callback,0,20);
กลับหน้าหลัก