Google Maps Android GeoJSON Utility

پلتفرم را انتخاب کنید: Android iOS JavaScript
  1. مقدمه
  2. یک GeoJsonLayer به نقشه خود اضافه کنید
  3. GeoJsonLayer را حذف کنید
  4. یک GeoJsonFeature را اضافه و حذف کنید
  5. به ویژگی های GeoJson و ویژگی های آنها دسترسی داشته باشید
  6. به GeoJsonLayer و GeoJson Features استایل دهید
  7. برنامه دمو را ببینید

مقدمه

GeoJSON توسعه فرمت داده JSON است و داده های جغرافیایی را نشان می دهد. با استفاده از این ابزار، می‌توانید ویژگی‌های جغرافیایی را در قالب GeoJSON ذخیره کنید و آنها را به صورت یک لایه در بالای نقشه رندر کنید. برای افزودن و حذف داده‌های GeoJSON خود به نقشه، به ترتیب addLayerToMap() و removeLayerFromMap() را فراخوانی کنید. به طور مشابه، می‌توانید با فراخوانی addFeature() و removeFeature() و ارسال یک شی GeoJsonFeature ، ویژگی‌های فردی را اضافه و حذف کنید. اگر می‌خواهید به ویژگی‌ها دسترسی داشته باشید، می‌توانید getFeatures() را فراخوانی کنید تا از تمام اشیاء GeoJsonFeature که به لایه اضافه شده‌اند یک تکرار شونده دریافت کنید.

همچنین می‌توانید با فراخوانی getDefaultPointStyle() ، getDefaultLineStringStyle() یا getDefaultPolygonStyle() استایل‌های پیش‌فرض را برای اعمال بر روی ویژگی‌ها قبل از اضافه شدن به لایه تنظیم کنید و گزینه‌های سبک را روی هر کدام تنظیم کنید. همچنین، می‌توانید با فراخوانی setPointStyle() , setLineStringStyle() یا setPolygonStyle() روی ویژگی و ارسال شیء سبک مربوطه، استایل را برای یک GeoJsonFeature تنظیم کنید.

یک GeoJsonLayer به نقشه خود اضافه کنید

برای افزودن یک لایه GeoJson به نقشه، ابتدا یک نمونه از کلاس GeoJsonLayer ایجاد کنید. دو راه برای نمونه سازی GeoJsonLayer وجود دارد.

برای وارد کردن از یک JSONObject ، به موارد زیر نیاز دارید:

  • شیء GoogleMap که در آن لایه قرار است رندر شود
  • JSONObject حاوی داده های GeoJSON برای اضافه شدن به لایه

کاتلین



val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data
val layer = GeoJsonLayer(map, geoJsonData)

      

جاوا


JSONObject geoJsonData = // JSONObject containing the GeoJSON data
GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);

      

برای وارد کردن از یک فایل GeoJSON محلی به موارد زیر نیاز دارید:

  • شیء GoogleMap که در آن لایه قرار است رندر شود
  • فایل منبع محلی حاوی داده های GeoJSON
  • شی Context ، که برای باز کردن یک فایل منبع محلی مورد نیاز است

کاتلین



val layer = GeoJsonLayer(map, R.raw.geojson_file, context)

      

جاوا


GeoJsonLayer layer = new GeoJsonLayer(map, R.raw.geojson_file, context);

      

بعد از اینکه GeoJsonLayer را ایجاد کردید، با addLayerToMap() تماس بگیرید تا داده های وارد شده را به نقشه اضافه کنید:

کاتلین



layer.addLayerToMap()

      

جاوا


layer.addLayerToMap();

      

GeoJsonLayer را حذف کنید

فرض کنید این لایه را اضافه کرده اید

کاتلین



val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data
val layer = GeoJsonLayer(map, geoJsonData)

      

جاوا


JSONObject geoJsonData = // JSONObject containing the GeoJSON data
GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);

      

برای پاک کردن GeoJsonLayer، removeLayerFromMap() فراخوانی کنید.

کاتلین



layer.removeLayerFromMap()

      

جاوا


layer.removeLayerFromMap();

      

یک GeoJsonFeature را اضافه و حذف کنید

یک ویژگی در GeoJSON دارای نوع "ویژگی" است. این شامل یک هندسه، یک عضو ویژگی است و به صورت اختیاری دارای یک جعبه مرزی یا یک شناسه است.

می توانید اشیاء GeoJsonFeature را به صورت جداگانه ایجاد کنید و آنها را به GeoJsonLayer اضافه کنید.

بیایید فرض کنیم که یک ویژگی حاوی یک نقطه در 0، 0 با یک ورودی در ویژگی های آن و بدون کادر محدود ایجاد کرده اید.

کاتلین



val point = GeoJsonPoint(LatLng(0.0, 0.0))
val properties = hashMapOf("Ocean" to "South Atlantic")
val pointFeature = GeoJsonFeature(point, "Origin", properties, null)

      

جاوا


GeoJsonPoint point = new GeoJsonPoint(new LatLng(0, 0));
HashMap<String, String> properties = new HashMap<>();
properties.put("Ocean", "South Atlantic");
GeoJsonFeature pointFeature = new GeoJsonFeature(point, "Origin", properties, null);

      

برای افزودن ویژگی به لایه، addFeature() را فراخوانی کنید و ویژگی را برای افزودن وارد کنید.

کاتلین



layer.addFeature(pointFeature)

      

جاوا


layer.addFeature(pointFeature);

      

برای حذف یک ویژگی پس از افزودن آن به لایه، removeFeature() را فراخوانی کنید و ویژگی را برای حذف وارد کنید.

کاتلین



layer.removeFeature(pointFeature)

      

جاوا


layer.removeFeature(pointFeature);

      

به ویژگی های GeoJson و ویژگی های آنها دسترسی داشته باشید

برای دسترسی به تمام ویژگی‌های GeoJson که به لایه اضافه شده‌اند، می‌توانید getFeatures() در GeoJsonLayer که ایجاد کرده‌اید فراخوانی کنید. این یک تکرار از GeoJsonFeatures را برمی‌گرداند که می‌توانید با استفاده از یک حلقه برای هر یک مانند زیر به آن دسترسی داشته باشید.

کاتلین



for (feature in layer.features) {
    // Do something to the feature
}

      

جاوا


for (GeoJsonFeature feature : layer.getFeatures()) {
    // Do something to the feature
}

      

از متد hasProperty() و getProperty() همراه با متد getFeatures() استفاده کنید تا بررسی کنید که آیا هر ویژگی ذخیره شده دارای خاصیت خاصی است یا خیر و در صورت وجود به آن دسترسی داشته باشید.

کاتلین



if (feature.hasProperty("Ocean")) {
    val oceanProperty = feature.getProperty("Ocean")
}

      

جاوا


if (feature.hasProperty("Ocean")) {
    String oceanProperty = feature.getProperty("Ocean");
}

      

GeoJSON Geometry روی رویدادها کلیک کنید

می‌توانید از GeoJsonLayer.OnFeatureClickListener() برای گوش دادن به رویدادهای کلیک روی ویژگی‌های هندسه روی نقشه استفاده کنید. هنگامی که کاربر روی ویژگی کلیک می کند، مثال زیر عنوان یک ویژگی را ثبت می کند:

کاتلین



// Set a listener for geometry clicked events.
layer.setOnFeatureClickListener { feature ->
    Log.i("GeoJsonClick", "Feature clicked: ${feature.getProperty("title")}")
}

      

جاوا


// Set a listener for geometry clicked events.
layer.setOnFeatureClickListener(new Layer.OnFeatureClickListener() {
    @Override
    public void onFeatureClick(Feature feature) {
        Log.i("GeoJsonClick", "Feature clicked: " + feature.getProperty("title"));
    }
});

      

به GeoJsonLayer و GeoJson Features استایل دهید

می‌توانید استایل‌های پیش‌فرض را برای GeoJsonLayer تنظیم کنید، یا به ویژگی‌های فردی در لایه استایل دهید.

سبک های پیش فرض

در GeoJsonLayer، می‌توانید سبک‌های پیش‌فرض را برای هر نقطه، رشته خط و چند ضلعی که به لایه اضافه می‌شود، تنظیم کنید. سبک‌های پیش‌فرض فقط در صورتی اعمال می‌شوند که ویژگی برای هیچ یک از هندسه‌هایش مجموعه سبکی نداشته باشد. هر تغییری که در سبک پیش‌فرض ایجاد کنید در تمام ویژگی‌هایی که از سبک پیش‌فرض استفاده می‌کنند نیز منعکس می‌شود.

مراحل اعمال یک سبک پیش فرض به شرح زیر است

  1. شیء سبک پیش‌فرض مربوطه را بازیابی کنید، این می‌تواند یکی از GeoJsonPointStyle ، GeoJsonLineStringStyle یا GeoJsonPolygonStyle باشد.
  2. گزینه های مورد نظر خود را روی استایل اعمال کنید.

به عنوان مثال، نمونه کد زیر نشان می دهد که چگونه می توان سبک نقطه پیش فرض را تغییر داد که باعث می شود نقاط با عنوان و قطعه قابل کشیدن باشند.

کاتلین



val pointStyle = layer.defaultPointStyle
pointStyle.isDraggable = true
pointStyle.title = "Hello, World!"
pointStyle.snippet = "I am a draggable marker"

      

جاوا


GeoJsonPointStyle pointStyle = layer.getDefaultPointStyle();
pointStyle.setDraggable(true);
pointStyle.setTitle("Hello, World!");
pointStyle.setSnippet("I am a draggable marker");

      

سبک‌های مختص GeoJsonFeature

از طرف دیگر، می‌توانید ویژگی‌های فردی را در لایه استایل دهید. مراحل اعمال یک استایل در GeoJsonFeature به شرح زیر است.

  1. شی سبک مربوطه را ایجاد کنید، این شیء می تواند GeoJsonPointStyle ، GeoJsonLineStringStyle یا GeoJsonPolygonStyle باشد.
  2. گزینه های مورد نظر خود را روی استایل اعمال کنید.
  3. شی استایل را به متد مربوطه در GeoJsonFeature ارسال کنید، که یا setPointStyle() ، setLineStringStyle() یا setPolygonStyle() خواهد بود.

به عنوان مثال، به این صورت است که استایل رشته خط را برای GeoJsonFeature سفارشی کنید تا رنگ آن قرمز باشد.

کاتلین



// Create a new feature containing a linestring
val lineStringArray: MutableList<LatLng> = ArrayList()
lineStringArray.add(LatLng(0.0, 0.0))
lineStringArray.add(LatLng(50.0, 50.0))
val lineString = GeoJsonLineString(lineStringArray)
val lineStringFeature = GeoJsonFeature(lineString, null, null, null)

// Set the color of the linestring to red
val lineStringStyle = GeoJsonLineStringStyle()
lineStringStyle.color = Color.RED

// Set the style of the feature
lineStringFeature.lineStringStyle = lineStringStyle

      

جاوا


// Create a new feature containing a linestring
List<LatLng> lineStringArray = new ArrayList<LatLng>();
lineStringArray.add(new LatLng(0, 0));
lineStringArray.add(new LatLng(50, 50));
GeoJsonLineString lineString = new GeoJsonLineString(lineStringArray);
GeoJsonFeature lineStringFeature = new GeoJsonFeature(lineString, null, null, null);

// Set the color of the linestring to red
GeoJsonLineStringStyle lineStringStyle = new GeoJsonLineStringStyle();
lineStringStyle.setColor(Color.RED);

// Set the style of the feature
lineStringFeature.setLineStringStyle(lineStringStyle);

      

برنامه دمو را ببینید

برای مثالی از وارد کردن یک فایل GeoJSON از یک URL و ایجاد یک لایه با آن، به GeoJsonDemoActivity در برنامه آزمایشی که با کتابخانه ابزار ارسال می‌شود، نگاهی بیندازید. راهنمای راه اندازی به شما نشان می دهد که چگونه برنامه آزمایشی را اجرا کنید.