- مقدمه
- افزودن GeoJsonLayer به نقشه
- برداشتن GeoJsonLayer
- افزودن و برداشتن GeoJsonFeature
- دسترسی به GeoJsonFeatures و ویژگیهای آنها
- سبکبندی GeoJsonLayer و GeoJsonFeatures
- دیدن برنامه نمایشی
مقدمه
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، میتوانید سبکهای پیشفرض را برای هر نقطه، خط، و چندضلعی که به لایه اضافه میشود تنظیم کنید. سبکهای پیشفرض فقط زمانی اعمال میشوند که ویژگی برای هیچکدام از هندسههایش سبک تنظیمشدهای نداشته باشد. هر تغییری که در سبک پیشفرض ایجاد کنید در همه ویژگیهایی که از سبک پیشفرض استفاده میکنند نیز منعکس خواهد شد.
مراحل اعمال سبک پیشفرض به شرح زیر است
- شیء سبک پیشفرض مربوطه را بازیابی کنید، این شیء میتواند یکی از
GeoJsonPointStyle،GeoJsonLineStringStyle، یاGeoJsonPolygonStyleباشد. - گزینههای موردنظرتان را روی سبک اعمال کنید.
برای مثال، نمونه کد زیر نشان میدهد که چگونه سبک نقطه پیشفرض را تغییر دهید تا نقاط با عنوان و قطعه قابلکشیدن شوند.
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 بهصورت زیر است.
- شیء سبک مربوطه را ایجاد کنید، این میتواند
GeoJsonPointStyle،GeoJsonLineStringStyleیاGeoJsonPolygonStyleباشد. - گزینههای موردنظرتان را روی سبک اعمال کنید.
- شیء سبک را به
روش مربوطه در
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 در برنامه نمایشی که همراه با کتابخانه ابزار ارائه میشود نگاهی بیندازید. راهنمای راهاندازی نحوه اجرای برنامه نمایشی را به شما نشان میدهد.