Google Maps Android GeoJSON Utility

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

مقدمه

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

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

افزودن GeoJsonLayer به نقشه

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

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

  • ‫GoogleMap شیئی که لایه باید در آن پرداز شود
  • JSONObject حاوی داده‌های GeoJSON که باید به لایه اضافه شود

Kotlin

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، که برای باز کردن فایل منبع محلی لازم است

Kotlin

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

      

جاوا

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

      

پس‌از ایجاد GeoJsonLayer، addLayerToMap() را فراخوانی کنید تا داده‌های واردشده به نقشه اضافه شود:

Kotlin

layer.addLayerToMap()

      

جاوا

layer.addLayerToMap();

      

برداشتن GeoJsonLayer

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

Kotlin

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() را فراخوانی کنید

Kotlin

it.removeLayerFromMap()

      

جاوا

geoJsonLayer.removeLayerFromMap();

      

افزودن و برداشتن GeoJsonFeature

یک ویژگی در GeoJSON دارای نوع «ویژگی» است. این عنصر حاوی یک هندسه، یک عضو ویژگی، و به‌صورت اختیاری یک چارگوش کران‌دار یا شناسه است.

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

فرض کنید عارضه‌ای ایجاد کرده‌اید که حاوی نقطه‌ای در ۰، ۰ با یک ورودی در ویژگی‌هایش است و جعبه مرزی ندارد.

Kotlin

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() تماس بگیرید و ویژگی موردنظر را برای افزودن ارسال کنید.

Kotlin

layer.addFeature(pointFeature)

      

جاوا

layer.addFeature(pointFeature);

      

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

Kotlin

layer.removeFeature(pointFeature)

      

جاوا

layer.removeFeature(pointFeature);

      

دسترسی به GeoJsonFeatures و ویژگی‌های آن‌ها

برای دسترسی به همه GeoJsonFeatures که به لایه اضافه شده‌اند، می‌توانید getFeatures() را در GeoJsonLayer که ایجاد کرده‌اید فراخوانی کنید. این کار یک تکرارپذیر از GeoJsonFeatures را برمی‌گرداند که می‌توانید بااستفاده از حلقه for-each به آن دسترسی داشته باشید، همان‌طور که در زیر نشان داده شده است.

Kotlin

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

      

جاوا

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

      

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

Kotlin

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

      

جاوا

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

      

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

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

Kotlin

// 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 و GeoJsonFeatures

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

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

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

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

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

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

Kotlin

val pointStyle = layer.getDefaultPointStyle()
pointStyle.setDraggable(true)
pointStyle.setTitle("Hello, World!")
pointStyle.setSnippet("I am a draggable marker")
val lineStyle = layer.getDefaultLineStringStyle()
val polygonStyle = layer.getDefaultPolygonStyle()

      

جاوا

GeoJsonPointStyle pointStyle = layer.getDefaultPointStyle();
pointStyle.setDraggable(true);
pointStyle.setTitle("Hello, World!");
pointStyle.setSnippet("I am a draggable marker");
GeoJsonLineStringStyle lineStyle = layer.getDefaultLineStringStyle();
com.google.maps.android.data.geojson.GeoJsonPolygonStyle polygonStyle = layer.getDefaultPolygonStyle();

      

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

همچنین می‌توانید عارضه‌های تکی را در لایه سبک‌بندی کنید. مراحل اعمال سبک روی GeoJsonFeature به‌صورت زیر است.

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

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

Kotlin

// 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 از نشانی وب و ایجاد لایه با آن، به GeoJsonDemoActivity در برنامه نمایشی که همراه با کتابخانه ابزار ارائه می‌شود نگاهی بیندازید. راهنمای راه‌اندازی نحوه اجرای برنامه نمایشی را به شما نشان می‌دهد.