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