diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 04dd7cd7d0..f5fb28b24b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -33,6 +33,7 @@ repos: "!CONTRIBUTING.md", "!LICENSE.md", "!src/frontend/pnpm-lock.yaml", + "!src/backend/tests/test_data/**", ] # # Lint: Dockerfile (disabled until binary is bundled) diff --git a/src/backend/app/central/central_crud.py b/src/backend/app/central/central_crud.py index e1f3b693e2..95de3a81dd 100644 --- a/src/backend/app/central/central_crud.py +++ b/src/backend/app/central/central_crud.py @@ -18,11 +18,11 @@ """Logic for interaction with ODK Central & data.""" import os +from io import BytesIO +from pathlib import Path from typing import Optional from xml.etree import ElementTree -# import osm_fieldwork -# Qr code imports from fastapi import HTTPException from fastapi.responses import JSONResponse from loguru import logger as log @@ -210,11 +210,11 @@ def upload_xform_media( def create_odk_xform( project_id: int, - xform_id: str, + xform_name: str, filespec: str, + feature_geojson: BytesIO, odk_credentials: Optional[project_schemas.ODKCentralDecrypted] = None, create_draft: bool = False, - upload_media=True, convert_to_draft_when_publishing=True, ): """Create an XForm on a remote ODK Central server.""" @@ -236,16 +236,26 @@ def create_odk_xform( status_code=500, detail={"message": "Connection failed to odk central"} ) from e - result = xform.createForm(project_id, xform_id, filespec, create_draft) + result = xform.createForm(project_id, xform_name, filespec, create_draft) if result != 200 and result != 409: return result - data = f"/tmp/{title}.geojson" + + # TODO refactor osm_fieldwork.OdkCentral.OdkForm.uploadMedia + # to accept passing a bytesio object and update + geojson_file = Path(f"/tmp/{title}.geojson") + with open(geojson_file, "w") as f: + f.write(feature_geojson.getvalue().decode("utf-8")) # This modifies an existing published XForm to be in draft mode. # An XForm must be in draft mode to upload an attachment. - if upload_media: - xform.uploadMedia(project_id, title, data, convert_to_draft_when_publishing) + # Upload the geojson of features to be modified + xform.uploadMedia( + project_id, title, str(geojson_file), convert_to_draft_when_publishing + ) + + # Delete temp geojson file + geojson_file.unlink(missing_ok=True) result = xform.publishForm(project_id, title) return result diff --git a/src/backend/app/db/db_models.py b/src/backend/app/db/db_models.py index ba20b9b8eb..9f45c264ab 100644 --- a/src/backend/app/db/db_models.py +++ b/src/backend/app/db/db_models.py @@ -40,7 +40,7 @@ desc, ) from sqlalchemy.dialects.postgresql import ARRAY as PostgreSQLArray # noqa: N811 -from sqlalchemy.dialects.postgresql import JSONB, TSVECTOR +from sqlalchemy.dialects.postgresql import TSVECTOR from sqlalchemy.orm import ( # declarative_base, backref, @@ -691,32 +691,6 @@ class DbLicense(Base): ) # Many to Many relationship -class DbFeatures(Base): - """Features extracted from osm data.""" - - __tablename__ = "features" - - id = cast(int, Column(Integer, primary_key=True)) - project_id = cast(int, Column(Integer, ForeignKey("projects.id"))) - project = cast(DbProject, relationship(DbProject, backref="features")) - - category_title = cast( - str, Column(String, ForeignKey("xlsforms.title", name="fk_xform")) - ) - category = cast(DbXForm, relationship(DbXForm)) - task_id = cast(int, Column(Integer, nullable=True)) - properties = cast(dict, Column(JSONB)) - geometry = cast(WKBElement, Column(Geometry(geometry_type="GEOMETRY", srid=4326))) - - __table_args__ = ( - ForeignKeyConstraint( - [task_id, project_id], ["tasks.id", "tasks.project_id"], name="fk_tasks" - ), - Index("idx_features_composite", "task_id", "project_id"), - {}, - ) - - class BackgroundTasks(Base): """Table managing long running background tasks.""" diff --git a/src/backend/app/db/postgis_utils.py b/src/backend/app/db/postgis_utils.py index dbd9322ddd..a9084c7c30 100644 --- a/src/backend/app/db/postgis_utils.py +++ b/src/backend/app/db/postgis_utils.py @@ -116,6 +116,9 @@ async def geojson_to_flatgeobuf( ) -> Optional[bytes]: """From a given FeatureCollection, return a memory flatgeobuf obj. + NOTE this generate an fgb with string timestamps, not datetime. + NOTE ogr2ogr would generate datetime, but parsing does not seem to work. + Args: db (Session): SQLAlchemy db session. geojson (geojson.FeatureCollection): a FeatureCollection object. @@ -123,67 +126,41 @@ async def geojson_to_flatgeobuf( Returns: flatgeobuf (bytes): a Python bytes representation of a flatgeobuf file. """ - # FIXME make this with with properties / tags - # FIXME this is important - # FIXME but difficult to guarantee users upload geojson - # FIXME With required properties included - # sql = """ - # DROP TABLE IF EXISTS public.temp_features CASCADE; - - # CREATE TABLE IF NOT EXISTS public.temp_features( - # geom geometry, - # osm_id integer, - # changeset integer, - # timestamp timestamp - # ); - - # WITH data AS (SELECT CAST(:geojson AS json) AS fc) - # INSERT INTO public.temp_features (geom, osm_id, changeset, timestamp) - # SELECT - # ST_SetSRID(ST_GeomFromGeoJSON(feat->>'geometry'), 4326) AS geom, - # COALESCE((feat->'properties'->>'osm_id')::integer, -1) AS osm_id, - # COALESCE((feat->'properties'->>'changeset')::integer, -1) AS changeset, - # CASE - # WHEN feat->'properties'->>'timestamp' IS NOT NULL - # THEN (feat->'properties'->>'timestamp')::timestamp - # ELSE NULL - # END AS timestamp - # FROM ( - # SELECT json_array_elements(fc->'features') AS feat - # FROM data - # ) AS f; - - # -- Second param = generate with spatial index - # SELECT ST_AsFlatGeobuf(geoms, true) - # FROM (SELECT * FROM public.temp_features) AS geoms; - # """ sql = """ - DROP TABLE IF EXISTS public.temp_features CASCADE; - - CREATE TABLE IF NOT EXISTS public.temp_features( - geom geometry + DROP TABLE IF EXISTS temp_features CASCADE; + + -- Wrap geometries in GeometryCollection + CREATE TEMP TABLE IF NOT EXISTS temp_features( + geom geometry(GeometryCollection, 4326), + osm_id integer, + tags text, + version integer, + changeset integer, + timestamp text ); WITH data AS (SELECT CAST(:geojson AS json) AS fc) - INSERT INTO public.temp_features (geom) + INSERT INTO temp_features + (geom, osm_id, tags, version, changeset, timestamp) SELECT - ST_SetSRID(ST_GeomFromGeoJSON(feat->>'geometry'), 4326) AS geom - FROM ( - SELECT json_array_elements(fc->'features') AS feat - FROM data - ) AS f; - - SELECT ST_AsFlatGeobuf(fgb_data, true) - FROM (SELECT * FROM public.temp_features as geoms) AS fgb_data; + ST_ForceCollection(ST_GeomFromGeoJSON(feat->>'geometry')) AS geom, + (feat->'properties'->>'osm_id')::integer as osm_id, + (feat->'properties'->>'tags')::text as tags, + (feat->'properties'->>'version')::integer as version, + (feat->'properties'->>'changeset')::integer as changeset, + (feat->'properties'->>'timestamp')::text as timestamp + FROM json_array_elements((SELECT fc->'features' FROM data)) AS f(feat); + + -- Second param = generate with spatial index + SELECT ST_AsFlatGeobuf(geoms, true) + FROM (SELECT * FROM temp_features) AS geoms; """ + # Run the SQL result = db.execute(text(sql), {"geojson": json.dumps(geojson)}) # Get a memoryview object, then extract to Bytes flatgeobuf = result.first() - # Cleanup table - # db.execute(text("DROP TABLE IF EXISTS public.temp_features CASCADE;")) - if flatgeobuf: return flatgeobuf[0].tobytes() @@ -196,6 +173,8 @@ async def flatgeobuf_to_geojson( ) -> Optional[geojson.FeatureCollection]: """Converts FlatGeobuf data to GeoJSON. + Extracts single geometries from wrapped GeometryCollection if used. + Args: db (Session): SQLAlchemy db session. flatgeobuf (bytes): FlatGeobuf data in bytes format. @@ -203,7 +182,6 @@ async def flatgeobuf_to_geojson( Returns: geojson.FeatureCollection: A FeatureCollection object. """ - # FIXME can we use SELECT * to extract all fields into geojson properties? sql = text( """ DROP TABLE IF EXISTS public.temp_fgb CASCADE; @@ -217,24 +195,23 @@ async def flatgeobuf_to_geojson( FROM ( SELECT jsonb_build_object( 'type', 'Feature', - 'geometry', ST_AsGeoJSON(fgb_data.geom)::jsonb, + 'geometry', ST_AsGeoJSON(ST_GeometryN(fgb_data.geom, 1))::jsonb, 'properties', jsonb_build_object( 'osm_id', fgb_data.osm_id, 'tags', fgb_data.tags, 'version', fgb_data.version, 'changeset', fgb_data.changeset, 'timestamp', fgb_data.timestamp - )::jsonb ) AS feature FROM ( SELECT geom, - NULL as osm_id, - NULL as tags, - NULL as version, - NULL as changeset, - NULL as timestamp + osm_id, + tags, + version, + changeset, + timestamp FROM ST_FromFlatGeobuf(null::temp_fgb, :fgb_bytes) ) AS fgb_data ) AS features; @@ -247,7 +224,8 @@ async def flatgeobuf_to_geojson( except ProgrammingError as e: log.error(e) log.error( - "Attempted flatgeobuf --> geojson conversion, but duplicate column found" + "Attempted flatgeobuf --> geojson conversion failed. " + "Perhaps there is a duplicate 'id' column?" ) return None @@ -257,6 +235,105 @@ async def flatgeobuf_to_geojson( return None +async def split_geojson_by_task_areas( + db: Session, + featcol: geojson.FeatureCollection, + project_id: int, +) -> Optional[dict[int, geojson.FeatureCollection]]: + """Split GeoJSON into tagged task area GeoJSONs. + + Args: + db (Session): SQLAlchemy db session. + featcol (bytes): Data extract feature collection. + project_id (int): The project ID for associated tasks. + + Returns: + dict[int, geojson.FeatureCollection]: {task_id: FeatureCollection} mapping. + """ + sql = text( + """ + -- Drop table if already exists + DROP TABLE IF EXISTS temp_features CASCADE; + + -- Create a temporary table to store the parsed GeoJSON features + CREATE TEMP TABLE temp_features ( + id SERIAL PRIMARY KEY, + geometry GEOMETRY, + properties JSONB + ); + + -- Insert parsed geometries and properties into the temporary table + INSERT INTO temp_features (geometry, properties) + SELECT + ST_SetSRID(ST_GeomFromGeoJSON(feature->>'geometry'), 4326) AS geometry, + jsonb_set( + jsonb_set(feature->'properties', '{task_id}', to_jsonb(tasks.id), true), + '{project_id}', to_jsonb(tasks.project_id), true + ) AS properties + FROM ( + SELECT jsonb_array_elements(CAST(:geojson_featcol AS jsonb)->'features') + AS feature + ) AS features + CROSS JOIN tasks + WHERE tasks.project_id = :project_id; + + -- Retrieve task outlines based on the provided project_id + WITH task_outlines AS ( + SELECT id, outline + FROM tasks + WHERE project_id = :project_id + ) + SELECT + task_outlines.id AS task_id, + jsonb_build_object( + 'type', 'FeatureCollection', + 'features', jsonb_agg(features.feature) + ) AS task_features + FROM + task_outlines + LEFT JOIN LATERAL ( + -- Construct a feature collection with geometries per task area + SELECT + jsonb_build_object( + 'type', 'Feature', + 'geometry', ST_AsGeoJSON(temp_features.geometry)::jsonb, + 'properties', temp_features.properties + ) AS feature + FROM + temp_features + WHERE + ST_Within(temp_features.geometry, task_outlines.outline) + ) AS features ON true + GROUP BY + task_outlines.id; + """ + ) + + try: + result = db.execute( + sql, + { + "geojson_featcol": json.dumps(featcol), + "project_id": project_id, + }, + ) + feature_collections = result.all() + + except ProgrammingError as e: + log.error(e) + log.error("Attempted geojson task splitting failed") + return None + + if feature_collections: + task_geojson_dict = { + record[0]: geojson.loads(json.dumps(record[1])) + for record in feature_collections + } + return task_geojson_dict + + return None + + def parse_and_filter_geojson( geojson_str: str, filter: bool = True ) -> Optional[geojson.FeatureCollection]: diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index 043adbcbf7..45d43d7e09 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -35,7 +35,7 @@ from fastapi import File, HTTPException, Response, UploadFile from fastapi.concurrency import run_in_threadpool from fmtm_splitter.splitter import split_by_sql, split_by_square -from geoalchemy2.shape import from_shape, to_shape +from geoalchemy2.shape import to_shape from geojson.feature import Feature, FeatureCollection from loguru import logger as log from osm_fieldwork.basemapper import create_basemap_file @@ -64,6 +64,7 @@ get_address_from_lat_lon_async, get_featcol_main_geom_type, parse_and_filter_geojson, + split_geojson_by_task_areas, ) from app.models.enums import HTTPStatus, ProjectRole from app.projects import project_schemas @@ -483,6 +484,7 @@ async def generate_data_extract( "outputType": "fgb", "bind_zip": False, "useStWithin": False, + "fgb_wrap_geoms": True, }, ) @@ -938,17 +940,19 @@ async def update_data_extract_url_in_db( db.commit() -async def upload_custom_data_extract( +async def upload_custom_extract_to_s3( db: Session, project_id: int, - geojson_str: str, + fgb_content: bytes, + data_extract_type: str, ) -> str: """Uploads custom data extracts to S3. Args: db (Session): SQLAlchemy database session. project_id (int): The ID of the project. - geojson_str (str): The custom data extracts contents. + fgb_content (bytes): Content of read flatgeobuf file. + data_extract_type (str): centroid/polygon/line for database. Returns: str: URL to fgb file in S3. @@ -959,16 +963,62 @@ async def upload_custom_data_extract( if not project: raise HTTPException(status_code=404, detail="Project not found") - featcol_filtered = parse_and_filter_geojson(geojson_str) - if not featcol_filtered: - raise HTTPException( - status_code=HTTPStatus.UNPROCESSABLE_ENTITY, - detail="Could not process geojson input", - ) - await check_crs(featcol_filtered) + fgb_obj = BytesIO(fgb_content) + s3_fgb_path = f"/{project.organisation_id}/{project_id}/custom_extract.fgb" + + log.debug(f"Uploading fgb to S3 path: {s3_fgb_path}") + add_obj_to_bucket( + settings.S3_BUCKET_NAME, + fgb_obj, + s3_fgb_path, + content_type="application/octet-stream", + ) + + # Add url and type to database + s3_fgb_full_url = ( + f"{settings.S3_DOWNLOAD_ROOT}/{settings.S3_BUCKET_NAME}{s3_fgb_path}" + ) - # Get geom type from data extract - geom_type = get_featcol_main_geom_type(featcol_filtered) + await update_data_extract_url_in_db(db, project, s3_fgb_full_url, data_extract_type) + + return s3_fgb_full_url + + +async def upload_custom_fgb_extract( + db: Session, + project_id: int, + fgb_content: bytes, +) -> str: + """Upload a flatgeobuf data extract. + + Args: + db (Session): SQLAlchemy database session. + project_id (int): The ID of the project. + fgb_content (bytes): Content of read flatgeobuf file. + + Returns: + str: URL to fgb file in S3. + """ + featcol = await flatgeobuf_to_geojson(db, fgb_content) + + if not featcol: + msg = f"Failed extracting geojson from flatgeobuf for project ({project_id})" + log.error(msg) + raise HTTPException(status_code=HTTPStatus.UNPROCESSABLE_ENTITY, detail=msg) + + data_extract_type = await get_data_extract_type(featcol) + + return await upload_custom_extract_to_s3( + db, + project_id, + fgb_content, + data_extract_type, + ) + + +async def get_data_extract_type(featcol: FeatureCollection) -> str: + """Determine predominant geometry type for extract.""" + geom_type = get_featcol_main_geom_type(featcol) if geom_type not in ["Polygon", "Polyline", "Point"]: msg = ( "Extract does not contain valid geometry types, from 'Polygon' " @@ -983,30 +1033,56 @@ async def upload_custom_data_extract( } data_extract_type = geom_name_map.get(geom_type, "polygon") + return data_extract_type + + +async def upload_custom_geojson_extract( + db: Session, + project_id: int, + geojson_str: str, +) -> str: + """Upload a geojson data extract. + + Args: + db (Session): SQLAlchemy database session. + project_id (int): The ID of the project. + geojson_str (str): The custom data extracts contents. + + Returns: + str: URL to fgb file in S3. + """ + project = await get_project(db, project_id) + log.debug(f"Uploading custom data extract for project: {project}") + + if not project: + raise HTTPException(status_code=404, detail="Project not found") + + featcol_filtered = parse_and_filter_geojson(geojson_str) + if not featcol_filtered: + raise HTTPException( + status_code=HTTPStatus.UNPROCESSABLE_ENTITY, + detail="Could not process geojson input", + ) + + await check_crs(featcol_filtered) + + data_extract_type = await get_data_extract_type(featcol_filtered) + log.debug( "Generating fgb object from geojson with " f"{len(featcol_filtered.get('features', []))} features" ) - fgb_obj = BytesIO(await geojson_to_flatgeobuf(db, featcol_filtered)) - s3_fgb_path = f"/{project.organisation_id}/{project_id}/custom_extract.fgb" + fgb_data = await geojson_to_flatgeobuf(db, featcol_filtered) - log.debug(f"Uploading fgb to S3 path: {s3_fgb_path}") - add_obj_to_bucket( - settings.S3_BUCKET_NAME, - fgb_obj, - s3_fgb_path, - content_type="application/octet-stream", - ) + if not fgb_data: + msg = f"Failed converting geojson to flatgeobuf for project ({project_id})" + log.error(msg) + raise HTTPException(status_code=HTTPStatus.UNPROCESSABLE_ENTITY, detail=msg) - # Add url and type to database - s3_fgb_full_url = ( - f"{settings.S3_DOWNLOAD_ROOT}/{settings.S3_BUCKET_NAME}{s3_fgb_path}" + return await upload_custom_extract_to_s3( + db, project_id, fgb_data, data_extract_type ) - await update_data_extract_url_in_db(db, project, s3_fgb_full_url, data_extract_type) - - return s3_fgb_full_url - def flatten_dict(d, parent_key="", sep="_"): """Recursively flattens a nested dictionary into a single-level dictionary. @@ -1034,6 +1110,7 @@ def generate_task_files( db: Session, project_id: int, task_id: int, + data_extract: FeatureCollection, xlsform: str, form_type: str, odk_credentials: project_schemas.ODKCentralDecrypted, @@ -1081,71 +1158,31 @@ def generate_task_files( # This file will store xml contents of an xls form. xform = f"/tmp/{appuser_name}.xml" - extracts = f"/tmp/{appuser_name}.geojson" # This file will store osm extracts # xform_id_format xform_id = f"{appuser_name}".split("_")[2] - # Get the features for this task. - # Postgis query to filter task inside this task outline and of this project - # Update those features and set task_id - query = text( - f"""UPDATE features - SET task_id={task_id} - WHERE id IN ( - SELECT id - FROM features - WHERE project_id={project_id} - AND ST_IsValid(geometry) - AND ST_IsValid('{task.outline}'::Geometry) - AND ST_Contains('{task.outline}'::Geometry, ST_Centroid(geometry)) - )""" - ) - - result = db.execute(query) - - # Get the geojson of those features for this task. - query = text( - f"""SELECT jsonb_build_object( - 'type', 'FeatureCollection', - 'features', jsonb_agg(feature) - ) - FROM ( - SELECT jsonb_build_object( - 'type', 'Feature', - 'id', id, - 'geometry', ST_AsGeoJSON(geometry)::jsonb, - 'properties', properties - ) AS feature - FROM features - WHERE project_id={project_id} and task_id={task_id} - ) features;""" - ) - - result = db.execute(query) - - features = result.fetchone()[0] - - upload_media = False if features["features"] is None else True - - # Update outfile containing osm extracts with the new geojson contents - # containing title in the properties. - with open(extracts, "w") as jsonfile: - jsonfile.truncate(0) # clear the contents of the file - geojson.dump(features, jsonfile) + # Create memory object from split data extract + geojson_string = geojson.dumps(data_extract) + geojson_bytes = geojson_string.encode("utf-8") + geojson_bytesio = BytesIO(geojson_bytes) project_log.info( - f"Generating xform for task: {task_id} " + f"Generating xform for task: {task_id} | " f"using xform: {xform} | form_type: {form_type}" ) - outfile = central_crud.generate_updated_xform(xlsform, xform, form_type) + xform_path = central_crud.generate_updated_xform(xlsform, xform, form_type) # Create an odk xform - project_log.info(f"Uploading media in {task_id}") - result = central_crud.create_odk_xform( - odk_id, task_id, outfile, odk_credentials, False, upload_media + project_log.info(f"Uploading data extract media to task ({task_id})") + central_crud.create_odk_xform( + odk_id, + str(task_id), + xform_path, + geojson_bytesio, + odk_credentials, + False, ) - # result = central_crud.create_odk_xform(odk_id, task_id, outfile, odk_credentials) project_log.info(f"Updating role for app user in task {task_id}") # Update the user role for the created xform. @@ -1164,7 +1201,7 @@ def generate_task_files( # NOTE defined as non-async to run in separate thread -def generate_appuser_files( +def generate_project_files( db: Session, project_id: int, custom_form: Optional[BytesIO], @@ -1187,7 +1224,7 @@ def generate_appuser_files( try: project_log = log.bind(task="create_project", project_id=project_id) - project_log.info(f"Starting generate_appuser_files for project {project_id}") + project_log.info(f"Starting generate_project_files for project {project_id}") get_project_sync = async_to_sync(get_project) project = get_project_sync(db, project_id) @@ -1232,39 +1269,26 @@ def generate_appuser_files( # else updated_data_extract # ) - # FIXME do we need these geoms in the db? - # FIXME can we remove this section? - log.debug("Adding data extract geometries to database") - get_extract_geojson_sync = async_to_sync(get_project_features_geojson) - data_extract_geojson = get_extract_geojson_sync(db, project_id) - # Collect feature mappings for bulk insert - feature_mappings = [] - for feature in data_extract_geojson["features"]: - # If the osm extracts contents do not have a title, - # provide an empty text for that. - properties = feature.get("properties", {}) - properties["title"] = "" - - feature_shape = shape(feature["geometry"]) - - wkb_element = from_shape(feature_shape, srid=4326) - feature_mapping = { - "project_id": project_id, - "category_title": form_category, - "geometry": wkb_element, - "properties": properties, - } - feature_mappings.append(feature_mapping) - # Bulk insert the osm extracts into the db. - db.bulk_insert_mappings(db_models.DbFeatures, feature_mappings) - # Generating QR Code, XForm and uploading OSM Extracts to the form. # Creating app users and updating the role of that user. - get_task_id_list_sync = async_to_sync(tasks_crud.get_task_id_list) - task_list = get_task_id_list_sync(db, project_id) + + # Extract data extract from flatgeobuf + feat_project_features_sync = async_to_sync(get_project_features_geojson) + feature_collection = feat_project_features_sync(db, project) + + # Split extract by task area + split_geojson_sync = async_to_sync(split_geojson_by_task_areas) + split_extract_dict = split_geojson_sync(db, feature_collection, project_id) + + if not split_extract_dict: + log.warning("Project ({project_id}) failed splitting tasks") + raise HTTPException( + status_code=HTTPStatus.UNPROCESSABLE_ENTITY, + detail="Failed splitting extract by tasks.", + ) # Run with expensive task via threadpool - def wrap_generate_task_files(task): + def wrap_generate_task_files(task_id): """Func to wrap and return errors from thread. Also passes it's own database session for thread safety. @@ -1275,7 +1299,8 @@ def wrap_generate_task_files(task): generate_task_files( next(get_db()), project_id, - task, + task_id, + split_extract_dict[task_id], xlsform, form_format, odk_credentials, @@ -1287,7 +1312,8 @@ def wrap_generate_task_files(task): with ThreadPoolExecutor() as executor: # Submit tasks to the thread pool futures = [ - executor.submit(wrap_generate_task_files, task) for task in task_list + executor.submit(wrap_generate_task_files, task_id) + for task_id in split_extract_dict.keys() ] # Wait for all tasks to complete wait(futures) @@ -1562,64 +1588,6 @@ async def convert_summary(project): return [] -async def convert_to_project_feature(db_project_feature: db_models.DbFeatures): - """Legacy function to convert db models --> Pydantic. - - TODO refactor to use Pydantic model methods instead. - """ - if db_project_feature: - app_project_feature: project_schemas.GeojsonFeature = db_project_feature - - if db_project_feature.geometry: - app_project_feature.geometry = geometry_to_geojson( - db_project_feature.geometry, - db_project_feature.properties, - db_project_feature.id, - ) - - return app_project_feature - else: - return None - - -async def convert_to_project_features( - db_project_features: List[db_models.DbFeatures], -) -> List[project_schemas.GeojsonFeature]: - """Legacy function to convert db models --> Pydantic. - - TODO refactor to use Pydantic model methods instead. - """ - if db_project_features and len(db_project_features) > 0: - - async def convert_feature(project_feature): - return await convert_to_project_feature(project_feature) - - app_project_features = await gather( - *[convert_feature(feature) for feature in db_project_features] - ) - return [feature for feature in app_project_features if feature is not None] - else: - return [] - - -async def get_project_features(db: Session, project_id: int, task_id: int = None): - """Get features from database for a project.""" - if task_id: - features = ( - db.query(db_models.DbFeatures) - .filter(db_models.DbFeatures.project_id == project_id) - .filter(db_models.DbFeatures.task_id == task_id) - .all() - ) - else: - features = ( - db.query(db_models.DbFeatures) - .filter(db_models.DbFeatures.project_id == project_id) - .all() - ) - return await convert_to_project_features(features) - - async def get_background_task_status(task_id: uuid.UUID, db: Session): """Get the status of a background task.""" task = ( @@ -1710,12 +1678,7 @@ async def update_project_form( else: xlsform = f"{xlsforms_path}/{category}.xls" - db.query(db_models.DbFeatures).filter( - db_models.DbFeatures.project_id == project_id - ).delete() - db.commit() - - # OSM Extracts for whole project + # TODO fix this to use correct data extract generation pg = PostgresClient("underpass") outfile = ( f"/tmp/{project_title}_{category}.geojson" # This file will store osm extracts @@ -1737,112 +1700,34 @@ async def update_project_form( final_outline = json.loads(project_outline.outline) - outline_geojson = pg.getFeatures( + feature_geojson = pg.getFeatures( boundary=final_outline, filespec=outfile, polygon=extract_polygon, xlsfile=f"{category}.xls", category=category, ) - - updated_outline_geojson = {"type": "FeatureCollection", "features": []} - - # Collect feature mappings for bulk insert - feature_mappings = [] - - for feature in outline_geojson["features"]: - # If the osm extracts contents do not have a title, - # provide an empty text for that. - feature["properties"]["title"] = "" - - feature_shape = shape(feature["geometry"]) - - # # If the centroid of the Polygon is not inside the outline, - # skip the feature. - # if extract_polygon and ( - # not shape(outline_geojson).contains( - # shape(feature_shape.centroid - # )) - # ): - # continue - - wkb_element = from_shape(feature_shape, srid=4326) - feature_mapping = { - "project_id": project_id, - "category_title": category, - "geometry": wkb_element, - "properties": feature["properties"], - } - updated_outline_geojson["features"].append(feature) - feature_mappings.append(feature_mapping) - - # Insert features into db - db_feature = db_models.DbFeatures( - project_id=project_id, - category_title=category, - geometry=wkb_element, - properties=feature["properties"], - ) - db.add(db_feature) - db.commit() + # TODO upload data extract to S3 bucket tasks_list = await tasks_crud.get_task_id_list(db, project_id) for task in tasks_list: - task_obj = await tasks_crud.get_task(db, task) - - # Get the features for this task. - # Postgis query to filter task inside this task outline and of this project - # Update those features and set task_id - query = text( - f"""UPDATE features - SET task_id={task} - WHERE id in ( - SELECT id - FROM features - WHERE project_id={project_id} and - ST_Intersects(geometry, '{task_obj.outline}'::Geometry) - )""" - ) - - result = db.execute(query) - - # Get the geojson of those features for this task. - query = text( - f"""SELECT jsonb_build_object( - 'type', 'FeatureCollection', - 'features', jsonb_agg(feature) - ) - FROM ( - SELECT jsonb_build_object( - 'type', 'Feature', - 'id', id, - 'geometry', ST_AsGeoJSON(geometry)::jsonb, - 'properties', properties - ) AS feature - FROM features - WHERE project_id={project_id} and task_id={task} - ) features;""" - ) - - result = db.execute(query) - features = result.fetchone()[0] # This file will store xml contents of an xls form. xform = f"/tmp/{project_title}_{category}_{task}.xml" - # This file will store osm extracts extracts = f"/tmp/{project_title}_{category}_{task}.geojson" # Update outfile containing osm extracts with the new geojson contents # containing title in the properties. with open(extracts, "w") as jsonfile: jsonfile.truncate(0) # clear the contents of the file - geojson.dump(features, jsonfile) + geojson.dump(feature_geojson, jsonfile) outfile = central_crud.generate_updated_xform(xlsform, xform, form_type) # Create an odk xform + # TODO include data extract geojson correctly result = central_crud.create_odk_xform( - odk_id, task, xform, odk_credentials, True, True, False + odk_id, str(task), xform, feature_geojson, odk_credentials, True, False ) return True diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index 69e4808ce2..fffae2d850 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -76,53 +76,54 @@ async def read_projects( return projects -@router.get("/details/{project_id}/") -async def get_projet_details( - project_id: int, - db: Session = Depends(database.get_db), - current_user: AuthUser = Depends(mapper), -): - """Returns the project details. - - Also includes ODK project details, so takes extra time to return. - - Parameters: - project_id: int - - Returns: - Response: Project details. - """ - project = await project_crud.get_project(db, project_id) - if not project: - raise HTTPException(status_code=404, detail={"Project not found"}) - - # ODK Credentials - odk_credentials = project_schemas.ODKCentralDecrypted( - odk_central_url=project.odk_central_url, - odk_central_user=project.odk_central_user, - odk_central_password=project.odk_central_password, - ) - - odk_details = central_crud.get_odk_project_full_details( - project.odkid, odk_credentials - ) - - # Features count - query = text( - "select count(*) from features where " - f"project_id={project_id} and task_id is not null" - ) - result = db.execute(query) - features = result.fetchone()[0] - - return { - "id": project_id, - "odkName": odk_details["name"], - "createdAt": odk_details["createdAt"], - "tasks": odk_details["forms"], - "lastSubmission": odk_details["lastSubmission"], - "total_features": features, - } +# TODO delete me +# @router.get("/details/{project_id}/") +# async def get_projet_details( +# project_id: int, +# db: Session = Depends(database.get_db), +# current_user: AuthUser = Depends(mapper), +# ): +# """Returns the project details. + +# Also includes ODK project details, so takes extra time to return. + +# Parameters: +# project_id: int + +# Returns: +# Response: Project details. +# """ +# project = await project_crud.get_project(db, project_id) +# if not project: +# raise HTTPException(status_code=404, detail={"Project not found"}) + +# # ODK Credentials +# odk_credentials = project_schemas.ODKCentralDecrypted( +# odk_central_url=project.odk_central_url, +# odk_central_user=project.odk_central_user, +# odk_central_password=project.odk_central_password, +# ) + +# odk_details = central_crud.get_odk_project_full_details( +# project.odkid, odk_credentials +# ) + +# # Features count +# query = text( +# "select count(*) from features where " +# f"project_id={project_id} and task_id is not null" +# ) +# result = db.execute(query) +# features = result.fetchone()[0] + +# return { +# "id": project_id, +# "odkName": odk_details["name"], +# "createdAt": odk_details["createdAt"], +# "tasks": odk_details["forms"], +# "lastSubmission": odk_details["lastSubmission"], +# "total_features": features, +# } @router.post("/near_me", response_model=list[project_schemas.ProjectSummary]) @@ -645,7 +646,7 @@ async def generate_files( log.debug(f"Submitting {background_task_id} to background tasks stack") background_tasks.add_task( - project_crud.generate_appuser_files, + project_crud.generate_project_files, db, project_id, BytesIO(custom_xls_form) if custom_xls_form else None, @@ -685,30 +686,6 @@ async def update_project_form( return form_updated -@router.get( - "/{project_id}/features", response_model=list[project_schemas.GeojsonFeature] -) -async def get_project_features( - project_id: int, - task_id: int = None, - db: Session = Depends(database.get_db), -): - """Fetch all the features for a project. - - The features are generated from raw-data-api. - - Args: - project_id (int): The project id. - task_id (int): The task id. - db (Session): the DB session, provided automatically. - - Returns: - feature(json): JSON object containing a list of features - """ - features = await project_crud.get_project_features(db, project_id, task_id) - return features - - @router.get("/generate-log/") async def generate_log( project_id: int, @@ -866,7 +843,7 @@ async def upload_custom_extract( """Upload a custom data extract geojson for a project. Request Body - - 'custom_extract_file' (file): Geojson files with the features. Required. + - 'custom_extract_file' (file): File with the data extract features. Query Params: - 'project_id' (int): the project's id. Required. @@ -874,14 +851,23 @@ async def upload_custom_extract( # Validating for .geojson File. file_name = os.path.splitext(custom_extract_file.filename) file_ext = file_name[1] - allowed_extensions = [".geojson", ".json"] + allowed_extensions = [".geojson", ".json", ".fgb"] if file_ext not in allowed_extensions: - raise HTTPException(status_code=400, detail="Provide a valid .geojson file") + raise HTTPException( + status_code=400, detail="Provide a valid .geojson or .fgb file" + ) # read entire file - geojson_str = await custom_extract_file.read() + extract_data = await custom_extract_file.read() - fgb_url = await project_crud.upload_custom_data_extract(db, project_id, geojson_str) + if file_ext == ".fgb": + fgb_url = await project_crud.upload_custom_fgb_extract( + db, project_id, extract_data + ) + else: + fgb_url = await project_crud.upload_custom_geojson_extract( + db, project_id, extract_data + ) return JSONResponse(status_code=200, content={"url": fgb_url}) diff --git a/src/backend/app/projects/project_schemas.py b/src/backend/app/projects/project_schemas.py index 36b51c2766..cd8627a633 100644 --- a/src/backend/app/projects/project_schemas.py +++ b/src/backend/app/projects/project_schemas.py @@ -322,6 +322,7 @@ class ReadProject(ProjectBase): project_uuid: uuid.UUID = uuid.uuid4() location_str: Optional[str] = None + data_extract_url: str class BackgroundTaskStatus(BaseModel): diff --git a/src/backend/app/tasks/tasks_crud.py b/src/backend/app/tasks/tasks_crud.py index 6290346271..dafad64a25 100644 --- a/src/backend/app/tasks/tasks_crud.py +++ b/src/backend/app/tasks/tasks_crud.py @@ -21,23 +21,17 @@ from typing import List, Optional from fastapi import Depends, HTTPException -from geoalchemy2.shape import from_shape -from geojson import dump from loguru import logger as log -from osm_rawdata.postgres import PostgresClient -from shapely.geometry import shape from sqlalchemy.orm import Session from sqlalchemy.sql import text from app.auth.osm import AuthUser -from app.central import central_crud from app.db import database, db_models from app.models.enums import ( TaskStatus, get_action_for_status_change, verify_valid_status_update, ) -from app.projects import project_crud from app.tasks import tasks_schemas from app.users import user_crud @@ -222,100 +216,6 @@ async def create_task_history_for_status_change( # TODO: write tests for these -async def update_task_files( - db: Session, - project_id: int, - project_odk_id: int, - project_name: str, - task_id: int, - category: str, - task_boundary: str, -): - """Update associated files for a task.""" - # This file will store osm extracts - task_polygons = f"/tmp/{project_name}_{category}_{task_id}.geojson" - - # Update data extracts in the odk central - pg = PostgresClient("underpass") - - category = "buildings" - - # This file will store osm extracts - outfile = f"/tmp/test_project_{category}.geojson" - - # Delete all tasks of the project if there are some - db.query(db_models.DbFeatures).filter( - db_models.DbFeatures.task_id == task_id - ).delete() - - # OSM Extracts - outline_geojson = pg.getFeatures( - boundary=task_boundary, - filespec=outfile, - polygon=True, - xlsfile=f"{category}.xls", - category=category, - ) - - updated_outline_geojson = {"type": "FeatureCollection", "features": []} - - # Collect feature mappings for bulk insert - for feature in outline_geojson["features"]: - # If the osm extracts contents do not have a title, - # provide an empty text for that - feature["properties"]["title"] = "" - - feature_shape = shape(feature["geometry"]) - - wkb_element = from_shape(feature_shape, srid=4326) - updated_outline_geojson["features"].append(feature) - - db_feature = db_models.DbFeatures( - project_id=project_id, - geometry=wkb_element, - properties=feature["properties"], - ) - db.add(db_feature) - db.commit() - - # Update task_polygons file containing osm extracts with the new - # geojson contents containing title in the properties. - with open(task_polygons, "w") as jsonfile: - jsonfile.truncate(0) # clear the contents of the file - dump(updated_outline_geojson, jsonfile) - - # Update the osm extracts in the form. - central_crud.upload_xform_media(project_odk_id, task_id, task_polygons, None) - - return True - - -async def edit_task_boundary(db: Session, task_id: int, boundary: str): - """Update the boundary polyon on the database.""" - geometry = boundary["features"][0]["geometry"] - outline = shape(geometry) - - task = await get_task(db, task_id) - if not task: - raise HTTPException(status_code=404, detail="Task not found") - - task.outline = outline.wkt - db.commit() - - # Get category, project_name - project_id = task.project_id - project = await project_crud.get_project(db, project_id) - category = project.xform_title - project_name = project.project_name_prefix - odk_id = project.odkid - - await update_task_files( - db, project_id, odk_id, project_name, task_id, category, geometry - ) - - return True - - async def get_task_comments(db: Session, project_id: int, task_id: int): """Get a list of tasks id for a project.""" query = text( diff --git a/src/backend/app/tasks/tasks_routes.py b/src/backend/app/tasks/tasks_routes.py index ff0763015b..44f87afc6f 100644 --- a/src/backend/app/tasks/tasks_routes.py +++ b/src/backend/app/tasks/tasks_routes.py @@ -17,16 +17,15 @@ # """Routes for FMTM tasks.""" -import json from datetime import datetime, timedelta from typing import List -from fastapi import APIRouter, Depends, File, HTTPException, UploadFile +from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from sqlalchemy.sql import text from app.auth.osm import AuthUser, login_required -from app.auth.roles import get_uid, mapper, project_admin +from app.auth.roles import get_uid, mapper from app.central import central_crud from app.db import database from app.models.enums import TaskStatus @@ -136,23 +135,6 @@ async def update_task_status( return updated_task -@router.post("/edit-task-boundary") -async def edit_task_boundary( - task_id: int, - boundary: UploadFile = File(...), - db: Session = Depends(database.get_db), - current_user: AuthUser = Depends(project_admin), -): - """Update the task boundary manually.""" - # read entire file - content = await boundary.read() - boundary_json = json.loads(content) - - edit_boundary = await tasks_crud.edit_task_boundary(db, task_id, boundary_json) - - return edit_boundary - - @router.get("/tasks-features/") async def task_features_count( project_id: int, @@ -174,6 +156,7 @@ async def task_features_count( # Assemble the final data list data = [] for x in odk_details: + # TODO features table will be removed, calc from temp table feature_count_query = text( f""" select count(*) from features diff --git a/src/backend/migrations/005-remove-qrcode.sql b/src/backend/migrations/005-remove-qrcode.sql index ae50373311..46e90eb485 100644 --- a/src/backend/migrations/005-remove-qrcode.sql +++ b/src/backend/migrations/005-remove-qrcode.sql @@ -8,6 +8,8 @@ BEGIN; -- Drop qr_code table DROP TABLE IF EXISTS public.qr_code CASCADE; +DROP SEQUENCE IF EXISTS public.qr_code_id_seq; +DROP INDEX IF EXISTS ix_tasks_qr_code_id; -- Update field in tasks table ALTER TABLE IF EXISTS public.tasks diff --git a/src/backend/migrations/010-drop-features-table.sql b/src/backend/migrations/010-drop-features-table.sql new file mode 100644 index 0000000000..0cdf677e98 --- /dev/null +++ b/src/backend/migrations/010-drop-features-table.sql @@ -0,0 +1,13 @@ +-- ## Migration to: +-- * Drop features table. + +-- Start a transaction +BEGIN; + +DROP TABLE IF EXISTS public.features CASCADE; +DROP SEQUENCE IF EXISTS public.features_id_seq; +DROP INDEX IF EXISTS idx_features_composite; +DROP INDEX IF EXISTS idx_features_geometry; + +-- Commit the transaction +COMMIT; diff --git a/src/backend/migrations/init/fmtm_base_schema.sql b/src/backend/migrations/init/fmtm_base_schema.sql index 5f2904ffe2..998b0b9d7d 100644 --- a/src/backend/migrations/init/fmtm_base_schema.sql +++ b/src/backend/migrations/init/fmtm_base_schema.sql @@ -179,26 +179,6 @@ CREATE TABLE public.background_tasks ( ALTER TABLE public.background_tasks OWNER TO fmtm; -CREATE TABLE public.features ( - id integer NOT NULL, - project_id integer, - category_title character varying, - task_id integer, - properties jsonb, - geometry public.geometry(Geometry,4326) -); -ALTER TABLE public.features OWNER TO fmtm; -CREATE SEQUENCE public.features_id_seq - AS integer - START WITH 1 - INCREMENT BY 1 - NO MINVALUE - NO MAXVALUE - CACHE 1; -ALTER TABLE public.features_id_seq OWNER TO fmtm; -ALTER SEQUENCE public.features_id_seq OWNED BY public.features.id; - - CREATE TABLE public.licenses ( id integer NOT NULL, name character varying, @@ -557,7 +537,6 @@ ALTER SEQUENCE public.xlsforms_id_seq OWNED BY public.xlsforms.id; -- nextval for primary keys (autoincrement) -ALTER TABLE ONLY public.features ALTER COLUMN id SET DEFAULT nextval('public.features_id_seq'::regclass); ALTER TABLE ONLY public.licenses ALTER COLUMN id SET DEFAULT nextval('public.licenses_id_seq'::regclass); ALTER TABLE ONLY public.mapping_issue_categories ALTER COLUMN id SET DEFAULT nextval('public.mapping_issue_categories_id_seq'::regclass); ALTER TABLE ONLY public.mbtiles_path ALTER COLUMN id SET DEFAULT nextval('public.mbtiles_path_id_seq'::regclass); @@ -580,9 +559,6 @@ ALTER TABLE public."_migrations" ALTER TABLE ONLY public.background_tasks ADD CONSTRAINT background_tasks_pkey PRIMARY KEY (id); -ALTER TABLE ONLY public.features - ADD CONSTRAINT features_pkey PRIMARY KEY (id); - ALTER TABLE ONLY public.licenses ADD CONSTRAINT licenses_name_key UNIQUE (name); @@ -658,8 +634,6 @@ ALTER TABLE ONLY public.xlsforms -- Indexing -CREATE INDEX idx_features_composite ON public.features USING btree (task_id, project_id); -CREATE INDEX idx_features_geometry ON public.features USING gist (geometry); CREATE INDEX idx_geometry ON public.projects USING gist (outline); CREATE INDEX idx_projects_centroid ON public.projects USING gist (centroid); CREATE INDEX idx_projects_outline ON public.projects USING gist (outline); @@ -686,9 +660,6 @@ CREATE INDEX idx_org_managers ON public.organisation_managers USING btree (user_ -- Foreign keys -ALTER TABLE ONLY public.features - ADD CONSTRAINT features_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id); - ALTER TABLE ONLY public.task_invalidation_history ADD CONSTRAINT fk_invalidation_history FOREIGN KEY (invalidation_history_id) REFERENCES public.task_history(id); @@ -713,9 +684,6 @@ ALTER TABLE ONLY public.projects ALTER TABLE ONLY public.task_history ADD CONSTRAINT fk_tasks FOREIGN KEY (task_id, project_id) REFERENCES public.tasks(id, project_id); -ALTER TABLE ONLY public.features - ADD CONSTRAINT fk_tasks FOREIGN KEY (task_id, project_id) REFERENCES public.tasks(id, project_id); - ALTER TABLE ONLY public.task_invalidation_history ADD CONSTRAINT fk_tasks FOREIGN KEY (task_id, project_id) REFERENCES public.tasks(id, project_id); @@ -740,9 +708,6 @@ ALTER TABLE ONLY public.task_invalidation_history ALTER TABLE ONLY public.projects ADD CONSTRAINT fk_xform FOREIGN KEY (xform_title) REFERENCES public.xlsforms(title); -ALTER TABLE ONLY public.features - ADD CONSTRAINT fk_xform FOREIGN KEY (category_title) REFERENCES public.xlsforms(title); - ALTER TABLE ONLY public.organisation_managers ADD CONSTRAINT organisation_managers_organisation_id_fkey FOREIGN KEY (organisation_id) REFERENCES public.organisations(id); diff --git a/src/backend/migrations/revert/010-drop-features-table.sql b/src/backend/migrations/revert/010-drop-features-table.sql new file mode 100644 index 0000000000..5da58ca991 --- /dev/null +++ b/src/backend/migrations/revert/010-drop-features-table.sql @@ -0,0 +1,40 @@ +-- Start a transaction +BEGIN; + +-- Add qr_code table +CREATE TABLE IF NOT EXISTS public.features ( + id integer NOT NULL, + project_id integer, + category_title character varying, + task_id integer, + properties jsonb, + geometry public.geometry(Geometry,4326) +); +ALTER TABLE public.features OWNER TO fmtm; + +CREATE SEQUENCE public.features_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER TABLE public.features_id_seq OWNER TO fmtm; +ALTER SEQUENCE public.features_id_seq OWNED BY public.features.id; + +ALTER TABLE ONLY public.features ALTER COLUMN id SET DEFAULT nextval('public.features_id_seq'::regclass); +ALTER TABLE ONLY public.features + ADD CONSTRAINT features_pkey PRIMARY KEY (id); + +CREATE INDEX idx_features_composite ON public.features USING btree (task_id, project_id); +CREATE INDEX idx_features_geometry ON public.features USING gist (geometry); + +ALTER TABLE ONLY public.features + ADD CONSTRAINT features_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id); +ALTER TABLE ONLY public.features + ADD CONSTRAINT fk_tasks FOREIGN KEY (task_id, project_id) REFERENCES public.tasks(id, project_id); +ALTER TABLE ONLY public.features + ADD CONSTRAINT fk_xform FOREIGN KEY (category_title) REFERENCES public.xlsforms(title); + +-- Commit the transaction +COMMIT; diff --git a/src/backend/tests/conftest.py b/src/backend/tests/conftest.py index 1d9b4139b9..72e008e558 100644 --- a/src/backend/tests/conftest.py +++ b/src/backend/tests/conftest.py @@ -24,6 +24,7 @@ import pytest from fastapi import FastAPI from fastapi.testclient import TestClient +from geojson_pydantic import Polygon from loguru import logger as log from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker @@ -134,22 +135,18 @@ async def project(db, admin_user, organisation): odk_central_user=os.getenv("ODK_CENTRAL_USER"), odk_central_password=os.getenv("ODK_CENTRAL_PASSWD"), hashtags=["hot-fmtm"], - outline_geojson={ - "type": "Feature", - "properties": {}, - "geometry": { - "coordinates": [ - [ - [85.317028828, 27.7052522097], - [85.317028828, 27.7041424888], - [85.318844411, 27.7041424888], - [85.318844411, 27.7052522097], - [85.317028828, 27.7052522097], - ] - ], - "type": "Polygon", - }, - }, + outline_geojson=Polygon( + type="Polygon", + coordinates=[ + [ + [85.299989110, 27.7140080437], + [85.299989110, 27.7108923499], + [85.304783157, 27.7108923499], + [85.304783157, 27.7140080437], + [85.299989110, 27.7140080437], + ] + ], + ), organisation_id=organisation.id, ) diff --git a/src/backend/tests/test_data/data_extract_kathmandu.fgb b/src/backend/tests/test_data/data_extract_kathmandu.fgb new file mode 100644 index 0000000000..d7c25b0685 Binary files /dev/null and b/src/backend/tests/test_data/data_extract_kathmandu.fgb differ diff --git a/src/backend/tests/test_data/data_extract_kathmandu.geojson b/src/backend/tests/test_data/data_extract_kathmandu.geojson new file mode 100644 index 0000000000..f544481011 --- /dev/null +++ b/src/backend/tests/test_data/data_extract_kathmandu.geojson @@ -0,0 +1 @@ +{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.30172,27.7115531],[85.3018056,27.7112853]]},"properties":{"osm_id":523998387,"version":2,"tags":{"footway":"crossing","highway":"footway","crossing":"zebra"},"changeset":78561018,"timestamp":"2019-12-18T05:51:45"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3014948,27.7109124],[85.3015595,27.7109509],[85.3016452,27.7109627],[85.3017498,27.7109718],[85.3018362,27.7109781],[85.3019478,27.7109917],[85.3020803,27.7110109],[85.3022606,27.7110357]]},"properties":{"osm_id":523992684,"version":2,"tags":{"footway":"crossing","highway":"footway"},"changeset":69672853,"timestamp":"2019-04-28T19:27:06"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3022337,27.711323],[85.3025141,27.7113718]]},"properties":{"osm_id":800850655,"version":1,"tags":{"layer":"1","width":"1.5","bridge":"yes","highway":"path"},"changeset":84785146,"timestamp":"2020-05-06T21:27:01"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3013555,27.7139689],[85.3015171,27.7139154],[85.3016215,27.7138558],[85.301693,27.7137646],[85.3017395,27.713632],[85.3021262,27.7122268],[85.3022187,27.7116091],[85.3022337,27.711323],[85.3022428,27.7112658],[85.3022606,27.7110357],[85.3022495,27.7109456]]},"properties":{"osm_id":303758348,"version":11,"tags":{"width":"7","highway":"service","surface":"unpaved","smoothness":"very_bad"},"changeset":139784060,"timestamp":"2023-08-12T11:37:15"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3001275,27.712129],[85.3001784,27.7121298],[85.3001705,27.7120122]]},"properties":{"osm_id":586007140,"version":2,"tags":{"highway":"footway","surface":"paved"},"changeset":69672853,"timestamp":"2019-04-28T19:27:07"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3002377,27.7123078],[85.3003183,27.7126029]]},"properties":{"osm_id":586006390,"version":1,"tags":{"highway":"service","service":"parking_aisle","surface":"unpaved"},"changeset":58720865,"timestamp":"2018-05-06T05:05:24"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3033198,27.7137625],[85.3033738,27.7136578],[85.3034259,27.7136102],[85.3034966,27.7135435],[85.303719,27.7133512],[85.3038704,27.7132007],[85.3039284,27.7131299],[85.3040294,27.7130105],[85.3041708,27.7128746],[85.3044447,27.71279],[85.3047019,27.7126936]]},"properties":{"osm_id":753805292,"version":3,"tags":{"name":"Swayambhu Marg","highway":"residential"},"changeset":98844836,"timestamp":"2021-02-07T10:43:26"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3019156,27.7115837],[85.3019482,27.7113163]]},"properties":{"osm_id":523999368,"version":1,"tags":{"footway":"crossing","highway":"footway","crossing":"zebra"},"changeset":51963836,"timestamp":"2017-09-12T07:58:09"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3033241,27.7138751],[85.3032681,27.7138066],[85.3032515,27.7137938],[85.3031645,27.713766],[85.3026337,27.7137086],[85.3025156,27.7137052]]},"properties":{"osm_id":753805293,"version":3,"tags":{"name":"पुष्पलाल पथ ;स्वयम्भु मार्ग","width":"14","highway":"secondary","name:en":"Pushpalal Path;Swoyambhu Marg","name:ne":"पुष्पलाल पथ ;स्वयम्भु मार्ग"},"changeset":139714846,"timestamp":"2023-08-10T16:28:48"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3002377,27.7123078],[85.3001676,27.7122778]]},"properties":{"osm_id":686478503,"version":1,"tags":{"highway":"footway","surface":"paved"},"changeset":69672853,"timestamp":"2019-04-28T19:27:02"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3044155,27.7139054],[85.304189,27.7139444],[85.3040642,27.7139498],[85.3039718,27.7139981]]},"properties":{"osm_id":324951813,"version":3,"tags":{"source":"bing","highway":"residential"},"changeset":98845308,"timestamp":"2021-02-07T10:57:06"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3025156,27.7137052],[85.3018404,27.7136328]]},"properties":{"osm_id":24691221,"version":10,"tags":{"name":"बिजेश्वरी पुल","layer":"1","width":"7","bridge":"yes","highway":"secondary","name:en":"Bijeshawri Bridge","name:ne":"बिजेश्वरी पुल","sidewalk":"both"},"changeset":139714846,"timestamp":"2023-08-10T16:28:48"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3001676,27.7122778],[85.3000946,27.7122449],[85.3000946,27.7121653],[85.3001784,27.7121298],[85.3003146,27.7121431],[85.3003595,27.7121276]]},"properties":{"osm_id":586006388,"version":3,"tags":{"highway":"footway","surface":"paved"},"changeset":98655409,"timestamp":"2021-02-03T16:15:12"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3025141,27.7113718],[85.302718,27.7114006]]},"properties":{"osm_id":800851446,"version":1,"tags":{"width":"1.5","highway":"path"},"changeset":84785377,"timestamp":"2020-05-06T21:32:06"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3011931,27.7121082],[85.3020321,27.7122085],[85.3021262,27.7122268]]},"properties":{"osm_id":303758349,"version":2,"tags":{"source":"survey","highway":"path"},"changeset":69672853,"timestamp":"2019-04-28T19:27:06"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3000825,27.7121292],[85.3001275,27.712129]]},"properties":{"osm_id":586007141,"version":1,"tags":{"highway":"steps","surface":"paved"},"changeset":58720972,"timestamp":"2018-05-06T05:15:12"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3014637,27.7115099],[85.3014801,27.7114633],[85.3015006,27.7113709],[85.3015181,27.7113175]]},"properties":{"osm_id":523998379,"version":1,"tags":{"footway":"crossing","highway":"footway","crossing":"zebra"},"changeset":51963685,"timestamp":"2017-09-12T07:52:47"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3033131,27.7115439],[85.3029321,27.7114375],[85.302718,27.7114006]]},"properties":{"osm_id":756183477,"version":1,"tags":{"name":"Purano Dhalakwo Marg","highway":"residential"},"changeset":78516077,"timestamp":"2019-12-17T08:57:04"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3032681,27.7138066],[85.3033198,27.7137625]]},"properties":{"osm_id":756183478,"version":1,"tags":{"name":"Swayambhu Marg","highway":"residential"},"changeset":78516077,"timestamp":"2019-12-17T08:57:04"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3018404,27.7136328],[85.3017395,27.713632],[85.3013713,27.7136216]]},"properties":{"osm_id":1196831850,"version":1,"tags":{"ref":"F78","name":"स्वयम्भू मार्ग","width":"7","highway":"secondary","name:en":"Swayambhu Marg","name:ne":"स्वयम्भू मार्ग","surface":"asphalt","lane_markings":"no"},"changeset":139714846,"timestamp":"2023-08-10T16:28:48"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3013292,27.7136266],[85.3012993,27.7130949],[85.3012512,27.7129473],[85.301222,27.7128358],[85.3011869,27.7125476],[85.3011876,27.7124414],[85.3011931,27.7121082],[85.3011977,27.711901],[85.3012547,27.7117035],[85.3012556,27.7115635],[85.3012727,27.7114826],[85.3012971,27.7113905],[85.3013375,27.7112647],[85.3014474,27.7110695]]},"properties":{"osm_id":162248956,"version":10,"tags":{"name":"Tallo Bijeshwari Marg","source":"survey","highway":"residential","alt_name":"Tallo Bijayabari Marg"},"changeset":72719546,"timestamp":"2019-07-27T15:43:59"}},{"type":"Feature","geometry":{"type":"LineString","coordinates":[[85.3012727,27.7114826],[85.3014058,27.7115026],[85.3014637,27.7115099],[85.30172,27.7115531],[85.3019156,27.7115837],[85.3019748,27.7116008],[85.3022187,27.7116091]]},"properties":{"osm_id":523998378,"version":5,"tags":{"footway":"crossing","highway":"footway"},"changeset":78561018,"timestamp":"2019-12-18T05:51:45"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3046,27.7115669],[85.3046007,27.7115064],[85.3046757,27.711507],[85.304675,27.7115676],[85.3046,27.7115669]]]},"properties":{"osm_id":904487597,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3033396,27.7129981],[85.3033941,27.7129111],[85.3034366,27.7129319],[85.3033821,27.713019],[85.3033396,27.7129981]]]},"properties":{"osm_id":652739823,"version":2,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038133,27.7133411],[85.3038468,27.7133056],[85.303923,27.7133711],[85.3038768,27.7134243],[85.3038133,27.7133411]]]},"properties":{"osm_id":652709965,"version":4,"tags":{"fixme":"building size is different than map","source":"METEOR Kathmandu Field Survey 2019","building":"mixed_use","roof:shape":"flat","building:age":"post_2000","roof:material":"concrete","building:levels":"7","capacity:persons":"20to49","building:adjacency":"attached","building:condition":"good","building:lateral:system":"moment_resisting_frame","building:geological_site":"flat_land","building:lateral:material":"concrete_reinforced","building:levels:underground":"none"},"changeset":67673600,"timestamp":"2019-03-01T05:51:45"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3037544,27.7118406],[85.303786,27.7117218],[85.3038999,27.7117455],[85.3038684,27.7118643],[85.3037544,27.7118406]]]},"properties":{"osm_id":904487896,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038456,27.7119816],[85.3038593,27.7119178],[85.3039505,27.7119332],[85.3039368,27.7119969],[85.3038456,27.7119816]]]},"properties":{"osm_id":904487893,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3004359,27.7130753],[85.3004854,27.7130732],[85.3004894,27.7131474],[85.3004399,27.7131495],[85.3004359,27.7130753]]]},"properties":{"osm_id":903391873,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3008471,27.7125385],[85.3009227,27.7125346],[85.3009301,27.7126466],[85.3008545,27.7126505],[85.3008471,27.7125385]]]},"properties":{"osm_id":206850564,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3009869,27.7112579],[85.3010268,27.7111791],[85.3011126,27.7112131],[85.3010727,27.7112919],[85.3009869,27.7112579]]]},"properties":{"osm_id":904340052,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3017656,27.7119654],[85.3017697,27.7119315],[85.3018504,27.7119391],[85.3018463,27.711973],[85.3017656,27.7119654]]]},"properties":{"osm_id":904343869,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010886,27.7118321],[85.3010985,27.7117447],[85.3012192,27.7117555],[85.3012093,27.7118429],[85.3010886,27.7118321]]]},"properties":{"osm_id":206850503,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:23"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012592,27.712923],[85.3012603,27.7128703],[85.3013749,27.7128722],[85.3013737,27.712925],[85.3012592,27.712923]]]},"properties":{"osm_id":650689600,"version":1,"tags":{"building":"yes"},"changeset":65014251,"timestamp":"2018-11-29T15:35:04"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3008834,27.7135956],[85.3009235,27.7135758],[85.3009435,27.7136075],[85.3009034,27.7136273],[85.3008834,27.7135956]]]},"properties":{"osm_id":650689639,"version":2,"tags":{"building":"yes"},"changeset":98822994,"timestamp":"2021-02-06T17:33:55"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014227,27.7133273],[85.3015358,27.713326],[85.3015368,27.7133949],[85.3014697,27.7133956],[85.3014699,27.7134081],[85.3014238,27.7134086],[85.3014227,27.7133273]]]},"properties":{"osm_id":904486429,"version":2,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014437,27.7137348],[85.3014473,27.7136825],[85.3016157,27.7136918],[85.301612,27.7137441],[85.3014437,27.7137348]]]},"properties":{"osm_id":650689606,"version":3,"tags":{"building":"yes"},"changeset":126175361,"timestamp":"2022-09-14T10:58:12"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3015689,27.7122624],[85.3015716,27.7122376],[85.3015736,27.7122127],[85.3016277,27.7122161],[85.3016236,27.7122669],[85.3015689,27.7122624]]]},"properties":{"osm_id":517188587,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3016265,27.7125252],[85.3016541,27.7124007],[85.3017182,27.7124119],[85.3016906,27.7125363],[85.3016265,27.7125252]]]},"properties":{"osm_id":206850573,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3008926,27.7124315],[85.3008989,27.7123702],[85.3009159,27.7123716],[85.3009174,27.7123568],[85.3009663,27.7123607],[85.3009634,27.7123892],[85.3010075,27.7123927],[85.3010026,27.7124403],[85.3008926,27.7124315]]]},"properties":{"osm_id":206850499,"version":2,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3008751,27.7121107],[85.3008859,27.7121095],[85.3008798,27.7120655],[85.3009348,27.7120595],[85.3009485,27.7121576],[85.3008826,27.7121648],[85.3008751,27.7121107]]]},"properties":{"osm_id":650958380,"version":2,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3016076,27.7127383],[85.3016124,27.712677],[85.3016546,27.7126796],[85.3016526,27.7127043],[85.3016609,27.7127048],[85.301658,27.7127415],[85.3016076,27.7127383]]]},"properties":{"osm_id":904340007,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012828,27.7121143],[85.3012922,27.7120469],[85.3013422,27.7120523],[85.3013328,27.7121197],[85.3012828,27.7121143]]]},"properties":{"osm_id":904344138,"version":1,"tags":{"building":"yes"},"changeset":98800203,"timestamp":"2021-02-06T04:32:27"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3027907,27.7131641],[85.3028086,27.7131188],[85.3029048,27.7131486],[85.3028869,27.7131939],[85.3027907,27.7131641]]]},"properties":{"osm_id":906837515,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042426,27.7114363],[85.3042449,27.7113961],[85.3043415,27.7114004],[85.3043392,27.7114407],[85.3042426,27.7114363]]]},"properties":{"osm_id":904487727,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036572,27.7114164],[85.3036636,27.7113737],[85.3037008,27.711378],[85.3036944,27.7114208],[85.3036572,27.7114164]]]},"properties":{"osm_id":904487764,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3040159,27.7126105],[85.3040408,27.7125334],[85.3041604,27.7125636],[85.3041356,27.7126407],[85.3040159,27.7126105]]]},"properties":{"osm_id":904487869,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3033836,27.7117403],[85.3034212,27.711612],[85.303494,27.7116287],[85.3034564,27.711757],[85.3033836,27.7117403]]]},"properties":{"osm_id":904487902,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3033379,27.7124076],[85.3033845,27.7123085],[85.3034761,27.7123423],[85.3034295,27.7124414],[85.3033379,27.7124076]]]},"properties":{"osm_id":904487925,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3033012,27.71172],[85.3033354,27.7115948],[85.3034078,27.7116103],[85.3033736,27.7117355],[85.3033012,27.71172]]]},"properties":{"osm_id":904487903,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3030403,27.7129664],[85.3030718,27.712905],[85.3031695,27.7129442],[85.303138,27.7130057],[85.3030403,27.7129664]]]},"properties":{"osm_id":906837506,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036404,27.7126866],[85.3036807,27.7126053],[85.303743,27.7126294],[85.3037027,27.7127107],[85.3036404,27.7126866]]]},"properties":{"osm_id":904487882,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042805,27.7120946],[85.3042855,27.7120656],[85.3043274,27.7120712],[85.3043602,27.7118787],[85.3044249,27.7118874],[85.3043871,27.7121089],[85.3042805,27.7120946]]]},"properties":{"osm_id":904487859,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038072,27.7116613],[85.3038268,27.7115665],[85.3039313,27.7115836],[85.3039117,27.7116784],[85.3038072,27.7116613]]]},"properties":{"osm_id":904487790,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034433,27.7133615],[85.3034982,27.7132878],[85.3035358,27.7133098],[85.3034809,27.7133835],[85.3034433,27.7133615]]]},"properties":{"osm_id":904763645,"version":1,"tags":{"building":"yes"},"changeset":98856929,"timestamp":"2021-02-07T16:50:38"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3033481,27.7115008],[85.3033729,27.7114129],[85.303465,27.7114332],[85.3034402,27.7115211],[85.3033481,27.7115008]]]},"properties":{"osm_id":904487797,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3031378,27.7130106],[85.3031723,27.7129529],[85.3032703,27.7129989],[85.3032358,27.7130565],[85.3031378,27.7130106]]]},"properties":{"osm_id":348055491,"version":8,"tags":{"source":"METEOR Kathmandu Field Survey 2019","building":"residential","roof:shape":"flat","building:age":"pre_2000","roof:material":"concrete","building:levels":"4","capacity:persons":"20to49","building:adjacency":"attached","building:condition":"average","building:lateral:system":"masonry_wall","building:geological_site":"flat_land","building:lateral:material":"brick","building:levels:underground":"none"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3029508,27.7115561],[85.3029539,27.7114977],[85.3030779,27.7115022],[85.3030687,27.7115651],[85.3029508,27.7115561]]]},"properties":{"osm_id":517198619,"version":1,"tags":{"building":"yes"},"changeset":51295106,"timestamp":"2017-08-21T08:41:19"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042279,27.7121938],[85.3042453,27.7121],[85.3043634,27.712112],[85.3043473,27.7122046],[85.3042279,27.7121938]]]},"properties":{"osm_id":904487861,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3037011,27.7114206],[85.3037095,27.7113722],[85.3037737,27.7113809],[85.3037654,27.7114293],[85.3037011,27.7114206]]]},"properties":{"osm_id":904487763,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3028906,27.7129009],[85.3029171,27.7128485],[85.3030602,27.7129052],[85.3030337,27.7129576],[85.3028906,27.7129009]]]},"properties":{"osm_id":220996445,"version":5,"tags":{"oid":"2","source":"OpenDRI survey","building":"school","operator":"Surena English Boarding School","retrofit":"no","roof:shape":"flat","shape:plan":"L-shape","start_date":"1990-2000","occupant:day":"45","roof:material":"metal","building:bay:x":"1","building:bay:y":"1","occupant:night":"0","building:levels":"1","shape:elevation":"regular","occupant:evening":"0","occupant:morning":"0","building:overhang":"no","building:adjacency":"one_side_different_height","building:ownership":"rent","building:structure":"load_bearing_brick_wall_in_cement_mortar","physical_condition":"poor","seismic_resistance":"no","building:soft_storey":"no"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3028417,27.7130431],[85.3028964,27.7129421],[85.3030189,27.7129943],[85.3029641,27.7130952],[85.3028417,27.7130431]]]},"properties":{"osm_id":348055425,"version":1,"tags":{"source":"nextview","building":"yes"},"changeset":31432861,"timestamp":"2015-05-25T00:45:27"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035411,27.7132951],[85.3035893,27.7132169],[85.3036864,27.7132638],[85.3036382,27.713342],[85.3035411,27.7132951]]]},"properties":{"osm_id":652739835,"version":4,"tags":{"source":"METEOR Kathmandu Field Survey 2019","building":"mixed_use","roof:shape":"flat","building:age":"post_2000","roof:material":"concrete","building:levels":"4","capacity:persons":"20to49","building:adjacency":"attached","building:condition":"good","building:lateral:system":"moment_resisting_frame","building:geological_site":"flat_land","building:lateral:material":"concrete_reinforced","building:levels:underground":"1"},"changeset":67673600,"timestamp":"2019-03-01T05:51:46"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3002119,27.7115165],[85.3002488,27.7114999],[85.300273,27.711542],[85.300236,27.7115586],[85.3002119,27.7115165]]]},"properties":{"osm_id":903448956,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3007212,27.7115331],[85.3007284,27.7114866],[85.3007529,27.7114896],[85.3007458,27.711536],[85.3007212,27.7115331]]]},"properties":{"osm_id":904340053,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010055,27.711032],[85.3010508,27.7110215],[85.3010599,27.7110521],[85.3010146,27.7110626],[85.3010055,27.711032]]]},"properties":{"osm_id":904340014,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3023004,27.7139299],[85.3023525,27.7139295],[85.3023532,27.7139932],[85.3023012,27.7139937],[85.3023004,27.7139299]]]},"properties":{"osm_id":650689590,"version":2,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3022389,27.7137899],[85.3022751,27.7137881],[85.3022785,27.7138429],[85.3022423,27.7138447],[85.3022389,27.7137899]]]},"properties":{"osm_id":906837496,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3018933,27.7123463],[85.301901,27.712312],[85.3019802,27.7123259],[85.3019725,27.7123602],[85.3018933,27.7123463]]]},"properties":{"osm_id":904343874,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3017133,27.7123746],[85.3017208,27.7122835],[85.3018087,27.7122892],[85.3018012,27.7123802],[85.3017133,27.7123746]]]},"properties":{"osm_id":904343876,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3006183,27.7115399],[85.3006247,27.7114654],[85.3006947,27.7114702],[85.3006883,27.7115446],[85.3006183,27.7115399]]]},"properties":{"osm_id":904340063,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3013326,27.7134524],[85.3014553,27.7134487],[85.3014605,27.7135864],[85.3013378,27.7135901],[85.3013326,27.7134524]]]},"properties":{"osm_id":348055459,"version":1,"tags":{"source":"nextview","building":"yes"},"changeset":31432872,"timestamp":"2015-05-25T00:46:52"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3002861,27.712962],[85.3003151,27.7129516],[85.3002936,27.7129049],[85.3003541,27.7128831],[85.3003959,27.7129744],[85.3003065,27.7130065],[85.3002861,27.712962]]]},"properties":{"osm_id":903391875,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3004539,27.7121932],[85.3004707,27.7121498],[85.3006128,27.7121929],[85.3005961,27.7122363],[85.3004539,27.7121932]]]},"properties":{"osm_id":903449055,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3019075,27.7121118],[85.301929,27.7120024],[85.3020417,27.7120198],[85.302032,27.7120693],[85.3019887,27.7120626],[85.301977,27.7121225],[85.3019075,27.7121118]]]},"properties":{"osm_id":517171764,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3015052,27.7120463],[85.3015071,27.7120021],[85.3015786,27.7120046],[85.3015766,27.7120488],[85.3015052,27.7120463]]]},"properties":{"osm_id":206850569,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3007594,27.7115037],[85.3007695,27.7114613],[85.3008171,27.7114702],[85.300807,27.7115126],[85.3007594,27.7115037]]]},"properties":{"osm_id":904340055,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.30195,27.7120025],[85.3019605,27.7119396],[85.3020085,27.7119459],[85.301998,27.7120088],[85.30195,27.7120025]]]},"properties":{"osm_id":206850518,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:24"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3006738,27.711845],[85.3007199,27.7117168],[85.300828,27.7117473],[85.3008164,27.7117795],[85.3008557,27.7117906],[85.3008211,27.7118866],[85.3006738,27.711845]]]},"properties":{"osm_id":904340064,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3007158,27.7114497],[85.3007263,27.7113862],[85.3007631,27.7113909],[85.3007527,27.7114544],[85.3007158,27.7114497]]]},"properties":{"osm_id":904340060,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010968,27.7120155],[85.3010993,27.7119369],[85.3011831,27.7119389],[85.3011801,27.7120322],[85.3011435,27.7120313],[85.301144,27.7120167],[85.3010968,27.7120155]]]},"properties":{"osm_id":206850527,"version":2,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3015587,27.7125223],[85.301568,27.7124648],[85.3016221,27.7124717],[85.3016128,27.7125292],[85.3015587,27.7125223]]]},"properties":{"osm_id":904343893,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3001868,27.7132371],[85.3002062,27.7131861],[85.3003148,27.7132185],[85.3002954,27.7132695],[85.3001868,27.7132371]]]},"properties":{"osm_id":903391880,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3001529,27.7116239],[85.3002401,27.711623],[85.3002414,27.7117251],[85.3001542,27.711726],[85.3001529,27.7116239]]]},"properties":{"osm_id":903449063,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3037445,27.713558],[85.3038047,27.7135308],[85.3038479,27.7136058],[85.3037877,27.713633],[85.3037445,27.713558]]]},"properties":{"osm_id":904677926,"version":1,"tags":{"building":"yes"},"changeset":98844836,"timestamp":"2021-02-07T10:43:26"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3041729,27.7114969],[85.3041759,27.7114483],[85.3042248,27.7114507],[85.3042218,27.7114992],[85.3041729,27.7114969]]]},"properties":{"osm_id":905876295,"version":1,"tags":{"building":"yes"},"changeset":99055014,"timestamp":"2021-02-10T16:50:10"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3041223,27.7121546],[85.3041343,27.7120816],[85.3042276,27.7120937],[85.3042155,27.7121667],[85.3041223,27.7121546]]]},"properties":{"osm_id":904487860,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3037011,27.7127306],[85.3037486,27.7126293],[85.3038309,27.7126595],[85.3037834,27.7127608],[85.3037011,27.7127306]]]},"properties":{"osm_id":904487876,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3044042,27.7112327],[85.3044906,27.7112313],[85.3044913,27.7112627],[85.3044049,27.7112642],[85.3044042,27.7112327]]]},"properties":{"osm_id":904487725,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043068,27.7128751],[85.304445,27.7128559],[85.3044421,27.71295],[85.3043227,27.7129656],[85.3043068,27.7128751]]]},"properties":{"osm_id":302546446,"version":3,"tags":{"building":"yes"},"changeset":98852312,"timestamp":"2021-02-07T14:42:09"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038059,27.713676],[85.3038735,27.7136577],[85.3038907,27.7137075],[85.303823,27.7137258],[85.3038059,27.713676]]]},"properties":{"osm_id":652739864,"version":1,"tags":{"building":"yes"},"changeset":65195379,"timestamp":"2018-12-05T10:27:49"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043567,27.7133451],[85.3044352,27.7133235],[85.3044525,27.7133725],[85.304471,27.7133674],[85.3044867,27.7134119],[85.3043896,27.7134386],[85.3043567,27.7133451]]]},"properties":{"osm_id":904675365,"version":1,"tags":{"building":"yes"},"changeset":98844599,"timestamp":"2021-02-07T10:36:13"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043735,27.7131063],[85.3044678,27.7130802],[85.3044923,27.71315],[85.3044545,27.7131603],[85.3044498,27.7131466],[85.3043931,27.7131621],[85.3043735,27.7131063]]]},"properties":{"osm_id":652709951,"version":3,"tags":{"building":"yes"},"changeset":98852312,"timestamp":"2021-02-07T14:42:09"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038376,27.7129574],[85.3038708,27.7128991],[85.3039137,27.7128398],[85.3040149,27.7128885],[85.3039787,27.7129473],[85.3039455,27.7130056],[85.3038376,27.7129574]]]},"properties":{"osm_id":652739806,"version":2,"tags":{"building":"yes"},"changeset":116239593,"timestamp":"2022-01-17T06:53:12"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3033232,27.7130997],[85.3033437,27.7130682],[85.3033524,27.7130727],[85.3033894,27.7130158],[85.3034451,27.7130442],[85.3033877,27.7131326],[85.3033232,27.7130997]]]},"properties":{"osm_id":652739818,"version":3,"tags":{"building":"yes"},"changeset":99221407,"timestamp":"2021-02-13T16:59:30"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3031248,27.7135371],[85.3031877,27.7134597],[85.3032164,27.7134779],[85.3031535,27.7135553],[85.3031248,27.7135371]]]},"properties":{"osm_id":650695847,"version":1,"tags":{"building":"yes"},"changeset":65015047,"timestamp":"2018-11-29T15:56:05"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3039463,27.7138481],[85.3040524,27.7138385],[85.3040623,27.7139247],[85.3039563,27.7139343],[85.3039463,27.7138481]]]},"properties":{"osm_id":652739877,"version":1,"tags":{"building":"yes"},"changeset":65195379,"timestamp":"2018-12-05T10:27:49"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043479,27.7114927],[85.3043511,27.7114015],[85.3045047,27.7114057],[85.3045015,27.7114969],[85.3043479,27.7114927]]]},"properties":{"osm_id":904598371,"version":2,"tags":{"building":"yes"},"changeset":116494744,"timestamp":"2022-01-23T11:19:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.30379,27.7113704],[85.3037937,27.7113309],[85.3039428,27.7113419],[85.3039391,27.7113813],[85.30379,27.7113704]]]},"properties":{"osm_id":904487768,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3032503,27.7130581],[85.3032961,27.7129859],[85.3033625,27.7130189],[85.3033167,27.7130911],[85.3032503,27.7130581]]]},"properties":{"osm_id":906837507,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.304378,27.712157],[85.3043844,27.7121223],[85.3044395,27.7121302],[85.3044332,27.7121649],[85.304378,27.712157]]]},"properties":{"osm_id":904487851,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3039593,27.711531],[85.3039633,27.7115013],[85.3040482,27.7115103],[85.3040442,27.71154],[85.3039593,27.711531]]]},"properties":{"osm_id":904487787,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012245,27.7121086],[85.3012283,27.7120597],[85.3012808,27.712063],[85.301277,27.7121119],[85.3012245,27.7121086]]]},"properties":{"osm_id":206850534,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:25"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3015755,27.7112107],[85.3015949,27.7111377],[85.3016305,27.7111452],[85.301611,27.7112182],[85.3015755,27.7112107]]]},"properties":{"osm_id":906251426,"version":1,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3007033,27.7116383],[85.3007131,27.711582],[85.3007352,27.711585],[85.3007404,27.7115553],[85.3007857,27.7115615],[85.3007805,27.7115912],[85.3007975,27.7115936],[85.3007877,27.7116498],[85.3007033,27.7116383]]]},"properties":{"osm_id":650958405,"version":2,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3017716,27.7126598],[85.3017787,27.7126105],[85.3018554,27.7126191],[85.3018483,27.7126685],[85.3017716,27.7126598]]]},"properties":{"osm_id":904343898,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014049,27.713259],[85.3014074,27.7132195],[85.3015052,27.7132221],[85.3017202,27.7132327],[85.3017177,27.7132723],[85.3016107,27.7132603],[85.3014049,27.713259]]]},"properties":{"osm_id":650689598,"version":3,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3009887,27.7132897],[85.3011164,27.7132823],[85.3011212,27.7133483],[85.3009937,27.7133556],[85.3009887,27.7132897]]]},"properties":{"osm_id":348055437,"version":1,"tags":{"source":"nextview","building":"yes"},"changeset":31432864,"timestamp":"2015-05-25T00:46:04"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3008731,27.7136556],[85.3009663,27.7136236],[85.3009828,27.7136613],[85.3008896,27.7136933],[85.3008731,27.7136556]]]},"properties":{"osm_id":904486435,"version":1,"tags":{"building":"yes"},"changeset":98823427,"timestamp":"2021-02-06T17:45:10"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010084,27.7134438],[85.3012929,27.7134213],[85.3012971,27.7134632],[85.3010127,27.7134856],[85.3010084,27.7134438]]]},"properties":{"osm_id":904486431,"version":1,"tags":{"building":"yes"},"changeset":98823427,"timestamp":"2021-02-06T17:45:10"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3015161,27.7126127],[85.3015284,27.7125269],[85.3015386,27.7125281],[85.301605,27.7125355],[85.3015927,27.7126214],[85.3015161,27.7126127]]]},"properties":{"osm_id":206850514,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012843,27.7127797],[85.3013442,27.7127727],[85.3013532,27.7128331],[85.3013362,27.7128351],[85.3013397,27.7128582],[85.3012968,27.7128633],[85.3012843,27.7127797]]]},"properties":{"osm_id":206850593,"version":3,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010203,27.7120019],[85.301024,27.71193],[85.3010861,27.7119325],[85.3010825,27.7120044],[85.3010203,27.7120019]]]},"properties":{"osm_id":206850509,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:23"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3018507,27.7122967],[85.30186,27.7122207],[85.3018889,27.7122234],[85.3018796,27.7122995],[85.3018507,27.7122967]]]},"properties":{"osm_id":904343872,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3018052,27.7124523],[85.3018106,27.7124188],[85.3018947,27.7124292],[85.3018894,27.7124627],[85.3018052,27.7124523]]]},"properties":{"osm_id":904343894,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010696,27.7125103],[85.3011262,27.7125096],[85.3011264,27.71252],[85.3011764,27.7125193],[85.3011778,27.7126081],[85.3010712,27.7126094],[85.3010696,27.7125103]]]},"properties":{"osm_id":206850606,"version":2,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3007077,27.7125058],[85.3007526,27.7123449],[85.3008103,27.7123509],[85.3008121,27.7123375],[85.3008507,27.7123415],[85.3008489,27.7123549],[85.3008347,27.712502],[85.3007077,27.7125058]]]},"properties":{"osm_id":206853321,"version":2,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3003212,27.7138471],[85.3003252,27.7137616],[85.3004357,27.7137657],[85.3004336,27.7138113],[85.3003821,27.7138094],[85.3003802,27.7138492],[85.3003212,27.7138471]]]},"properties":{"osm_id":903391889,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038664,27.7111252],[85.3038682,27.7110648],[85.3039182,27.711066],[85.3039164,27.7111264],[85.3038664,27.7111252]]]},"properties":{"osm_id":1023831201,"version":1,"tags":{"building":"yes"},"changeset":116487981,"timestamp":"2022-01-23T06:01:36"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045222,27.7109881],[85.3045706,27.7109673],[85.3046075,27.7110344],[85.3045591,27.7110552],[85.3045222,27.7109881]]]},"properties":{"osm_id":904487719,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3040426,27.7137919],[85.3040524,27.7137909],[85.3040459,27.7137427],[85.3041763,27.7137288],[85.3041877,27.7138132],[85.3040475,27.713828],[85.3040426,27.7137919]]]},"properties":{"osm_id":652739878,"version":2,"tags":{"building":"yes"},"changeset":99221407,"timestamp":"2021-02-13T16:59:30"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042244,27.7133096],[85.3043231,27.7132866],[85.3043392,27.7133409],[85.3042405,27.713364],[85.3042244,27.7133096]]]},"properties":{"osm_id":904675673,"version":1,"tags":{"building":"yes"},"changeset":98844660,"timestamp":"2021-02-07T10:37:57"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042088,27.7131363],[85.3043424,27.7131092],[85.3043815,27.7132596],[85.3042478,27.7132867],[85.3042393,27.7132536],[85.3042088,27.7131363]]]},"properties":{"osm_id":904675674,"version":3,"tags":{"building":"yes"},"changeset":116239593,"timestamp":"2022-01-17T06:53:12"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3037526,27.7130322],[85.303799,27.712971],[85.3038619,27.7130084],[85.303878,27.7129871],[85.3039269,27.7130162],[85.3038643,27.7130986],[85.3037526,27.7130322]]]},"properties":{"osm_id":652739829,"version":7,"tags":{"source":"METEOR Kathmandu Field Survey 2019","building":"mixed_use","roof:shape":"monopitch","building:age":"post_2000","roof:material":"cgi","building:levels":"4","capacity:persons":"20to49","building:adjacency":"attached","building:condition":"average","building:lateral:system":"moment_resisting_frame","building:geological_site":"flat_land","building:lateral:material":"concrete_reinforced","building:levels:underground":"none"},"changeset":98842368,"timestamp":"2021-02-07T09:19:15"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3040428,27.713165],[85.3041239,27.7131422],[85.30415,27.7132354],[85.304083,27.7132682],[85.3040428,27.713165]]]},"properties":{"osm_id":652709961,"version":1,"tags":{"building":"yes"},"changeset":65192900,"timestamp":"2018-12-05T09:33:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3032796,27.7133166],[85.3033492,27.7132177],[85.3034207,27.7132572],[85.3033511,27.7133561],[85.3032796,27.7133166]]]},"properties":{"osm_id":652739820,"version":1,"tags":{"building":"yes"},"changeset":65195379,"timestamp":"2018-12-05T10:27:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3029113,27.7131991],[85.3029643,27.7131065],[85.303008,27.7131261],[85.302955,27.7132187],[85.3029113,27.7131991]]]},"properties":{"osm_id":650695856,"version":1,"tags":{"building":"yes"},"changeset":65015047,"timestamp":"2018-11-29T15:56:05"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3029994,27.7132488],[85.3030086,27.7132341],[85.3030651,27.7131451],[85.3031133,27.713169],[85.3030476,27.7132727],[85.3029994,27.7132488]]]},"properties":{"osm_id":348055480,"version":9,"tags":{"source":"METEOR Kathmandu Field Survey 2019","building":"residential","roof:shape":"flat","building:age":"pre_2000","roof:material":"concrete","building:levels":"4","capacity:persons":"20to49","building:adjacency":"attached","building:condition":"average","building:lateral:system":"moment_resisting_frame","building:geological_site":"flat_land","building:lateral:material":"concrete_reinforced","building:levels:underground":"none"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3026029,27.7124121],[85.3026132,27.7123481],[85.3027171,27.7123612],[85.3027068,27.7124252],[85.3026029,27.7124121]]]},"properties":{"osm_id":1021843705,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3031736,27.7119694],[85.3032039,27.7118715],[85.3033434,27.7119053],[85.3033131,27.7120032],[85.3031736,27.7119694]]]},"properties":{"osm_id":1022785524,"version":1,"tags":{"building":"yes"},"changeset":116371852,"timestamp":"2022-01-20T07:35:50"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3041751,27.7138241],[85.3042472,27.7138148],[85.3042645,27.7139213],[85.3041923,27.7139305],[85.3041775,27.7138388],[85.3041751,27.7138241]]]},"properties":{"osm_id":652739879,"version":3,"tags":{"building":"yes"},"changeset":99221407,"timestamp":"2021-02-13T16:59:30"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3033514,27.7118501],[85.3033741,27.7117616],[85.3034628,27.7117795],[85.3034401,27.7118679],[85.3033514,27.7118501]]]},"properties":{"osm_id":904487910,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3026875,27.7132132],[85.3026975,27.7131819],[85.3027217,27.7131879],[85.302729,27.7131652],[85.3028749,27.7132018],[85.3028575,27.7132559],[85.3026875,27.7132132]]]},"properties":{"osm_id":906837519,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3002944,27.7134665],[85.3003179,27.7134054],[85.3003393,27.7134119],[85.3003564,27.7133674],[85.3004143,27.7133849],[85.3004044,27.7134107],[85.3004362,27.7134203],[85.3004056,27.7135],[85.3002944,27.7134665]]]},"properties":{"osm_id":903391871,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3040589,27.7130096],[85.3042462,27.7129282],[85.304302,27.7131035],[85.3041651,27.7131415],[85.3041613,27.7131306],[85.3041128,27.7131234],[85.3040589,27.7130096]]]},"properties":{"osm_id":302546451,"version":6,"tags":{"building":"yes"},"changeset":116278894,"timestamp":"2022-01-18T03:56:34"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3039663,27.7120472],[85.3039764,27.7120032],[85.3041345,27.7120316],[85.3041244,27.7120755],[85.3039663,27.7120472]]]},"properties":{"osm_id":904487889,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035995,27.7125595],[85.3036274,27.712493],[85.3037584,27.7125359],[85.3037306,27.7126024],[85.3035995,27.7125595]]]},"properties":{"osm_id":904487922,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3030034,27.7125191],[85.3030276,27.7124491],[85.30309,27.7124659],[85.3030658,27.712536],[85.3030034,27.7125191]]]},"properties":{"osm_id":1021843703,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3017693,27.7121685],[85.3017741,27.7121314],[85.3018803,27.7121421],[85.3018756,27.7121792],[85.3017693,27.7121685]]]},"properties":{"osm_id":517188610,"version":1,"tags":{"building":"yes"},"changeset":51294215,"timestamp":"2017-08-21T08:09:08"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3044451,27.7119628],[85.3044598,27.711894],[85.3045342,27.7119065],[85.3045195,27.7119753],[85.3044451,27.7119628]]]},"properties":{"osm_id":904487858,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036746,27.7119278],[85.3036961,27.7118382],[85.3037257,27.7118438],[85.3037151,27.7118879],[85.3037327,27.7118912],[85.3037219,27.7119367],[85.3036746,27.7119278]]]},"properties":{"osm_id":904487905,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043283,27.7125056],[85.3044377,27.712509],[85.3044451,27.712563],[85.3043618,27.7125442],[85.3043283,27.7125056]]]},"properties":{"osm_id":904487837,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3009275,27.7125242],[85.3009911,27.7125209],[85.3009991,27.7126411],[85.3009354,27.7126444],[85.3009275,27.7125242]]]},"properties":{"osm_id":904340068,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3027558,27.7123552],[85.3027768,27.7122793],[85.302933,27.7123131],[85.302912,27.712389],[85.3027558,27.7123552]]]},"properties":{"osm_id":1021843699,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.302294,27.7138611],[85.3023483,27.7138601],[85.3023497,27.7139207],[85.3022953,27.7139216],[85.302294,27.7138611]]]},"properties":{"osm_id":650689585,"version":1,"tags":{"building":"yes"},"changeset":65014251,"timestamp":"2018-11-29T15:35:04"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3037504,27.7126123],[85.3037813,27.7125351],[85.3038656,27.7125616],[85.3038493,27.7126023],[85.3038677,27.7126081],[85.3038532,27.7126445],[85.3037504,27.7126123]]]},"properties":{"osm_id":904487873,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3017474,27.7122715],[85.3017526,27.7122079],[85.301786,27.71221],[85.3017808,27.7122736],[85.3017474,27.7122715]]]},"properties":{"osm_id":517188572,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3007835,27.7134572],[85.3008772,27.7134265],[85.3008981,27.7134767],[85.3008044,27.7135074],[85.3007835,27.7134572]]]},"properties":{"osm_id":650689641,"version":1,"tags":{"building":"yes"},"changeset":65014251,"timestamp":"2018-11-29T15:35:05"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3046034,27.7120994],[85.3046054,27.7120282],[85.3046813,27.7120299],[85.3046793,27.7121011],[85.3046034,27.7120994]]]},"properties":{"osm_id":904487856,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010878,27.7129829],[85.3012133,27.7129594],[85.3012274,27.7130183],[85.3011018,27.7130418],[85.3010878,27.7129829]]]},"properties":{"osm_id":229144317,"version":4,"tags":{"oid":"2","source":"OpenDRI survey","building":"school","operator":"Educational Environment","retrofit":"no","roof:shape":"flat","shape:plan":"narrow_long","start_date":"1990-2000","occupant:day":"30","roof:material":"metal","building:bay:x":"1","building:bay:y":"1","occupant:night":"0","building:levels":"1","shape:elevation":"regular","occupant:evening":"0","occupant:morning":"0","building:overhang":"no","building:adjacency":"free_standing","building:ownership":"rent","building:structure":"load_bearing_brick_wall_in_cement_mortar","physical_condition":"poor","seismic_resistance":"no","building:soft_storey":"no"},"changeset":65014251,"timestamp":"2018-11-29T15:35:10"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3003685,27.7136532],[85.3003941,27.7135632],[85.3004703,27.7135782],[85.3004471,27.7136706],[85.3003685,27.7136532]]]},"properties":{"osm_id":219416810,"version":4,"tags":{"oid":"1","source":"OpenDRI survey","building":"school","operator":"Bijeswori secondary school","retrofit":"no","roof:shape":"flat","shape:plan":"rectangular","start_date":"2000-2013","column:size":"9x12","occupant:day":"175","roof:material":"concrete","building:bay:x":"2","building:bay:y":"2","floor:material":"concrete","occupant:night":"4","building:levels":"4","shape:elevation":"setback","building:overhang":"no","building:adjacency":"one_side_different_height","building:ownership":"rent","building:structure":"non_engineered_reinforced_concrete","physical_condition":"good","seismic_resistance":"no","building:soft_storey":"no"},"changeset":17512496,"timestamp":"2013-08-26T09:09:22"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3008597,27.7129951],[85.3009676,27.7129911],[85.300973,27.7131055],[85.3008651,27.7131095],[85.3008597,27.7129951]]]},"properties":{"osm_id":650689624,"version":1,"tags":{"building":"yes"},"changeset":65014251,"timestamp":"2018-11-29T15:35:05"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3004774,27.7136369],[85.3005516,27.713601],[85.3005985,27.713677],[85.3005244,27.7137129],[85.3004774,27.7136369]]]},"properties":{"osm_id":903391868,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3005798,27.7136056],[85.3007676,27.7135571],[85.3007812,27.7135985],[85.3005934,27.7136469],[85.3005798,27.7136056]]]},"properties":{"osm_id":650689649,"version":1,"tags":{"building":"yes"},"changeset":65014251,"timestamp":"2018-11-29T15:35:05"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3005724,27.7132169],[85.3006623,27.7132165],[85.3006625,27.7132493],[85.3005726,27.7132497],[85.3005724,27.7132169]]]},"properties":{"osm_id":348055449,"version":3,"tags":{"source":"nextview","building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.301201,27.7125793],[85.3012046,27.7125315],[85.3013297,27.712539],[85.301326,27.7125869],[85.301201,27.7125793]]]},"properties":{"osm_id":206850507,"version":3,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3005659,27.7127654],[85.3006885,27.7127513],[85.3007069,27.712877],[85.3005843,27.7128911],[85.3005659,27.7127654]]]},"properties":{"osm_id":650689634,"version":1,"tags":{"building":"yes"},"changeset":65014251,"timestamp":"2018-11-29T15:35:05"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3039415,27.71222],[85.303961,27.7121303],[85.3040405,27.7121438],[85.3040453,27.7121219],[85.3041051,27.712132],[85.3040808,27.7122437],[85.3039415,27.71222]]]},"properties":{"osm_id":904487864,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3039999,27.7119985],[85.3040092,27.711954],[85.3041394,27.7119755],[85.30413,27.71202],[85.3039999,27.7119985]]]},"properties":{"osm_id":904487888,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036237,27.7118991],[85.3036428,27.7118136],[85.3036842,27.7118208],[85.3036651,27.7119063],[85.3036237,27.7118991]]]},"properties":{"osm_id":904487907,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035382,27.7118952],[85.3035613,27.7117964],[85.3036384,27.7118105],[85.3036152,27.7119093],[85.3035382,27.7118952]]]},"properties":{"osm_id":904487908,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3018402,27.7123595],[85.3018456,27.7123193],[85.3018672,27.7123216],[85.3018694,27.712305],[85.3018953,27.7123077],[85.3018878,27.7123645],[85.3018402,27.7123595]]]},"properties":{"osm_id":517188588,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3019059,27.712424],[85.301909,27.712391],[85.3019503,27.7123939],[85.3019515,27.7123808],[85.3019929,27.7123838],[85.3019886,27.71243],[85.3019059,27.712424]]]},"properties":{"osm_id":904343875,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3032166,27.7122507],[85.3032368,27.7121902],[85.3033615,27.7122229],[85.3033413,27.7122833],[85.3032166,27.7122507]]]},"properties":{"osm_id":1021843693,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3029323,27.7122725],[85.3029491,27.7122247],[85.303102,27.7122668],[85.3030852,27.7123146],[85.3029323,27.7122725]]]},"properties":{"osm_id":1021843694,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042225,27.712623],[85.304256,27.7125565],[85.3042748,27.712566],[85.3043009,27.7125215],[85.3043512,27.712544],[85.3042915,27.7126491],[85.3042225,27.712623]]]},"properties":{"osm_id":904487840,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010679,27.7114693],[85.3010886,27.7114122],[85.3012458,27.711457],[85.301225,27.7115141],[85.3010679,27.7114693]]]},"properties":{"osm_id":206850550,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:26"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014978,27.7114105],[85.3015069,27.7113683],[85.3015867,27.7113818],[85.3015777,27.7114239],[85.3014978,27.7114105]]]},"properties":{"osm_id":523998381,"version":2,"tags":{"building":"residential","building:levels":"5"},"changeset":98823006,"timestamp":"2021-02-06T17:34:17"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3037488,27.7131508],[85.3038044,27.7130773],[85.3038549,27.7131073],[85.3037994,27.7131808],[85.3037488,27.7131508]]]},"properties":{"osm_id":652739831,"version":7,"tags":{"source":"METEOR Kathmandu Field Survey 2019","building":"mixed_use","roof:shape":"flat","building:age":"post_2000","roof:material":"concrete","building:levels":"4","capacity:persons":"10to19","building:adjacency":"attached","building:condition":"good","building:lateral:system":"moment_resisting_frame","building:geological_site":"flat_land","building:lateral:material":"concrete_reinforced","building:levels:underground":"1"},"changeset":67673600,"timestamp":"2019-03-01T05:51:46"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3008653,27.7128806],[85.3010669,27.7128652],[85.3010983,27.7129294],[85.3008766,27.7129555],[85.3008653,27.7128806]]]},"properties":{"osm_id":206850551,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:26"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035452,27.7112217],[85.3035466,27.7111875],[85.3036032,27.7111893],[85.3036019,27.7112234],[85.3035452,27.7112217]]]},"properties":{"osm_id":904487761,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036914,27.7113606],[85.3036921,27.7113164],[85.3037714,27.7113173],[85.3037707,27.7113616],[85.3036914,27.7113606]]]},"properties":{"osm_id":904487762,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3013644,27.7124603],[85.3013703,27.7124192],[85.3014269,27.7124256],[85.3014172,27.7124933],[85.3013941,27.7124907],[85.3013979,27.7124641],[85.3013644,27.7124603]]]},"properties":{"osm_id":904343888,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3019291,27.711585],[85.3019609,27.7113209],[85.3019621,27.7113108],[85.302028,27.7113171],[85.3020268,27.7113272],[85.301995,27.7115913],[85.3019291,27.711585]]]},"properties":{"osm_id":523999369,"version":2,"tags":{"building":"residential","building:levels":"1"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3027292,27.7126366],[85.3027486,27.7125369],[85.3028733,27.7125559],[85.302854,27.7126556],[85.3027292,27.7126366]]]},"properties":{"osm_id":1021843708,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3027238,27.7127186],[85.3027308,27.71267],[85.3028729,27.712686],[85.302866,27.7127346],[85.3027238,27.7127186]]]},"properties":{"osm_id":1021843711,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3004204,27.7113022],[85.3004708,27.7112969],[85.3004802,27.7113676],[85.3004298,27.7113728],[85.3004204,27.7113022]]]},"properties":{"osm_id":903448953,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3005693,27.7110641],[85.3006099,27.7110567],[85.3006112,27.711062],[85.3006768,27.7110499],[85.3006841,27.711081],[85.300706,27.7110769],[85.3007203,27.7111379],[85.3005921,27.7111615],[85.3005693,27.7110641]]]},"properties":{"osm_id":904340051,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3000928,27.7110482],[85.3002862,27.7110136],[85.3002995,27.7110717],[85.3001061,27.7111064],[85.3000928,27.7110482]]]},"properties":{"osm_id":903448938,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3002654,27.7112792],[85.3003927,27.7112687],[85.3004035,27.7113718],[85.3002762,27.7113824],[85.3002654,27.7112792]]]},"properties":{"osm_id":903448954,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3046571,27.7121112],[85.3047029,27.7121073],[85.304713,27.7121987],[85.3046671,27.7122026],[85.3046571,27.7121112]]]},"properties":{"osm_id":904487817,"version":2,"tags":{"building":"yes"},"changeset":99055014,"timestamp":"2021-02-10T16:50:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3013542,27.7126478],[85.3014074,27.7126478],[85.3014074,27.71267],[85.3014397,27.71267],[85.3014397,27.7127346],[85.30138,27.7127346],[85.30138,27.7126991],[85.3013542,27.7126991],[85.3013542,27.7126478]]]},"properties":{"osm_id":206850603,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035682,27.7135491],[85.3036239,27.7135154],[85.3036935,27.7136053],[85.3036378,27.7136391],[85.3035682,27.7135491]]]},"properties":{"osm_id":652739866,"version":4,"tags":{"source":"METEOR Kathmandu Field Survey 2019","building":"mixed_use","roof:shape":"flat","building:age":"post_2000","roof:material":"concrete","building:levels":"5","capacity:persons":"20to49","building:adjacency":"attached","building:condition":"good","building:lateral:system":"moment_resisting_frame","building:geological_site":"flat_land","building:lateral:material":"concrete_reinforced","building:levels:underground":"none"},"changeset":67673600,"timestamp":"2019-03-01T05:51:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045852,27.7122336],[85.3046894,27.7122323],[85.3046908,27.7123166],[85.3045866,27.7123179],[85.3045852,27.7122336]]]},"properties":{"osm_id":904487830,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3039941,27.7110878],[85.3040508,27.7110878],[85.3040508,27.7111596],[85.3039941,27.7111596],[85.3039941,27.7110878]]]},"properties":{"osm_id":203546802,"version":6,"tags":{"source":"METEOR Kathmandu Field Survey 2019","building":"residential","roof:shape":"flat","building:age":"pre_2000","roof:material":"concrete","building:levels":"4","capacity:persons":"20to49","building:adjacency":"attached","building:condition":"average","building:lateral:system":"masonry_wall","building:geological_site":"flat_land","building:lateral:material":"brick","building:levels:underground":"none"},"changeset":67673600,"timestamp":"2019-03-01T05:43:08"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3013082,27.7123069],[85.3013124,27.7122502],[85.3013872,27.7122546],[85.3013829,27.7123114],[85.3013082,27.7123069]]]},"properties":{"osm_id":206850554,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:26"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012209,27.7122787],[85.3012226,27.712241],[85.3013078,27.7122441],[85.3013051,27.7123023],[85.3012268,27.7122995],[85.3012277,27.712279],[85.3012209,27.7122787]]]},"properties":{"osm_id":904343885,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3027712,27.7122662],[85.3027922,27.7121902],[85.3029183,27.7122175],[85.3028973,27.7122935],[85.3027712,27.7122662]]]},"properties":{"osm_id":1021843698,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3015945,27.7119445],[85.3016029,27.7118631],[85.3016971,27.7118707],[85.3016886,27.7119522],[85.3015945,27.7119445]]]},"properties":{"osm_id":206850568,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.300748,27.7115405],[85.3007564,27.711505],[85.3008053,27.7115141],[85.3007969,27.7115496],[85.300748,27.7115405]]]},"properties":{"osm_id":904340054,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3008979,27.7114805],[85.3009072,27.7114238],[85.300977,27.7114328],[85.3009677,27.7114895],[85.3008979,27.7114805]]]},"properties":{"osm_id":904340061,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.30092,27.7115737],[85.3009396,27.7114912],[85.3009784,27.7114984],[85.3009588,27.7115809],[85.30092,27.7115737]]]},"properties":{"osm_id":904340058,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.303112,27.7131478],[85.3031632,27.7130432],[85.3032035,27.7130586],[85.3031523,27.7131632],[85.303112,27.7131478]]]},"properties":{"osm_id":906837512,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3032578,27.7134915],[85.3033558,27.713377],[85.3034904,27.7134672],[85.3033924,27.7135817],[85.3032578,27.7134915]]]},"properties":{"osm_id":221016698,"version":6,"tags":{"oid":"3","source":"METEOR Kathmandu Field Survey 2019","building":"mixed_use","operator":"Shova Bhagwati English Boarding School","retrofit":"no","roof:shape":"flat","shape:plan":"rectangular","start_date":"1960-1990","building:age":"post_2000","occupant:day":"60","roof:material":"concrete","building:bay:x":"2","building:bay:y":"2","floor:material":"concrete","building:levels":"5","shape:elevation":"regular","capacity:persons":"20to49","building:overhang":"no","building:adjacency":"attached","building:condition":"good","building:ownership":"rent","building:structure":"load_bearing_brick_wall_in_mud_mortar","physical_condition":"poor","seismic_resistance":"no","building:soft_storey":"no","building:lateral:system":"moment_resisting_frame","building:geological_site":"flat_land","building:lateral:material":"concrete_reinforced","building:levels:underground":"1"},"changeset":67673600,"timestamp":"2019-03-01T05:45:03"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036841,27.7134447],[85.3037468,27.7134121],[85.3038123,27.7135109],[85.3037495,27.7135435],[85.3036841,27.7134447]]]},"properties":{"osm_id":652709970,"version":4,"tags":{"source":"METEOR Kathmandu Field Survey 2019","building":"mixed_use","roof:shape":"flat","building:age":"post_2000","roof:material":"concrete","building:levels":"5","capacity:persons":"20to49","building:adjacency":"attached","building:condition":"good","building:lateral:system":"moment_resisting_frame","building:geological_site":"flat_land","building:lateral:material":"concrete_reinforced","building:levels:underground":"none"},"changeset":67673600,"timestamp":"2019-03-01T05:51:46"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.30385,27.713303],[85.3038755,27.713276],[85.3039585,27.7133374],[85.303933,27.7133644],[85.30385,27.713303]]]},"properties":{"osm_id":904763644,"version":1,"tags":{"building":"yes"},"changeset":98856929,"timestamp":"2021-02-07T16:50:38"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038741,27.711872],[85.303906,27.7117685],[85.3039958,27.7117901],[85.303964,27.7118937],[85.3038741,27.711872]]]},"properties":{"osm_id":904487894,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038877,27.7125849],[85.3039152,27.7125006],[85.3040247,27.7125286],[85.3039972,27.7126129],[85.3038877,27.7125849]]]},"properties":{"osm_id":904487868,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3044411,27.7121668],[85.3044511,27.7121196],[85.3045415,27.7121347],[85.3045314,27.7121819],[85.3044411,27.7121668]]]},"properties":{"osm_id":904487850,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035638,27.7127569],[85.3036099,27.7126939],[85.3036906,27.7127403],[85.3036445,27.7128033],[85.3035638,27.7127569]]]},"properties":{"osm_id":904660653,"version":1,"tags":{"building":"yes"},"changeset":98842368,"timestamp":"2021-02-07T09:19:15"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034372,27.7110867],[85.3036243,27.7110867],[85.3036243,27.7111419],[85.3034372,27.7111419],[85.3034372,27.7110867]]]},"properties":{"osm_id":904487781,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036974,27.712062],[85.3037162,27.7119837],[85.3038293,27.7120049],[85.3037949,27.7121486],[85.3037292,27.7121362],[85.3037448,27.7120709],[85.3036974,27.712062]]]},"properties":{"osm_id":904487892,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3028117,27.7131134],[85.3028343,27.7130587],[85.3029497,27.713096],[85.3029271,27.7131507],[85.3028117,27.7131134]]]},"properties":{"osm_id":650695855,"version":6,"tags":{"fixme":"Many building are missing in map","source":"METEOR Kathmandu Field Survey 2019","building":"residential","roof:shape":"flat","building:age":"pre_2000","roof:material":"concrete","building:levels":"3","capacity:persons":"10to19","building:adjacency":"attached","building:condition":"average","building:lateral:system":"masonry_wall","building:geological_site":"flat_land","building:lateral:material":"brick","building:levels:underground":"none"},"changeset":67673600,"timestamp":"2019-03-01T05:51:36"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3033354,27.7113869],[85.303337,27.7113292],[85.3034426,27.7113315],[85.303441,27.7113893],[85.3033354,27.7113869]]]},"properties":{"osm_id":1023831209,"version":1,"tags":{"building":"yes"},"changeset":116487981,"timestamp":"2022-01-23T06:01:36"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3028237,27.7113069],[85.3028452,27.7111965],[85.3030785,27.7112321],[85.303057,27.7113425],[85.3028237,27.7113069]]]},"properties":{"osm_id":650958387,"version":3,"tags":{"building":"yes"},"changeset":98823345,"timestamp":"2021-02-06T17:42:45"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3039956,27.7112994],[85.303998,27.7112166],[85.3040646,27.7112181],[85.3041107,27.7112191],[85.3041083,27.7113019],[85.3040622,27.7113009],[85.3039956,27.7112994]]]},"properties":{"osm_id":1023831198,"version":2,"tags":{"building":"yes"},"changeset":116494744,"timestamp":"2022-01-23T11:19:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042528,27.7113608],[85.3042631,27.7112529],[85.3043843,27.7112619],[85.304374,27.7113698],[85.3042528,27.7113608]]]},"properties":{"osm_id":203546817,"version":7,"tags":{"source":"METEOR Kathmandu Field Survey 2019","building":"residential","roof:shape":"flat","building:age":"pre_2000","roof:material":"concrete","building:levels":"5","capacity:persons":"20to49","building:adjacency":"attached","building:condition":"average","building:lateral:system":"moment_resisting_frame","building:geological_site":"flat_land","building:lateral:material":"concrete_reinforced","building:levels:underground":"none"},"changeset":116494744,"timestamp":"2022-01-23T11:19:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045826,27.7109656],[85.3046374,27.7109369],[85.3046817,27.7110034],[85.3046268,27.711032],[85.3045826,27.7109656]]]},"properties":{"osm_id":904487718,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3029355,27.7124192],[85.3029558,27.7123576],[85.30311,27.7123974],[85.3030898,27.712459],[85.3029355,27.7124192]]]},"properties":{"osm_id":1021843702,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3041055,27.7135377],[85.304221,27.7135146],[85.3042511,27.7136327],[85.3042184,27.7136392],[85.3042128,27.7136173],[85.3041299,27.7136338],[85.3041055,27.7135377]]]},"properties":{"osm_id":348055799,"version":2,"tags":{"source":"nextview","building":"yes"},"changeset":99221407,"timestamp":"2021-02-13T16:59:30"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043356,27.7135475],[85.3044258,27.7135202],[85.3044684,27.7136305],[85.3043984,27.7136517],[85.3043856,27.7136187],[85.3043654,27.7136248],[85.3043356,27.7135475]]]},"properties":{"osm_id":904673167,"version":1,"tags":{"building":"yes"},"changeset":98844482,"timestamp":"2021-02-07T10:32:42"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036314,27.7132217],[85.3036546,27.7131862],[85.3036323,27.7131748],[85.3036534,27.7131426],[85.3037568,27.7131956],[85.3037125,27.7132633],[85.3036314,27.7132217]]]},"properties":{"osm_id":652739832,"version":7,"tags":{"source":"METEOR Kathmandu Field Survey 2019","building":"mixed_use","roof:shape":"flat","building:age":"post_2000","roof:material":"concrete","building:levels":"5","capacity:persons":"20to49","building:adjacency":"attached","building:condition":"good","building:lateral:system":"moment_resisting_frame","building:geological_site":"flat_land","building:lateral:material":"concrete_reinforced","building:levels:underground":"none"},"changeset":98856929,"timestamp":"2021-02-07T16:50:38"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3040379,27.7133382],[85.3040715,27.7133257],[85.3040583,27.713298],[85.3041298,27.7132714],[85.3041237,27.7132584],[85.3041576,27.7132458],[85.3041792,27.7132913],[85.3041922,27.7132864],[85.3042204,27.7133458],[85.3041119,27.7133862],[85.3041184,27.7133999],[85.3040748,27.7134161],[85.3040379,27.7133382]]]},"properties":{"osm_id":348055964,"version":3,"tags":{"source":"nextview","building":"yes"},"changeset":98856929,"timestamp":"2021-02-07T16:50:38"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034017,27.7130155],[85.3034363,27.7129546],[85.3035239,27.7129935],[85.3034893,27.7130545],[85.3034017,27.7130155]]]},"properties":{"osm_id":652739822,"version":3,"tags":{"building":"yes"},"changeset":116246317,"timestamp":"2022-01-17T10:01:53"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3023721,27.7138154],[85.3024267,27.7138143],[85.3024283,27.7138732],[85.3023737,27.7138743],[85.3023721,27.7138154]]]},"properties":{"osm_id":650689588,"version":2,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3026004,27.7133342],[85.3026029,27.7132472],[85.3026565,27.7132483],[85.3026541,27.7133354],[85.3026004,27.7133342]]]},"properties":{"osm_id":906837518,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3013253,27.7132136],[85.3013257,27.7131778],[85.3015041,27.7131793],[85.3015037,27.713215],[85.3013253,27.7132136]]]},"properties":{"osm_id":904486428,"version":1,"tags":{"building":"yes"},"changeset":98823427,"timestamp":"2021-02-06T17:45:10"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038583,27.7126563],[85.3038815,27.712604],[85.3039556,27.7126298],[85.3039324,27.7126821],[85.3038583,27.7126563]]]},"properties":{"osm_id":1021894174,"version":1,"tags":{"building":"yes"},"changeset":116246317,"timestamp":"2022-01-17T10:01:53"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3041231,27.7111572],[85.3041248,27.7110977],[85.3042251,27.7111],[85.3042233,27.7111595],[85.3041231,27.7111572]]]},"properties":{"osm_id":203546790,"version":6,"tags":{"source":"METEOR Kathmandu Field Survey 2019","building":"residential","roof:shape":"flat","building:age":"post_2000","roof:material":"concrete","building:levels":"5","capacity:persons":"20to49","building:adjacency":"attached","building:condition":"average","building:lateral:system":"moment_resisting_frame","building:geological_site":"flat_land","building:lateral:material":"concrete_reinforced","building:levels:underground":"none"},"changeset":67673600,"timestamp":"2019-03-01T05:43:08"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.300695,27.7137576],[85.3007416,27.7137563],[85.3007412,27.7137465],[85.300808,27.7137447],[85.3008099,27.7138003],[85.3006965,27.7138033],[85.300695,27.7137576]]]},"properties":{"osm_id":904486433,"version":1,"tags":{"building":"yes"},"changeset":98823427,"timestamp":"2021-02-06T17:45:10"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3004942,27.713254],[85.3004946,27.7132108],[85.3005798,27.7132114],[85.3005794,27.7132546],[85.3004942,27.713254]]]},"properties":{"osm_id":903398670,"version":1,"tags":{"building":"yes"},"changeset":98646913,"timestamp":"2021-02-03T13:19:09"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035156,27.7139097],[85.3035984,27.7138972],[85.3036079,27.7139468],[85.3035251,27.7139593],[85.3035156,27.7139097]]]},"properties":{"osm_id":904768360,"version":1,"tags":{"building":"yes"},"changeset":98858059,"timestamp":"2021-02-07T17:10:42"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3016491,27.7120597],[85.3016542,27.712017],[85.3016636,27.7120179],[85.3016668,27.7119905],[85.3016717,27.7119909],[85.3016739,27.7119722],[85.3016929,27.7119739],[85.3016941,27.7119635],[85.3017315,27.7119669],[85.3017182,27.7120808],[85.3016696,27.7120763],[85.3016713,27.7120617],[85.3016491,27.7120597]]]},"properties":{"osm_id":517188607,"version":2,"tags":{"building":"yes"},"changeset":98800203,"timestamp":"2021-02-06T04:32:27"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3017035,27.712403],[85.3017077,27.7123787],[85.3017986,27.7123911],[85.3017944,27.7124153],[85.3017035,27.712403]]]},"properties":{"osm_id":517188577,"version":1,"tags":{"building":"yes"},"changeset":51294215,"timestamp":"2017-08-21T08:09:07"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3018755,27.7127732],[85.3018846,27.7127289],[85.3019124,27.7127334],[85.3019034,27.7127776],[85.3018755,27.7127732]]]},"properties":{"osm_id":906837522,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035646,27.712648],[85.303601,27.7125708],[85.3036693,27.7125963],[85.3036329,27.7126733],[85.3035851,27.7126556],[85.3035646,27.712648]]]},"properties":{"osm_id":904487881,"version":2,"tags":{"building":"yes"},"changeset":116246317,"timestamp":"2022-01-17T10:01:53"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3005905,27.7124894],[85.3005964,27.7124409],[85.3006542,27.7124438],[85.3006367,27.7125193],[85.3005905,27.7124894]]]},"properties":{"osm_id":206862101,"version":1,"tags":{"building":"yes"},"changeset":15138051,"timestamp":"2013-02-23T17:02:32"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3005069,27.7114838],[85.3005617,27.7114821],[85.3005607,27.7114585],[85.300609,27.7114569],[85.3006116,27.7115222],[85.3005453,27.7115243],[85.3005463,27.7115503],[85.3005097,27.7115514],[85.3005069,27.7114838]]]},"properties":{"osm_id":903449051,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3039898,27.7119284],[85.3040126,27.711837],[85.3041756,27.7118689],[85.3041494,27.711961],[85.3039898,27.7119284]]]},"properties":{"osm_id":904487890,"version":2,"tags":{"building":"yes"},"changeset":98834565,"timestamp":"2021-02-06T23:50:12"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043137,27.7124906],[85.3043331,27.7123802],[85.3044188,27.712392],[85.3043994,27.7125024],[85.3043137,27.7124906]]]},"properties":{"osm_id":904487845,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045363,27.7112031],[85.3046241,27.7111991],[85.3046295,27.7112917],[85.3045416,27.7112957],[85.3045363,27.7112031]]]},"properties":{"osm_id":653342445,"version":6,"tags":{"source":"METEOR Kathmandu Field Survey 2019","building":"residential","roof:shape":"flat","building:age":"post_2000","roof:material":"concrete","building:levels":"2","capacity:persons":"10to19","building:adjacency":"attached","building:condition":"good","building:lateral:system":"moment_resisting_frame","building:geological_site":"flat_land","building:lateral:material":"concrete_reinforced","building:levels:underground":"none"},"changeset":67673600,"timestamp":"2019-03-01T05:51:48"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045785,27.7123321],[85.3046899,27.7123321],[85.3046899,27.7123956],[85.3045785,27.7123956],[85.3045785,27.7123321]]]},"properties":{"osm_id":904487829,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043324,27.7126058],[85.3043566,27.7125524],[85.3044384,27.7125813],[85.3044143,27.7126348],[85.3043324,27.7126058]]]},"properties":{"osm_id":904487841,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3044287,27.7123955],[85.3044982,27.7124005],[85.3045027,27.7123512],[85.3045552,27.712355],[85.3045462,27.7124444],[85.3044355,27.7124808],[85.3044287,27.7123955]]]},"properties":{"osm_id":904487844,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014766,27.7125108],[85.3014882,27.7124381],[85.3015657,27.7124478],[85.3015541,27.7125205],[85.3014766,27.7125108]]]},"properties":{"osm_id":904343890,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014196,27.7121233],[85.301426,27.7120552],[85.3014978,27.7120606],[85.3014913,27.7121287],[85.3014196,27.7121233]]]},"properties":{"osm_id":206850542,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:26"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014384,27.7128849],[85.3014431,27.7127915],[85.3015129,27.7127942],[85.3015084,27.7128876],[85.3014384,27.7128849]]]},"properties":{"osm_id":206850532,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:25"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.301853,27.7109688],[85.301859,27.7109211],[85.3019672,27.7109353],[85.3019607,27.7109808],[85.301853,27.7109688]]]},"properties":{"osm_id":517169771,"version":2,"tags":{"building":"residential","building:levels":"2"},"changeset":51963054,"timestamp":"2017-09-12T07:29:20"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012365,27.7111847],[85.3012886,27.7110918],[85.3013914,27.711137],[85.3013393,27.7112299],[85.3012365,27.7111847]]]},"properties":{"osm_id":206850567,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3017678,27.711478],[85.3017783,27.7114239],[85.3019227,27.7114458],[85.3019122,27.7114999],[85.3017678,27.711478]]]},"properties":{"osm_id":523998385,"version":1,"tags":{"building":"residential","building:levels":"1"},"changeset":51963685,"timestamp":"2017-09-12T07:52:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3020135,27.7113033],[85.3020318,27.7111623],[85.3021726,27.7111768],[85.3021542,27.7113178],[85.3020135,27.7113033]]]},"properties":{"osm_id":517171751,"version":2,"tags":{"building":"residential","building:levels":"1"},"changeset":51963685,"timestamp":"2017-09-12T07:52:49"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3017183,27.7112406],[85.3017429,27.7111334],[85.3018268,27.7111485],[85.3018022,27.7112557],[85.3017183,27.7112406]]]},"properties":{"osm_id":517169786,"version":2,"tags":{"building":"residential","building:levels":"2"},"changeset":51963685,"timestamp":"2017-09-12T07:52:49"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3003769,27.7137545],[85.3003799,27.7136907],[85.300452,27.7136933],[85.300449,27.7137571],[85.3003769,27.7137545]]]},"properties":{"osm_id":903391888,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3003824,27.7115648],[85.3004418,27.711539],[85.3004996,27.7116433],[85.3004082,27.711683],[85.3003846,27.7116404],[85.3004166,27.7116266],[85.3003824,27.7115648]]]},"properties":{"osm_id":903449054,"version":2,"tags":{"building":"yes"},"changeset":138142038,"timestamp":"2023-07-05T10:13:13"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.301792,27.7122529],[85.3017996,27.7122054],[85.3018396,27.7122105],[85.3018319,27.7122579],[85.301792,27.7122529]]]},"properties":{"osm_id":517188574,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012081,27.712426],[85.3012108,27.7123678],[85.3012799,27.7123703],[85.3012789,27.7123914],[85.3012737,27.7123912],[85.3012726,27.7124144],[85.3012873,27.712415],[85.3012866,27.7124289],[85.3012081,27.712426]]]},"properties":{"osm_id":904343886,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3013718,27.7124165],[85.3013793,27.7123637],[85.3014346,27.7123699],[85.3014271,27.7124228],[85.3013718,27.7124165]]]},"properties":{"osm_id":904343889,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3013369,27.7121217],[85.3013451,27.7120541],[85.3013889,27.7120583],[85.3013865,27.7120778],[85.3013952,27.7120786],[85.3013893,27.7121267],[85.3013369,27.7121217]]]},"properties":{"osm_id":904344137,"version":1,"tags":{"building":"yes"},"changeset":98800203,"timestamp":"2021-02-06T04:32:27"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010729,27.7124545],[85.3010774,27.7123725],[85.3011681,27.7123765],[85.3011761,27.7123768],[85.3011716,27.7124587],[85.3010729,27.7124545]]]},"properties":{"osm_id":206850531,"version":2,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3007356,27.7123179],[85.3007691,27.7121819],[85.3008218,27.7121921],[85.3007883,27.7123281],[85.3007356,27.7123179]]]},"properties":{"osm_id":904340065,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.30034,27.7121962],[85.3004202,27.7121945],[85.3004229,27.7122942],[85.3003426,27.7122959],[85.30034,27.7121962]]]},"properties":{"osm_id":903449056,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3003712,27.7124612],[85.3004729,27.7124569],[85.300472,27.712441],[85.3005288,27.7124386],[85.3005318,27.7124939],[85.3003734,27.7125007],[85.3003712,27.7124612]]]},"properties":{"osm_id":903449060,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3008881,27.7119588],[85.3008921,27.7119354],[85.3009488,27.7118726],[85.3010246,27.7118827],[85.3010123,27.7119707],[85.3008881,27.7119588]]]},"properties":{"osm_id":904340012,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010339,27.711926],[85.30104,27.7118468],[85.3010891,27.7118497],[85.3010865,27.7118837],[85.3011278,27.7118862],[85.3011244,27.7119315],[85.3010339,27.711926]]]},"properties":{"osm_id":206850607,"version":2,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3011316,27.7119308],[85.3011347,27.7118906],[85.3011812,27.7118934],[85.3011781,27.7119336],[85.3011316,27.7119308]]]},"properties":{"osm_id":904340009,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3006726,27.710946],[85.3007517,27.7109103],[85.3007781,27.7109564],[85.300699,27.710992],[85.3006726,27.710946]]]},"properties":{"osm_id":906251410,"version":1,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012644,27.7117807],[85.3012769,27.7116904],[85.3013769,27.7117013],[85.3013644,27.7117915],[85.3012644,27.7117807]]]},"properties":{"osm_id":517188571,"version":2,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012127,27.7123422],[85.3012146,27.7123021],[85.3012896,27.7123048],[85.3012866,27.7123689],[85.3012472,27.7123674],[85.3012483,27.7123435],[85.3012127,27.7123422]]]},"properties":{"osm_id":904343884,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3006325,27.7111573],[85.3007085,27.7111434],[85.3007207,27.7111956],[85.3006447,27.7112095],[85.3006325,27.7111573]]]},"properties":{"osm_id":904340050,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3000362,27.7111617],[85.3000713,27.7111558],[85.3001017,27.7112958],[85.3000666,27.7113017],[85.3000362,27.7111617]]]},"properties":{"osm_id":903448866,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3004949,27.7109804],[85.300658,27.7109584],[85.30067,27.7110284],[85.3005069,27.7110504],[85.3004949,27.7109804]]]},"properties":{"osm_id":903448940,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3009777,27.7110033],[85.301035,27.7109653],[85.3010502,27.7109833],[85.3009929,27.7110213],[85.3009777,27.7110033]]]},"properties":{"osm_id":904340013,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010942,27.7110648],[85.3011144,27.7110324],[85.3011938,27.7110024],[85.3012388,27.7110228],[85.3011849,27.7111091],[85.3010942,27.7110648]]]},"properties":{"osm_id":650958383,"version":2,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3007141,27.7113363],[85.3007232,27.7112866],[85.3007492,27.7112903],[85.3007546,27.7112606],[85.3009014,27.7112815],[85.300887,27.711361],[85.3007141,27.7113363]]]},"properties":{"osm_id":650958406,"version":2,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3011695,27.711292],[85.3012126,27.7111962],[85.3012596,27.7112128],[85.3012525,27.7112287],[85.3013088,27.7112486],[85.3012727,27.7113284],[85.3011695,27.711292]]]},"properties":{"osm_id":206850577,"version":2,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012421,27.7118992],[85.301253,27.711806],[85.3013435,27.7118143],[85.3013326,27.7119075],[85.3012421,27.7118992]]]},"properties":{"osm_id":206850575,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3011177,27.7120637],[85.3011593,27.7120549],[85.3011889,27.7121647],[85.3011473,27.7121735],[85.3011177,27.7120637]]]},"properties":{"osm_id":906251422,"version":1,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3013304,27.7120374],[85.301339,27.7119689],[85.3013721,27.7119722],[85.3013665,27.7120158],[85.3013828,27.7120174],[85.3013796,27.7120423],[85.3013304,27.7120374]]]},"properties":{"osm_id":904343865,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012091,27.7122369],[85.3012129,27.7121403],[85.3013408,27.7121442],[85.3013371,27.7122408],[85.3012441,27.712238],[85.3012091,27.7122369]]]},"properties":{"osm_id":650958368,"version":2,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3013208,27.7110872],[85.3013644,27.7109952],[85.3014411,27.7110331],[85.3014117,27.7111209],[85.3013208,27.7110872]]]},"properties":{"osm_id":206850583,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:29"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010364,27.7111725],[85.301094,27.7110723],[85.3011818,27.7111119],[85.3011243,27.711212],[85.3010364,27.7111725]]]},"properties":{"osm_id":650958384,"version":1,"tags":{"building":"yes"},"changeset":65035690,"timestamp":"2018-11-30T08:22:10"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010052,27.7116132],[85.3010266,27.7115283],[85.3011004,27.7115429],[85.3010789,27.7116278],[85.3010052,27.7116132]]]},"properties":{"osm_id":904340010,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3008017,27.7115497],[85.3008194,27.7114752],[85.3008729,27.7114851],[85.3008552,27.7115597],[85.3008017,27.7115497]]]},"properties":{"osm_id":904340056,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3004828,27.7112962],[85.3005371,27.7112926],[85.3005432,27.7113645],[85.3004888,27.711368],[85.3004828,27.7112962]]]},"properties":{"osm_id":903448952,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036459,27.7114624],[85.3036516,27.7114223],[85.3037265,27.7114307],[85.3037207,27.7114708],[85.3036459,27.7114624]]]},"properties":{"osm_id":904487772,"version":2,"tags":{"building":"yes"},"changeset":116377715,"timestamp":"2022-01-20T10:04:29"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3027617,27.7115313],[85.3027776,27.7114258],[85.3029412,27.7114452],[85.3029253,27.7115507],[85.3027617,27.7115313]]]},"properties":{"osm_id":517198615,"version":2,"tags":{"building":"yes"},"changeset":65035690,"timestamp":"2018-11-30T08:22:23"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3020174,27.7111447],[85.3020428,27.7110156],[85.3021733,27.7110357],[85.3021479,27.7111647],[85.3020174,27.7111447]]]},"properties":{"osm_id":517169783,"version":3,"tags":{"building":"commercial","building:levels":"1"},"changeset":65035690,"timestamp":"2018-11-30T08:22:23"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3020016,27.7109951],[85.3020096,27.7109386],[85.3020743,27.7109458],[85.3020663,27.7110023],[85.3020016,27.7109951]]]},"properties":{"osm_id":650958360,"version":1,"tags":{"building":"yes"},"changeset":65035690,"timestamp":"2018-11-30T08:22:09"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3016742,27.7113473],[85.3016908,27.7112627],[85.3017742,27.7112755],[85.3017635,27.7113301],[85.3017713,27.7113313],[85.3017654,27.7113613],[85.3017577,27.7113602],[85.3016742,27.7113473]]]},"properties":{"osm_id":523998383,"version":3,"tags":{"building":"residential","building:levels":"4"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014987,27.7119327],[85.3015066,27.7118469],[85.3015423,27.7118494],[85.3015398,27.7118765],[85.3015919,27.7118803],[85.3015865,27.7119391],[85.3014987,27.7119327]]]},"properties":{"osm_id":206850598,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3013708,27.7117818],[85.3013781,27.7117147],[85.3014502,27.7117208],[85.3014429,27.711788],[85.3013708,27.7117818]]]},"properties":{"osm_id":206850559,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:27"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3016297,27.7115054],[85.3016463,27.7114389],[85.3016838,27.7114462],[85.3016976,27.7113906],[85.3017371,27.7113983],[85.3017068,27.7115204],[85.3016297,27.7115054]]]},"properties":{"osm_id":523998382,"version":2,"tags":{"building":"residential","building:levels":"5"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012062,27.712024],[85.3012184,27.7119271],[85.3012666,27.7119319],[85.3012688,27.711914],[85.3013111,27.7119181],[85.3012968,27.712033],[85.3012062,27.712024]]]},"properties":{"osm_id":517188596,"version":2,"tags":{"building":"yes"},"changeset":98800203,"timestamp":"2021-02-06T04:32:27"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3015151,27.7119959],[85.3015184,27.7119485],[85.3015543,27.7119504],[85.3015926,27.711953],[85.3015894,27.7119998],[85.3015151,27.7119959]]]},"properties":{"osm_id":517188598,"version":3,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3026589,27.7121098],[85.3026735,27.711989],[85.302742,27.7119955],[85.3027502,27.7119276],[85.3028883,27.7119407],[85.3028654,27.7121294],[85.3026589,27.7121098]]]},"properties":{"osm_id":1022785530,"version":1,"tags":{"building":"yes"},"changeset":116371852,"timestamp":"2022-01-20T07:35:50"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034489,27.7114101],[85.3034671,27.7113583],[85.3035395,27.7113781],[85.3035214,27.71143],[85.3034489,27.7114101]]]},"properties":{"osm_id":1023831206,"version":1,"tags":{"building":"yes"},"changeset":116487981,"timestamp":"2022-01-23T06:01:36"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3032126,27.7112291],[85.3032198,27.7111919],[85.303277,27.7112006],[85.3032697,27.7112379],[85.3032126,27.7112291]]]},"properties":{"osm_id":650958391,"version":1,"tags":{"building":"yes"},"changeset":65035690,"timestamp":"2018-11-30T08:22:10"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3032454,27.711314],[85.3032472,27.7112524],[85.3033444,27.7112547],[85.3033414,27.7113585],[85.3032707,27.7113569],[85.303272,27.7113146],[85.3032454,27.711314]]]},"properties":{"osm_id":1022785525,"version":1,"tags":{"building":"yes"},"changeset":116371852,"timestamp":"2022-01-20T07:35:50"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3031932,27.71105],[85.3031969,27.710993],[85.303311,27.7109989],[85.303313,27.7109694],[85.3034027,27.710974],[85.303397,27.7110605],[85.3031932,27.71105]]]},"properties":{"osm_id":906251413,"version":1,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3002608,27.7111196],[85.300327,27.7111119],[85.3003424,27.7112164],[85.3002762,27.7112241],[85.3002608,27.7111196]]]},"properties":{"osm_id":903448945,"version":2,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3007576,27.7112046],[85.3008038,27.7111308],[85.3008824,27.7111694],[85.3008361,27.7112432],[85.3007576,27.7112046]]]},"properties":{"osm_id":206855681,"version":3,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010989,27.7114094],[85.3011412,27.7112944],[85.3012969,27.7113392],[85.3012546,27.7114542],[85.3010989,27.7114094]]]},"properties":{"osm_id":206850540,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:25"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3013507,27.7113568],[85.3013665,27.711306],[85.3014903,27.7113361],[85.3014746,27.7113869],[85.3013507,27.7113568]]]},"properties":{"osm_id":206850555,"version":3,"tags":{"building":"residential","building:levels":"6"},"changeset":67282016,"timestamp":"2019-02-17T15:01:22"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3015196,27.711355],[85.3015415,27.711277],[85.3016671,27.7113046],[85.3016452,27.7113827],[85.3015196,27.711355]]]},"properties":{"osm_id":206850549,"version":4,"tags":{"building":"residential","building:levels":"5"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.301552,27.7112736],[85.3015633,27.7112213],[85.3016827,27.7112414],[85.3016714,27.7112937],[85.301552,27.7112736]]]},"properties":{"osm_id":517169787,"version":3,"tags":{"building":"residential","building:levels":"3"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014249,27.7111784],[85.3014618,27.7110783],[85.3015468,27.7111028],[85.30151,27.7112029],[85.3014249,27.7111784]]]},"properties":{"osm_id":206850556,"version":4,"tags":{"name":"Shree Jal Ganesh Fastfood and Water Supplier Centre","building":"residential","building:levels":"3"},"changeset":98823006,"timestamp":"2021-02-06T17:34:17"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3015719,27.7110661],[85.3015947,27.710972],[85.3016972,27.7109915],[85.3016744,27.7110856],[85.3015719,27.7110661]]]},"properties":{"osm_id":517169779,"version":5,"tags":{"building":"residential","building:levels":"4"},"changeset":98823006,"timestamp":"2021-02-06T17:34:17"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3015299,27.7117877],[85.3015342,27.7117342],[85.3016152,27.7117394],[85.3016085,27.711822],[85.3015553,27.7118186],[85.3015577,27.7117895],[85.3015299,27.7117877]]]},"properties":{"osm_id":206850536,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014111,27.7119225],[85.3014177,27.7118309],[85.301504,27.7118358],[85.3014974,27.7119274],[85.3014111,27.7119225]]]},"properties":{"osm_id":206850581,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:29"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.301447,27.7118002],[85.3014546,27.7117253],[85.3015282,27.7117312],[85.3015205,27.7118061],[85.301447,27.7118002]]]},"properties":{"osm_id":206850508,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:23"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3013295,27.7114201],[85.3013403,27.7113728],[85.3014901,27.7113997],[85.3014793,27.7114469],[85.3013295,27.7114201]]]},"properties":{"osm_id":206850584,"version":3,"tags":{"building":"residential","building:levels":"5"},"changeset":98823006,"timestamp":"2021-02-06T17:34:17"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3008315,27.7109602],[85.3009062,27.7109282],[85.3009371,27.7109846],[85.3008623,27.7110166],[85.3008315,27.7109602]]]},"properties":{"osm_id":906251408,"version":1,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034132,27.7112197],[85.3034152,27.7111716],[85.3035372,27.7111756],[85.3035352,27.7112237],[85.3034132,27.7112197]]]},"properties":{"osm_id":904487780,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035315,27.7117204],[85.3035489,27.7116572],[85.3035832,27.7116646],[85.3035658,27.7117278],[85.3035315,27.7117204]]]},"properties":{"osm_id":904487900,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034731,27.7117266],[85.3035003,27.7116239],[85.3035479,27.7116338],[85.3035207,27.7117365],[85.3034731,27.7117266]]]},"properties":{"osm_id":904487901,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010239,27.7118165],[85.301038,27.7116913],[85.3010578,27.711693],[85.3010588,27.7116841],[85.3010983,27.7116876],[85.3010832,27.7118218],[85.3010239,27.7118165]]]},"properties":{"osm_id":904340011,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3008576,27.7115616],[85.3008764,27.7114827],[85.3009358,27.7114938],[85.300917,27.7115726],[85.3008576,27.7115616]]]},"properties":{"osm_id":904340057,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3017945,27.7125524],[85.3018091,27.7124848],[85.3018701,27.7124951],[85.3018556,27.7125627],[85.3017945,27.7125524]]]},"properties":{"osm_id":904343892,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3005043,27.7138619],[85.3005056,27.7138281],[85.3005834,27.7138305],[85.300582,27.7138643],[85.3005043,27.7138619]]]},"properties":{"osm_id":903391886,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3032321,27.7125731],[85.3032649,27.7125072],[85.3033414,27.7125371],[85.3033086,27.712603],[85.3032321,27.7125731]]]},"properties":{"osm_id":904343841,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3028966,27.712563],[85.3029209,27.7125167],[85.3030403,27.712566],[85.3030159,27.7126123],[85.3028966,27.712563]]]},"properties":{"osm_id":1021843709,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3008413,27.7135513],[85.3008765,27.7135352],[85.3008714,27.7135264],[85.3009057,27.7135108],[85.3009257,27.7135452],[85.3008562,27.7135769],[85.3008413,27.7135513]]]},"properties":{"osm_id":904486434,"version":1,"tags":{"building":"yes"},"changeset":98823427,"timestamp":"2021-02-06T17:45:10"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3006329,27.7133276],[85.3006686,27.7133219],[85.3006762,27.7133595],[85.300714,27.7133535],[85.3007225,27.7133956],[85.300649,27.7134072],[85.3006329,27.7133276]]]},"properties":{"osm_id":348055489,"version":2,"tags":{"source":"nextview","building":"yes"},"changeset":65014251,"timestamp":"2018-11-29T15:35:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036138,27.713915],[85.3037707,27.7138896],[85.3037825,27.713947],[85.3036256,27.7139724],[85.3036138,27.713915]]]},"properties":{"osm_id":652739872,"version":1,"tags":{"building":"yes"},"changeset":65195379,"timestamp":"2018-12-05T10:27:49"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3016679,27.7122656],[85.3016753,27.7121753],[85.3017502,27.7121801],[85.3017428,27.7122704],[85.3016679,27.7122656]]]},"properties":{"osm_id":517188582,"version":1,"tags":{"building":"yes"},"changeset":51294215,"timestamp":"2017-08-21T08:09:07"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3013844,27.7123641],[85.3013873,27.7123129],[85.3014157,27.7123142],[85.3014185,27.7122649],[85.3014905,27.7122681],[85.301489,27.712295],[85.3015147,27.7122961],[85.30151,27.7123697],[85.3013844,27.7123641]]]},"properties":{"osm_id":206850604,"version":3,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012887,27.7123943],[85.3012966,27.7123102],[85.3013784,27.7123163],[85.3013693,27.7124124],[85.301319,27.7124086],[85.3013202,27.7123966],[85.3012887,27.7123943]]]},"properties":{"osm_id":206850594,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3007716,27.7127409],[85.3008684,27.7127122],[85.3009073,27.7128148],[85.3008106,27.7128436],[85.3007716,27.7127409]]]},"properties":{"osm_id":206850595,"version":2,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3009108,27.7127577],[85.3010466,27.7127442],[85.3010568,27.7128242],[85.300921,27.7128377],[85.3009108,27.7127577]]]},"properties":{"osm_id":650689602,"version":1,"tags":{"building":"yes"},"changeset":65014251,"timestamp":"2018-11-29T15:35:04"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010796,27.7127696],[85.3011923,27.7127613],[85.3011991,27.7128336],[85.3010864,27.7128419],[85.3010796,27.7127696]]]},"properties":{"osm_id":904493848,"version":1,"tags":{"building":"yes"},"changeset":98824445,"timestamp":"2021-02-06T18:15:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014834,27.7127078],[85.3014886,27.7126425],[85.3016055,27.7126498],[85.3016002,27.7127151],[85.3014834,27.7127078]]]},"properties":{"osm_id":206850578,"version":2,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012012,27.7125243],[85.3012026,27.7124922],[85.3013392,27.7124968],[85.3013378,27.7125289],[85.3012012,27.7125243]]]},"properties":{"osm_id":206850535,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3015734,27.7124617],[85.3015801,27.7124008],[85.3016324,27.7124053],[85.3016257,27.7124662],[85.3015734,27.7124617]]]},"properties":{"osm_id":517188575,"version":1,"tags":{"building":"yes"},"changeset":51294215,"timestamp":"2017-08-21T08:09:07"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3018357,27.7124179],[85.301844,27.7123635],[85.3019087,27.7123712],[85.3019005,27.7124256],[85.3018357,27.7124179]]]},"properties":{"osm_id":517188590,"version":1,"tags":{"building":"yes"},"changeset":51294215,"timestamp":"2017-08-21T08:09:08"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3025893,27.7123261],[85.3026058,27.7122538],[85.302762,27.7122817],[85.3027455,27.712354],[85.3025893,27.7123261]]]},"properties":{"osm_id":1021843700,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3030367,27.7126237],[85.303068,27.7125429],[85.3031525,27.7125685],[85.3031211,27.7126493],[85.3030367,27.7126237]]]},"properties":{"osm_id":904487306,"version":1,"tags":{"building":"yes"},"changeset":98823530,"timestamp":"2021-02-06T17:48:01"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.300171,27.7126729],[85.3003346,27.7126494],[85.3003466,27.7127153],[85.3001831,27.7127388],[85.300171,27.7126729]]]},"properties":{"osm_id":903449058,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.300466,27.7122587],[85.3004755,27.712237],[85.3005602,27.7122661],[85.3005436,27.7123039],[85.3004882,27.7122849],[85.3004952,27.7122688],[85.300466,27.7122587]]]},"properties":{"osm_id":903448873,"version":2,"tags":{"building":"yes"},"changeset":98899009,"timestamp":"2021-02-08T09:57:42"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3004459,27.7122217],[85.3004573,27.7121959],[85.3005126,27.7122149],[85.3005013,27.7122407],[85.3004459,27.7122217]]]},"properties":{"osm_id":904986997,"version":1,"tags":{"building":"yes"},"changeset":98899009,"timestamp":"2021-02-08T09:57:42"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3016038,27.7123774],[85.3016067,27.712283],[85.3016761,27.7122847],[85.3016732,27.7123791],[85.3016038,27.7123774]]]},"properties":{"osm_id":904343878,"version":2,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.301519,27.7123772],[85.301527,27.7122707],[85.3015674,27.7122731],[85.3015671,27.7122769],[85.3016027,27.7122789],[85.3015949,27.7123817],[85.301519,27.7123772]]]},"properties":{"osm_id":517188579,"version":2,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014408,27.7125784],[85.3014495,27.712517],[85.3015253,27.7125253],[85.3015127,27.7126155],[85.3014584,27.7126095],[85.301459,27.7126048],[85.3014624,27.7125808],[85.3014408,27.7125784]]]},"properties":{"osm_id":206850517,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014181,27.7125015],[85.3014346,27.7124009],[85.3014902,27.712408],[85.3014781,27.7124818],[85.301453,27.7124786],[85.3014486,27.7125054],[85.3014181,27.7125015]]]},"properties":{"osm_id":206850510,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034882,27.7138218],[85.3035709,27.7138043],[85.3035938,27.7138897],[85.3035111,27.7139071],[85.3034882,27.7138218]]]},"properties":{"osm_id":220996985,"version":8,"tags":{"oid":"2","name":"Academy of Sacred Hearts","source":"OpenDRI survey","building":"school","operator":"Academy of Sacred Hearts","retrofit":"no","roof:shape":"flat","shape:plan":"rectangular","start_date":"1990-2000","column:size":"9x12","occupant:day":"60","roof:material":"concrete","building:bay:x":"3","building:bay:y":"2","floor:material":"concrete","building:levels":"3","shape:elevation":"setback","building:overhang":"no","building:adjacency":"two_side_different_height","building:ownership":"rent","building:structure":"non_engineered_reinforced_concrete","physical_condition":"average","seismic_resistance":"no","building:soft_storey":"no"},"changeset":98856929,"timestamp":"2021-02-07T16:50:38"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3001703,27.7127441],[85.3002362,27.7127406],[85.3002392,27.7127858],[85.3001733,27.7127892],[85.3001703,27.7127441]]]},"properties":{"osm_id":903391876,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3001006,27.7133864],[85.300112,27.7132801],[85.3002387,27.713327],[85.3002086,27.7134161],[85.3001006,27.7133864]]]},"properties":{"osm_id":903391881,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3000765,27.7135158],[85.3001107,27.7134179],[85.3001999,27.7134423],[85.3001657,27.7135402],[85.3000765,27.7135158]]]},"properties":{"osm_id":903391884,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3037473,27.7137654],[85.3038552,27.7137415],[85.303879,27.713826],[85.3037711,27.7138499],[85.3037473,27.7137654]]]},"properties":{"osm_id":348055781,"version":1,"tags":{"source":"nextview","building":"yes"},"changeset":31432923,"timestamp":"2015-05-25T00:52:42"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3024436,27.7138581],[85.3025161,27.7138564],[85.3025173,27.7138946],[85.3024448,27.7138963],[85.3024436,27.7138581]]]},"properties":{"osm_id":906837495,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3024246,27.7139385],[85.3025046,27.7139361],[85.3025067,27.7139931],[85.3024268,27.7139954],[85.3024246,27.7139385]]]},"properties":{"osm_id":302368022,"version":2,"tags":{"building":"yes"},"changeset":65014251,"timestamp":"2018-11-29T15:35:10"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3031004,27.7138936],[85.3031449,27.7138734],[85.303174,27.7139235],[85.3032155,27.7139046],[85.3032462,27.7139577],[85.3031602,27.7139968],[85.3031004,27.7138936]]]},"properties":{"osm_id":324951806,"version":2,"tags":{"building":"yes"},"changeset":65014251,"timestamp":"2018-11-29T15:35:10"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3040651,27.7138632],[85.304154,27.7138524],[85.3041657,27.713928],[85.3040767,27.7139387],[85.3040651,27.7138632]]]},"properties":{"osm_id":652739876,"version":3,"tags":{"building":"yes"},"changeset":99221407,"timestamp":"2021-02-13T16:59:30"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3029871,27.7118156],[85.3030082,27.7117198],[85.3031586,27.7117459],[85.3031375,27.7118416],[85.3029871,27.7118156]]]},"properties":{"osm_id":517164165,"version":1,"tags":{"building":"yes"},"changeset":51291427,"timestamp":"2017-08-21T06:14:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3027406,27.7118366],[85.3027571,27.7116892],[85.3029733,27.7117081],[85.3029569,27.7118555],[85.3027406,27.7118366]]]},"properties":{"osm_id":517155853,"version":1,"tags":{"building":"yes"},"changeset":51290842,"timestamp":"2017-08-21T05:36:34"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3037237,27.7128461],[85.3037722,27.7127832],[85.3038821,27.7128496],[85.3038377,27.7129084],[85.3037237,27.7128461]]]},"properties":{"osm_id":652739805,"version":1,"tags":{"building":"yes"},"changeset":65195379,"timestamp":"2018-12-05T10:27:46"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3018889,27.7121837],[85.3019001,27.7121152],[85.3020171,27.71213],[85.3020059,27.7121986],[85.3018889,27.7121837]]]},"properties":{"osm_id":517171765,"version":3,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3044482,27.713548],[85.3045438,27.7135199],[85.3045833,27.7136254],[85.3044877,27.7136534],[85.3044482,27.713548]]]},"properties":{"osm_id":348055811,"version":1,"tags":{"source":"nextview","building":"yes"},"changeset":31432947,"timestamp":"2015-05-25T00:54:43"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038845,27.7128071],[85.3039353,27.7127162],[85.3039914,27.7127408],[85.3039405,27.7128318],[85.3038845,27.7128071]]]},"properties":{"osm_id":904487874,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045142,27.7114149],[85.3046047,27.7114149],[85.3046047,27.7114951],[85.3045142,27.7114951],[85.3045142,27.7114149]]]},"properties":{"osm_id":904598373,"version":1,"tags":{"building":"yes"},"changeset":98834565,"timestamp":"2021-02-06T23:50:12"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042697,27.7112481],[85.3042727,27.711159],[85.3043971,27.7111622],[85.3043942,27.7112513],[85.3042697,27.7112481]]]},"properties":{"osm_id":904487743,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042825,27.7109587],[85.3043646,27.7109576],[85.3043663,27.711052],[85.3042842,27.7110531],[85.3042825,27.7109587]]]},"properties":{"osm_id":904487730,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3044069,27.7120852],[85.304423,27.7119866],[85.3044754,27.7119933],[85.3044593,27.7120919],[85.3044069,27.7120852]]]},"properties":{"osm_id":904487853,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045571,27.7121968],[85.3045618,27.7121166],[85.304644,27.7121204],[85.3046394,27.7122005],[85.3045571,27.7121968]]]},"properties":{"osm_id":904487855,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038175,27.7121362],[85.303849,27.7120074],[85.3039516,27.7120271],[85.3039201,27.7121559],[85.3038175,27.7121362]]]},"properties":{"osm_id":904487891,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034487,27.7118726],[85.3034815,27.7117379],[85.3035671,27.7117542],[85.3035342,27.711889],[85.3034487,27.7118726]]]},"properties":{"osm_id":904487909,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3031963,27.7129451],[85.3032367,27.7128585],[85.3032805,27.7128745],[85.3032634,27.7129113],[85.3033041,27.7129262],[85.3032808,27.7129761],[85.3031963,27.7129451]]]},"properties":{"osm_id":906837509,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043365,27.7123374],[85.3043496,27.7122471],[85.3044909,27.7122632],[85.3044778,27.7123535],[85.3043365,27.7123374]]]},"properties":{"osm_id":904487846,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042004,27.7122846],[85.3042205,27.7122033],[85.3043343,27.7122254],[85.3043142,27.7123067],[85.3042004,27.7122846]]]},"properties":{"osm_id":904487862,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042017,27.7124283],[85.3042192,27.7123517],[85.3043252,27.7123707],[85.3043078,27.7124472],[85.3042017,27.7124283]]]},"properties":{"osm_id":904487866,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.303975,27.7123808],[85.3039931,27.7123036],[85.3040779,27.7123192],[85.3040598,27.7123964],[85.303975,27.7123808]]]},"properties":{"osm_id":904487878,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038362,27.7123547],[85.3038543,27.7122817],[85.3039812,27.7123063],[85.3039631,27.7123793],[85.3038362,27.7123547]]]},"properties":{"osm_id":904487879,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3026027,27.713107],[85.3026073,27.7130094],[85.3027069,27.7130131],[85.3027021,27.7131107],[85.3026027,27.713107]]]},"properties":{"osm_id":650695853,"version":1,"tags":{"building":"yes"},"changeset":65015047,"timestamp":"2018-11-29T15:56:05"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.304089,27.712398],[85.3041045,27.7123268],[85.3041758,27.7123389],[85.3041604,27.7124101],[85.304089,27.712398]]]},"properties":{"osm_id":904487865,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3031262,27.7126502],[85.3031572,27.7125707],[85.3032403,27.712596],[85.3032093,27.7126756],[85.3031262,27.7126502]]]},"properties":{"osm_id":1021843690,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3030982,27.7127272],[85.3031294,27.7126616],[85.3031754,27.7126788],[85.3031442,27.7127444],[85.3030982,27.7127272]]]},"properties":{"osm_id":1021843687,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3033284,27.7126495],[85.3033639,27.7125849],[85.3034626,27.7126274],[85.3034272,27.712692],[85.3033284,27.7126495]]]},"properties":{"osm_id":904487884,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035683,27.712841],[85.3036013,27.7127941],[85.3036709,27.7128324],[85.3037925,27.7128992],[85.3037725,27.7129277],[85.3036563,27.7128638],[85.3036433,27.7128822],[85.3035683,27.712841]]]},"properties":{"osm_id":652739810,"version":4,"tags":{"building":"yes"},"changeset":99221407,"timestamp":"2021-02-13T16:59:30"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042641,27.7127198],[85.304299,27.7126497],[85.3043673,27.7126693],[85.3044153,27.7127415],[85.3043274,27.7127748],[85.3042641,27.7127198]]]},"properties":{"osm_id":904487842,"version":2,"tags":{"building":"yes"},"changeset":116239593,"timestamp":"2022-01-17T06:53:12"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3041635,27.7127239],[85.3042178,27.7126426],[85.3042784,27.7126743],[85.3042241,27.7127556],[85.3041635,27.7127239]]]},"properties":{"osm_id":904487843,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043744,27.7126633],[85.3044525,27.7126273],[85.3045017,27.712711],[85.3044236,27.712747],[85.3043744,27.7126633]]]},"properties":{"osm_id":904487801,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043848,27.7122354],[85.3043928,27.7121826],[85.3044491,27.7121893],[85.3044984,27.7121952],[85.3044903,27.712248],[85.304441,27.7122421],[85.3043848,27.7122354]]]},"properties":{"osm_id":905876298,"version":2,"tags":{"building":"yes"},"changeset":116239593,"timestamp":"2022-01-17T06:53:12"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3044219,27.7118125],[85.3044228,27.7117698],[85.3044381,27.71177],[85.3044385,27.7117547],[85.3044976,27.7117557],[85.3044962,27.7118138],[85.3044219,27.7118125]]]},"properties":{"osm_id":904487584,"version":2,"tags":{"building":"yes"},"changeset":99055014,"timestamp":"2021-02-10T16:50:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.304334,27.7118097],[85.304338,27.711726],[85.3044169,27.711729],[85.3044129,27.7118127],[85.304334,27.7118097]]]},"properties":{"osm_id":1023910009,"version":1,"tags":{"building":"yes"},"changeset":116493360,"timestamp":"2022-01-23T10:39:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3041123,27.7117332],[85.304119,27.7116917],[85.3042212,27.7117046],[85.3042145,27.7117461],[85.3041123,27.7117332]]]},"properties":{"osm_id":904487578,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3041384,27.7116895],[85.3041412,27.7116634],[85.3041473,27.7116639],[85.304148,27.7116572],[85.3041501,27.7116373],[85.3042605,27.7116465],[85.3042585,27.7116654],[85.3042574,27.7116758],[85.3042565,27.7116757],[85.304254,27.7116992],[85.3041384,27.7116895]]]},"properties":{"osm_id":904487576,"version":2,"tags":{"building":"yes"},"changeset":99055014,"timestamp":"2021-02-10T16:50:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042954,27.7117146],[85.3042994,27.7116434],[85.3044089,27.7116482],[85.3044049,27.7117195],[85.3042954,27.7117146]]]},"properties":{"osm_id":1023910011,"version":1,"tags":{"building":"yes"},"changeset":116493360,"timestamp":"2022-01-23T10:39:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3044142,27.7117092],[85.3044176,27.7116504],[85.3044954,27.7116539],[85.304492,27.7117127],[85.3044142,27.7117092]]]},"properties":{"osm_id":1023910010,"version":1,"tags":{"building":"yes"},"changeset":116493360,"timestamp":"2022-01-23T10:39:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3046013,27.7116785],[85.3046785,27.7116785],[85.3046785,27.71178],[85.3046013,27.71178],[85.3046013,27.7116785]]]},"properties":{"osm_id":904487592,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045956,27.7115767],[85.3046739,27.7115748],[85.3046749,27.7116024],[85.3046768,27.7116629],[85.3045986,27.7116649],[85.3045956,27.7115767]]]},"properties":{"osm_id":904487595,"version":2,"tags":{"building":"yes"},"changeset":116493360,"timestamp":"2022-01-23T10:39:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045149,27.7115382],[85.3045161,27.7115052],[85.3045952,27.7115074],[85.304594,27.7115404],[85.3045149,27.7115382]]]},"properties":{"osm_id":904598372,"version":1,"tags":{"building":"yes"},"changeset":98834565,"timestamp":"2021-02-06T23:50:12"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043556,27.7115562],[85.3043575,27.7115063],[85.3044099,27.711508],[85.3044081,27.7115576],[85.3043556,27.7115562]]]},"properties":{"osm_id":904598365,"version":1,"tags":{"building":"yes"},"changeset":98834565,"timestamp":"2021-02-06T23:50:12"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3030642,27.7117185],[85.303098,27.7116037],[85.3032938,27.7116488],[85.30326,27.7117636],[85.3030642,27.7117185]]]},"properties":{"osm_id":1022785528,"version":1,"tags":{"building":"yes"},"changeset":116371852,"timestamp":"2022-01-20T07:35:50"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3039535,27.7117133],[85.3039807,27.7115569],[85.304101,27.7115733],[85.3040928,27.7116202],[85.3040547,27.7116151],[85.3040479,27.7116543],[85.3040914,27.7116602],[85.3041181,27.7116639],[85.3041059,27.711734],[85.3039535,27.7117133]]]},"properties":{"osm_id":220995240,"version":7,"tags":{"oid":"1","name":"Nepal Rastriya Lower Secondary School","source":"OpenDRI survey","amenity":"school","building":"school","operator":"Nepal Rastriya Lower Secondary School","retrofit":"no","roof:shape":"flat","shape:plan":"L-shape","start_date":"1960-1990","column:size":"9x12","isced:level":"lower_secondary","occupant:day":"270","operator:type":"government","roof:material":"metal","student:count":"250","building:bay:x":"2","building:bay:y":"2","building_count":"1","floor:material":"concrete","occupant:night":"4","building:levels":"4","personnel:count":"17","shape:elevation":"regular","occupant:evening":"4","occupant:morning":"4","building:overhang":"no","building:adjacency":"two_side_different_height","building:ownership":"self","building:structure":"non_engineered_reinforced_concrete","physical_condition":"average","seismic_resistance":"no","building:soft_storey":"no"},"changeset":98778924,"timestamp":"2021-02-05T16:11:22"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3041075,27.7116138],[85.3041135,27.7115452],[85.3042017,27.7115513],[85.3041957,27.7116199],[85.3041075,27.7116138]]]},"properties":{"osm_id":904487574,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3041065,27.7115277],[85.30411,27.7114857],[85.3041637,27.7114892],[85.3041601,27.7115313],[85.3041065,27.7115277]]]},"properties":{"osm_id":905876296,"version":1,"tags":{"building":"yes"},"changeset":99055014,"timestamp":"2021-02-10T16:50:10"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3040255,27.7114657],[85.3040257,27.7114229],[85.304026,27.7113662],[85.304099,27.7113665],[85.3040988,27.7113942],[85.3041324,27.7113944],[85.3041321,27.7114661],[85.3040255,27.7114657]]]},"properties":{"osm_id":904487784,"version":2,"tags":{"building":"yes"},"changeset":116494744,"timestamp":"2022-01-23T11:19:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038728,27.7114436],[85.3038802,27.7113859],[85.3039697,27.7113948],[85.3039624,27.7114525],[85.3038728,27.7114436]]]},"properties":{"osm_id":1023831204,"version":1,"tags":{"building":"yes"},"changeset":116487981,"timestamp":"2022-01-23T06:01:36"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038543,27.7114967],[85.3038547,27.7114669],[85.3039378,27.7114678],[85.3039374,27.7114976],[85.3038543,27.7114967]]]},"properties":{"osm_id":1023831203,"version":1,"tags":{"building":"yes"},"changeset":116487981,"timestamp":"2022-01-23T06:01:36"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036974,27.7115399],[85.3037164,27.7114728],[85.3038022,27.7114918],[85.3037833,27.7115589],[85.3036974,27.7115399]]]},"properties":{"osm_id":1022823615,"version":1,"tags":{"building":"yes"},"changeset":116377715,"timestamp":"2022-01-20T10:04:29"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.303951,27.7124868],[85.3039684,27.7124031],[85.3040944,27.7124237],[85.304077,27.7125074],[85.303951,27.7124868]]]},"properties":{"osm_id":904487872,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034661,27.712262],[85.3035158,27.7121119],[85.3036354,27.7121428],[85.3035858,27.712293],[85.3034661,27.712262]]]},"properties":{"osm_id":904487916,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3017484,27.7115545],[85.3017602,27.711489],[85.3019051,27.7115095],[85.3018933,27.711575],[85.3017484,27.7115545]]]},"properties":{"osm_id":523998388,"version":2,"tags":{"building":"residential","building:levels":"5"},"changeset":98823006,"timestamp":"2021-02-06T17:34:17"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3019988,27.7117734],[85.3020184,27.711633],[85.302072,27.7116389],[85.3020523,27.7117793],[85.3019988,27.7117734]]]},"properties":{"osm_id":517171761,"version":3,"tags":{"building":"yes"},"changeset":65035690,"timestamp":"2018-11-30T08:22:23"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3016986,27.7117414],[85.3017063,27.7116772],[85.3019468,27.7116996],[85.3019391,27.7117638],[85.3016986,27.7117414]]]},"properties":{"osm_id":517501165,"version":1,"tags":{"building":"yes"},"changeset":51325058,"timestamp":"2017-08-22T05:23:26"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3018669,27.7125612],[85.301875,27.7125249],[85.3019607,27.7125399],[85.3019526,27.7125761],[85.3018669,27.7125612]]]},"properties":{"osm_id":206850544,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3025871,27.7126126],[85.3025984,27.7125215],[85.3027385,27.7125351],[85.3027272,27.7126262],[85.3025871,27.7126126]]]},"properties":{"osm_id":1021843707,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3033652,27.7122473],[85.3033964,27.7121241],[85.3034874,27.7121421],[85.3034562,27.7122653],[85.3033652,27.7122473]]]},"properties":{"osm_id":904487915,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3031382,27.7123491],[85.3031686,27.7122528],[85.3032193,27.7122653],[85.3032173,27.7122714],[85.3032529,27.7122801],[85.3032373,27.7123295],[85.3032655,27.7123364],[85.3032526,27.7123774],[85.3031382,27.7123491]]]},"properties":{"osm_id":904343843,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3029424,27.7116666],[85.3029585,27.7115705],[85.3030671,27.7115847],[85.303051,27.7116808],[85.3029424,27.7116666]]]},"properties":{"osm_id":1022785529,"version":1,"tags":{"building":"yes"},"changeset":116371852,"timestamp":"2022-01-20T07:35:50"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3031492,27.7114621],[85.3031724,27.7113882],[85.3032844,27.7113983],[85.3032658,27.7114882],[85.3031492,27.7114621]]]},"properties":{"osm_id":1022785526,"version":1,"tags":{"building":"yes"},"changeset":116371852,"timestamp":"2022-01-20T07:35:50"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034443,27.7115262],[85.3034758,27.7114244],[85.3035519,27.7114476],[85.3035563,27.71149],[85.3036029,27.7115058],[85.3035922,27.711596],[85.3035439,27.7115862],[85.3034849,27.7115361],[85.3034443,27.7115262]]]},"properties":{"osm_id":904487796,"version":2,"tags":{"building":"yes"},"changeset":116377715,"timestamp":"2022-01-20T10:04:29"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035332,27.7114357],[85.3035586,27.711371],[85.3036203,27.71139],[85.3035949,27.7114547],[85.3035332,27.7114357]]]},"properties":{"osm_id":1023831207,"version":1,"tags":{"building":"yes"},"changeset":116487981,"timestamp":"2022-01-23T06:01:36"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034473,27.7113436],[85.3034624,27.7112912],[85.3035425,27.7113093],[85.3035274,27.7113617],[85.3034473,27.7113436]]]},"properties":{"osm_id":1023831208,"version":1,"tags":{"building":"yes"},"changeset":116487981,"timestamp":"2022-01-23T06:01:36"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045951,27.7134352],[85.3046922,27.7133802],[85.3047479,27.7134574],[85.3046672,27.7135031],[85.3046422,27.7134684],[85.3046258,27.7134776],[85.3045951,27.7134352]]]},"properties":{"osm_id":652709947,"version":2,"tags":{"building":"yes"},"changeset":98844462,"timestamp":"2021-02-07T10:31:51"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042245,27.7115491],[85.3042321,27.7114816],[85.304326,27.7114899],[85.3043184,27.7115574],[85.3042245,27.7115491]]]},"properties":{"osm_id":904598375,"version":1,"tags":{"building":"yes"},"changeset":98834565,"timestamp":"2021-02-06T23:50:12"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.303731,27.7114718],[85.3037354,27.7114351],[85.3038044,27.7114416],[85.3038,27.7114783],[85.303731,27.7114718]]]},"properties":{"osm_id":904487771,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3039422,27.7114972],[85.3039449,27.7114648],[85.3040648,27.7114726],[85.3040621,27.711505],[85.3039422,27.7114972]]]},"properties":{"osm_id":904487786,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3028311,27.7113948],[85.302846,27.7113181],[85.3030507,27.7113493],[85.3030358,27.711426],[85.3028311,27.7113948]]]},"properties":{"osm_id":650958386,"version":1,"tags":{"building":"yes"},"changeset":65035690,"timestamp":"2018-11-30T08:22:10"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3040307,27.7110142],[85.3041097,27.7110121],[85.3041117,27.7110697],[85.3040327,27.7110718],[85.3040307,27.7110142]]]},"properties":{"osm_id":904487736,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3040496,27.7112099],[85.3040528,27.7111635],[85.3041149,27.711167],[85.3041116,27.7112133],[85.3040496,27.7112099]]]},"properties":{"osm_id":1023831196,"version":1,"tags":{"building":"yes"},"changeset":116487981,"timestamp":"2022-01-23T06:01:36"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043848,27.7110671],[85.3043874,27.7109602],[85.3044475,27.7109614],[85.3044924,27.7110665],[85.3043848,27.7110671]]]},"properties":{"osm_id":1023916784,"version":1,"tags":{"building":"yes"},"changeset":116494744,"timestamp":"2022-01-23T11:19:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3046888,27.71142],[85.3046915,27.711344],[85.3047383,27.7113453],[85.3047356,27.7114213],[85.3046888,27.71142]]]},"properties":{"osm_id":904487600,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3039062,27.7134604],[85.30405,27.7134121],[85.3040674,27.7134528],[85.3040955,27.7134434],[85.3041131,27.7134846],[85.3040851,27.713494],[85.3040909,27.7135076],[85.303964,27.7135502],[85.3039508,27.7135194],[85.3039339,27.7135251],[85.3039062,27.7134604]]]},"properties":{"osm_id":652709968,"version":2,"tags":{"building":"yes"},"changeset":98844525,"timestamp":"2021-02-07T10:33:55"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045463,27.7132874],[85.304647,27.7132889],[85.304662,27.7133267],[85.3045884,27.7133523],[85.3045463,27.7132874]]]},"properties":{"osm_id":904675903,"version":2,"tags":{"building":"yes"},"changeset":98856929,"timestamp":"2021-02-07T16:50:38"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3027319,27.7116451],[85.3027433,27.7115444],[85.3028736,27.711556],[85.3028622,27.7116567],[85.3027319,27.7116451]]]},"properties":{"osm_id":517164155,"version":1,"tags":{"building":"yes"},"changeset":51291427,"timestamp":"2017-08-21T06:14:27"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3001301,27.7121801],[85.3002783,27.7121801],[85.3002783,27.7122377],[85.3001301,27.7122377],[85.3001301,27.7121801]]]},"properties":{"osm_id":903449064,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045591,27.7127832],[85.3046389,27.7127429],[85.3046589,27.7128296],[85.3045899,27.7128213],[85.3045591,27.7127832]]]},"properties":{"osm_id":652709928,"version":1,"tags":{"building":"yes"},"changeset":65192900,"timestamp":"2018-12-05T09:33:43"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3028539,27.712661],[85.3028934,27.7125749],[85.3030031,27.7126144],[85.3029635,27.7127005],[85.3028539,27.712661]]]},"properties":{"osm_id":1021843710,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035194,27.7125259],[85.3035469,27.7124633],[85.3036191,27.7124881],[85.3036021,27.7125269],[85.3035852,27.7125211],[85.3035747,27.712545],[85.3035194,27.7125259]]]},"properties":{"osm_id":904487923,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3001918,27.7139563],[85.3001995,27.7138346],[85.3002569,27.7138374],[85.3002532,27.7138969],[85.300287,27.7138986],[85.3002831,27.7139608],[85.3001918,27.7139563]]]},"properties":{"osm_id":903391891,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3003782,27.7125179],[85.3005114,27.7125097],[85.3005148,27.7125525],[85.3003816,27.7125607],[85.3003782,27.7125179]]]},"properties":{"osm_id":903449061,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3015857,27.7120723],[85.3015947,27.7119577],[85.3016541,27.7119614],[85.3016451,27.7120759],[85.3015857,27.7120723]]]},"properties":{"osm_id":517188605,"version":1,"tags":{"building":"yes"},"changeset":51294215,"timestamp":"2017-08-21T08:09:08"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3041385,27.7113038],[85.3041445,27.7112442],[85.3042542,27.7112528],[85.3042482,27.7113124],[85.3041385,27.7113038]]]},"properties":{"osm_id":904487728,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036959,27.7113098],[85.3036969,27.711248],[85.3039205,27.7112507],[85.3039198,27.7112946],[85.3037648,27.7112928],[85.3037646,27.7113106],[85.3036959,27.7113098]]]},"properties":{"osm_id":904487782,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3041916,27.7120638],[85.3042147,27.7119391],[85.304295,27.7119508],[85.3042719,27.7120755],[85.3041916,27.7120638]]]},"properties":{"osm_id":904487887,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3028257,27.7121846],[85.3028452,27.7121297],[85.3029605,27.7121617],[85.302941,27.7122166],[85.3028257,27.7121846]]]},"properties":{"osm_id":1021843696,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045008,27.7123369],[85.3045018,27.7122196],[85.3045709,27.7122201],[85.3045699,27.7123373],[85.3045008,27.7123369]]]},"properties":{"osm_id":904487848,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.303012,27.7136495],[85.3030734,27.713563],[85.3032311,27.7135696],[85.3032394,27.7136144],[85.3032864,27.7136632],[85.303012,27.7136495]]]},"properties":{"osm_id":650695848,"version":2,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3009026,27.7136951],[85.3010068,27.7136595],[85.3010253,27.7137018],[85.3009211,27.7137375],[85.3009026,27.7136951]]]},"properties":{"osm_id":650689636,"version":2,"tags":{"building":"yes"},"changeset":98822994,"timestamp":"2021-02-06T17:33:55"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3011317,27.7133653],[85.301283,27.7133533],[85.3012888,27.7134112],[85.3011375,27.7134231],[85.3011317,27.7133653]]]},"properties":{"osm_id":904486430,"version":1,"tags":{"building":"yes"},"changeset":98823427,"timestamp":"2021-02-06T17:45:10"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3005041,27.7126465],[85.300626,27.7126253],[85.3006512,27.7127393],[85.3005293,27.7127605],[85.3005041,27.7126465]]]},"properties":{"osm_id":904340069,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3022869,27.7137875],[85.3023231,27.7137845],[85.3023282,27.7138328],[85.302292,27.7138358],[85.3022869,27.7137875]]]},"properties":{"osm_id":906837497,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3016564,27.712617],[85.3016664,27.7125473],[85.3017802,27.7125602],[85.3017702,27.7126298],[85.3017348,27.7126258],[85.3017325,27.7126413],[85.3016852,27.7126359],[85.3016874,27.7126205],[85.3016564,27.712617]]]},"properties":{"osm_id":904340006,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3018541,27.7126711],[85.3018612,27.7126217],[85.3019278,27.7126292],[85.3019207,27.7126786],[85.3018541,27.7126711]]]},"properties":{"osm_id":904343897,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3015089,27.7122581],[85.301516,27.7121698],[85.3015723,27.7121733],[85.3015652,27.7122617],[85.3015089,27.7122581]]]},"properties":{"osm_id":206850582,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:29"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.303053,27.7127919],[85.3030816,27.7127319],[85.3032064,27.7127784],[85.3031778,27.7128385],[85.303053,27.7127919]]]},"properties":{"osm_id":220996444,"version":6,"tags":{"oid":"3","source":"OpenDRI survey","building":"school","operator":"Surena English Boarding School","retrofit":"no","roof:shape":"flat","shape:plan":"rectangular","start_date":"1990-2000","column:size":"9x9","occupant:day":"55","roof:material":"concrete","building:bay:x":"3","building:bay:y":"2","floor:material":"concrete","occupant:night":"10","building:levels":"4","shape:elevation":"setback","occupant:evening":"10","occupant:morning":"10","building:overhang":"yes","building:adjacency":"free_standing","building:ownership":"rent","building:structure":"non_engineered_reinforced_concrete","physical_condition":"poor","seismic_resistance":"no","building:soft_storey":"no"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3028424,27.7111615],[85.302855,27.7110967],[85.3031905,27.7111478],[85.3031779,27.7112126],[85.3028424,27.7111615]]]},"properties":{"osm_id":650958392,"version":2,"tags":{"building":"yes"},"changeset":98823006,"timestamp":"2021-02-06T17:34:17"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3041551,27.7110672],[85.3041564,27.7109467],[85.3042768,27.7109477],[85.3042755,27.7110683],[85.3041551,27.7110672]]]},"properties":{"osm_id":1023916783,"version":1,"tags":{"building":"yes"},"changeset":116494744,"timestamp":"2022-01-23T11:19:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034493,27.7131422],[85.3034923,27.7130657],[85.3036114,27.7131182],[85.3035685,27.7131947],[85.3034493,27.7131422]]]},"properties":{"osm_id":652739833,"version":1,"tags":{"building":"yes"},"changeset":65195379,"timestamp":"2018-12-05T10:27:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.303285,27.711171],[85.3034044,27.711171],[85.3034044,27.7112458],[85.303285,27.7112458],[85.303285,27.711171]]]},"properties":{"osm_id":904487779,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3031111,27.7124578],[85.3031231,27.712418],[85.3032285,27.7124463],[85.3032127,27.712487],[85.3031111,27.7124578]]]},"properties":{"osm_id":517164202,"version":1,"tags":{"building":"yes"},"changeset":51291427,"timestamp":"2017-08-21T06:14:29"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3047053,27.7124029],[85.3047523,27.7123873],[85.3047704,27.71243],[85.3047234,27.7124456],[85.3047053,27.7124029]]]},"properties":{"osm_id":904487825,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3017709,27.7110977],[85.3017761,27.7110695],[85.3018025,27.7110733],[85.3018147,27.7110074],[85.3018677,27.7110151],[85.3018503,27.7111092],[85.3017709,27.7110977]]]},"properties":{"osm_id":523998372,"version":1,"tags":{"building":"residential","building:levels":"3"},"changeset":51963685,"timestamp":"2017-09-12T07:52:46"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3011519,27.7131863],[85.3012579,27.7131844],[85.3012593,27.7132509],[85.3011535,27.7132528],[85.3011519,27.7131863]]]},"properties":{"osm_id":348055717,"version":1,"tags":{"source":"nextview","building":"yes"},"changeset":31432916,"timestamp":"2015-05-25T00:51:01"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3027821,27.7129494],[85.3028159,27.7128836],[85.3028907,27.7129137],[85.3028571,27.7129794],[85.3027821,27.7129494]]]},"properties":{"osm_id":650695851,"version":7,"tags":{"source":"METEOR Kathmandu Field Survey 2019","building":"residential","roof:shape":"flat","building:age":"post_2000","roof:material":"concrete","building:levels":"3","capacity:persons":"10to19","building:adjacency":"attached","building:condition":"good","building:lateral:system":"moment_resisting_frame","building:geological_site":"flat_land","building:lateral:material":"concrete_reinforced","building:levels:underground":"none"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012114,27.7134881],[85.301269,27.7134848],[85.3012773,27.713598],[85.3012454,27.7135998],[85.3012421,27.7135541],[85.3012164,27.7135556],[85.3012114,27.7134881]]]},"properties":{"osm_id":906837525,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035976,27.7115931],[85.303625,27.7114975],[85.3036853,27.7115111],[85.3036579,27.7116067],[85.3035976,27.7115931]]]},"properties":{"osm_id":904487793,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3017863,27.7121294],[85.3017946,27.7120738],[85.3018997,27.7120861],[85.3018915,27.7121416],[85.3017863,27.7121294]]]},"properties":{"osm_id":904343866,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3007272,27.7133111],[85.3007827,27.7132918],[85.3008124,27.713359],[85.3007571,27.7133783],[85.3007272,27.7133111]]]},"properties":{"osm_id":650689644,"version":1,"tags":{"building":"yes"},"changeset":65014251,"timestamp":"2018-11-29T15:35:05"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.300689,27.7114333],[85.3006956,27.711393],[85.3007205,27.7113962],[85.3007139,27.7114366],[85.300689,27.7114333]]]},"properties":{"osm_id":904340059,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036458,27.7135246],[85.3036916,27.7135007],[85.3037837,27.7136389],[85.303738,27.7136628],[85.3036458,27.7135246]]]},"properties":{"osm_id":652739867,"version":4,"tags":{"source":"METEOR Kathmandu Field Survey 2019","building":"mixed_use","roof:shape":"flat","building:age":"pre_2000","roof:material":"concrete","building:levels":"4","capacity:persons":"20to49","building:adjacency":"attached","building:condition":"average","building:lateral:system":"moment_resisting_frame","building:geological_site":"flat_land","building:lateral:material":"concrete_reinforced","building:levels:underground":"none"},"changeset":67673600,"timestamp":"2019-03-01T05:51:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3041507,27.7126361],[85.304194,27.7125524],[85.304236,27.7125694],[85.3041928,27.7126531],[85.3041507,27.7126361]]]},"properties":{"osm_id":904487839,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036867,27.712458],[85.3037196,27.7123737],[85.3038071,27.7124004],[85.3037742,27.7124847],[85.3036867,27.712458]]]},"properties":{"osm_id":904487919,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3040303,27.7136088],[85.3040625,27.7136043],[85.3040534,27.7135524],[85.3040955,27.7135466],[85.3041143,27.7136532],[85.304073,27.7136589],[85.3040714,27.7136494],[85.3040382,27.713654],[85.3040303,27.7136088]]]},"properties":{"osm_id":904675366,"version":1,"tags":{"building":"yes"},"changeset":98844599,"timestamp":"2021-02-07T10:36:13"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3004292,27.7111181],[85.3004706,27.7111129],[85.3004813,27.71118],[85.3004399,27.7111852],[85.3004292,27.7111181]]]},"properties":{"osm_id":903448943,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3026963,27.713146],[85.3027114,27.7130918],[85.3027955,27.7131101],[85.3027805,27.7131642],[85.3026963,27.713146]]]},"properties":{"osm_id":650695850,"version":2,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034876,27.7126064],[85.3035211,27.7125429],[85.3035907,27.7125717],[85.3035572,27.7126352],[85.3034876,27.7126064]]]},"properties":{"osm_id":904487883,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3040213,27.7109371],[85.3041091,27.7109265],[85.3041185,27.7109876],[85.3040307,27.7109982],[85.3040213,27.7109371]]]},"properties":{"osm_id":904487737,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3005016,27.7133757],[85.3005689,27.7133617],[85.3005613,27.7133328],[85.3006116,27.7133224],[85.3006323,27.7134005],[85.3005147,27.713425],[85.3005016,27.7133757]]]},"properties":{"osm_id":903391870,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3037987,27.7124639],[85.3038235,27.7123665],[85.3039455,27.7123909],[85.3039207,27.7124883],[85.3037987,27.7124639]]]},"properties":{"osm_id":904487880,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3011997,27.712488],[85.3012019,27.7124278],[85.3012822,27.7124299],[85.30128,27.7124901],[85.3011997,27.712488]]]},"properties":{"osm_id":206850529,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:25"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043409,27.7137055],[85.3044945,27.7136982],[85.304497,27.7137389],[85.3044332,27.7137419],[85.304434,27.7137552],[85.3043442,27.7137595],[85.3043409,27.7137055]]]},"properties":{"osm_id":904680515,"version":1,"tags":{"building":"yes"},"changeset":98845253,"timestamp":"2021-02-07T10:55:43"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3041805,27.7137248],[85.3042449,27.7137179],[85.304257,27.7138064],[85.3041926,27.7138133],[85.3041805,27.7137248]]]},"properties":{"osm_id":1021579991,"version":1,"tags":{"building":"yes"},"changeset":116205383,"timestamp":"2022-01-16T08:06:07"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042545,27.7137134],[85.3043278,27.7137082],[85.3043365,27.7138034],[85.3042632,27.7138087],[85.3042545,27.7137134]]]},"properties":{"osm_id":1021579990,"version":1,"tags":{"building":"yes"},"changeset":116205383,"timestamp":"2022-01-16T08:06:07"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042729,27.7133586],[85.3043454,27.7133409],[85.3043688,27.7134157],[85.3042963,27.7134334],[85.3042729,27.7133586]]]},"properties":{"osm_id":652709955,"version":1,"tags":{"building":"yes"},"changeset":65192900,"timestamp":"2018-12-05T09:33:43"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043002,27.713449],[85.3043701,27.7134258],[85.3044005,27.7134971],[85.3043305,27.7135204],[85.3043002,27.713449]]]},"properties":{"osm_id":652709958,"version":1,"tags":{"building":"yes"},"changeset":65192900,"timestamp":"2018-12-05T09:33:43"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3041957,27.7134318],[85.304213,27.7134263],[85.3042081,27.7134143],[85.3042548,27.7133994],[85.3042597,27.7134115],[85.304278,27.7134057],[85.3043097,27.7135113],[85.3042295,27.7135316],[85.3041957,27.7134318]]]},"properties":{"osm_id":348055962,"version":2,"tags":{"source":"nextview","building":"yes"},"changeset":98844525,"timestamp":"2021-02-07T10:33:55"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042386,27.713558],[85.3043223,27.7135352],[85.3043597,27.7136448],[85.3042973,27.7136618],[85.3042901,27.7136433],[85.3042735,27.7136484],[85.3042386,27.713558]]]},"properties":{"osm_id":348055810,"version":2,"tags":{"source":"nextview","building":"yes"},"changeset":98844482,"timestamp":"2021-02-07T10:32:42"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045936,27.7135869],[85.3046758,27.7135589],[85.304698,27.71361],[85.3046158,27.713638],[85.3045936,27.7135869]]]},"properties":{"osm_id":348055956,"version":3,"tags":{"source":"nextview","building":"yes"},"changeset":126176351,"timestamp":"2022-09-14T11:15:52"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045624,27.7135158],[85.3046477,27.7134879],[85.3046725,27.7135473],[85.3045873,27.7135752],[85.3045624,27.7135158]]]},"properties":{"osm_id":904673045,"version":1,"tags":{"building":"yes"},"changeset":98844462,"timestamp":"2021-02-07T10:31:51"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3044581,27.7133245],[85.3045221,27.7133009],[85.3045464,27.7133527],[85.3045762,27.7133577],[85.3045936,27.7133904],[85.3045044,27.7134232],[85.3044581,27.7133245]]]},"properties":{"osm_id":904675904,"version":1,"tags":{"building":"yes"},"changeset":98844712,"timestamp":"2021-02-07T10:39:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043845,27.7132091],[85.3044774,27.7131888],[85.3044851,27.7131871],[85.3045002,27.7132409],[85.3045132,27.7132381],[85.304527,27.7132872],[85.3043956,27.7133114],[85.3043846,27.7132719],[85.3044009,27.7132683],[85.3043845,27.7132091]]]},"properties":{"osm_id":652709949,"version":2,"tags":{"building":"yes"},"changeset":98844712,"timestamp":"2021-02-07T10:39:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3044666,27.7129216],[85.3044682,27.7128665],[85.3046191,27.71287],[85.3046174,27.7129251],[85.3044666,27.7129216]]]},"properties":{"osm_id":906854973,"version":1,"tags":{"building":"yes"},"changeset":99221407,"timestamp":"2021-02-13T16:59:30"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042631,27.7138247],[85.3043629,27.7138114],[85.304379,27.7139052],[85.3042791,27.7139186],[85.3042631,27.7138247]]]},"properties":{"osm_id":906854978,"version":1,"tags":{"building":"yes"},"changeset":99221407,"timestamp":"2021-02-13T16:59:30"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010289,27.71206],[85.301115,27.7120551],[85.3011223,27.7121546],[85.3010361,27.7121596],[85.3010289,27.71206]]]},"properties":{"osm_id":206850525,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:24"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3004479,27.7138049],[85.3004497,27.713767],[85.3005753,27.7137717],[85.3005736,27.7138096],[85.3004479,27.7138049]]]},"properties":{"osm_id":903391887,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.304097,27.7117994],[85.3041088,27.7117387],[85.304229,27.711757],[85.3042172,27.7118177],[85.304097,27.7117994]]]},"properties":{"osm_id":904487579,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038889,27.7111772],[85.3038898,27.7111332],[85.303985,27.7111346],[85.3039841,27.7111787],[85.3038889,27.7111772]]]},"properties":{"osm_id":1023831202,"version":1,"tags":{"building":"yes"},"changeset":116487981,"timestamp":"2022-01-23T06:01:36"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3039472,27.7113081],[85.3041038,27.7113081],[85.3041038,27.7113624],[85.3039472,27.7113624],[85.3039472,27.7113081]]]},"properties":{"osm_id":1023831200,"version":1,"tags":{"building":"yes"},"changeset":116487981,"timestamp":"2022-01-23T06:01:36"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3039903,27.7112056],[85.3039906,27.7111629],[85.3040456,27.7111632],[85.3040453,27.7112059],[85.3039903,27.7112056]]]},"properties":{"osm_id":1023831197,"version":1,"tags":{"building":"yes"},"changeset":116487981,"timestamp":"2022-01-23T06:01:36"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043893,27.7113933],[85.3043962,27.7112778],[85.3045016,27.7112827],[85.3044947,27.7113982],[85.3043893,27.7113933]]]},"properties":{"osm_id":904487726,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045129,27.7114042],[85.3045145,27.7113274],[85.3046044,27.7113289],[85.3046027,27.7114057],[85.3045129,27.7114042]]]},"properties":{"osm_id":1023916786,"version":1,"tags":{"building":"yes"},"changeset":116494744,"timestamp":"2022-01-23T11:19:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3046094,27.7113084],[85.3046774,27.711308],[85.3046781,27.7113917],[85.3046101,27.7113921],[85.3046094,27.7113084]]]},"properties":{"osm_id":904487599,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3044277,27.7111],[85.3044565,27.7110998],[85.3045189,27.7110992],[85.30452,27.7111981],[85.3044576,27.7111987],[85.3044288,27.711199],[85.3044277,27.7111]]]},"properties":{"osm_id":904487733,"version":2,"tags":{"building":"yes"},"changeset":116494744,"timestamp":"2022-01-23T11:19:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042488,27.71115],[85.3042527,27.7110778],[85.3043941,27.7110837],[85.3043903,27.711156],[85.3042488,27.71115]]]},"properties":{"osm_id":1023916785,"version":1,"tags":{"building":"yes"},"changeset":116494744,"timestamp":"2022-01-23T11:19:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.304454,27.7109618],[85.3044838,27.7109514],[85.3044891,27.7109632],[85.3045035,27.7109581],[85.3045481,27.7110577],[85.3045039,27.7110732],[85.304454,27.7109618]]]},"properties":{"osm_id":653342444,"version":8,"tags":{"fixme":"building are not at real location","source":"METEOR Kathmandu Field Survey 2019","building":"residential","roof:shape":"flat","building:age":"pre_2000","roof:material":"concrete","building:levels":"3","capacity:persons":"10to19","building:adjacency":"attached","building:condition":"average","building:lateral:system":"masonry_wall","building:geological_site":"slopy_land","building:lateral:material":"brick","building:levels:underground":"none"},"changeset":98778924,"timestamp":"2021-02-05T16:11:22"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3046873,27.7112983],[85.3046883,27.7112128],[85.3047638,27.7112134],[85.3047628,27.7112989],[85.3046873,27.7112983]]]},"properties":{"osm_id":904487723,"version":2,"tags":{"building":"yes"},"changeset":116528570,"timestamp":"2022-01-24T07:48:08"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3046909,27.7114461],[85.3047368,27.7114461],[85.3047368,27.7114995],[85.3046909,27.7114995],[85.3046909,27.7114461]]]},"properties":{"osm_id":904487601,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3046848,27.7115105],[85.3047489,27.71151],[85.3047495,27.711572],[85.3046855,27.7115726],[85.3046848,27.7115105]]]},"properties":{"osm_id":904487602,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3046845,27.7115856],[85.3047261,27.711585],[85.3047266,27.7116171],[85.3047594,27.7116166],[85.30476,27.7116508],[85.3046856,27.7116518],[85.3046845,27.7115856]]]},"properties":{"osm_id":904487603,"version":2,"tags":{"building":"yes"},"changeset":99055014,"timestamp":"2021-02-10T16:50:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045909,27.7117899],[85.3046963,27.711789],[85.3046972,27.7118699],[85.3045918,27.7118708],[85.3045909,27.7117899]]]},"properties":{"osm_id":904487591,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042311,27.711811],[85.3042354,27.7117632],[85.3042388,27.7117246],[85.3042967,27.7117287],[85.304295,27.711748],[85.3043318,27.7117506],[85.3043258,27.7118176],[85.3042825,27.7118146],[85.3042311,27.711811]]]},"properties":{"osm_id":904487580,"version":3,"tags":{"building":"yes"},"changeset":116493360,"timestamp":"2022-01-23T10:39:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045118,27.7116398],[85.304515,27.7115466],[85.304591,27.7115487],[85.3045906,27.7115614],[85.3045877,27.711642],[85.3045118,27.7116398]]]},"properties":{"osm_id":904598370,"version":2,"tags":{"building":"yes"},"changeset":116493360,"timestamp":"2022-01-23T10:39:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.303912,27.7109584],[85.3040072,27.7109528],[85.3040152,27.7110584],[85.3039201,27.7110641],[85.303912,27.7109584]]]},"properties":{"osm_id":904487742,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045992,27.712458],[85.3046933,27.7124154],[85.304715,27.712453],[85.3046342,27.7124896],[85.3046209,27.7124956],[85.3045992,27.712458]]]},"properties":{"osm_id":904487827,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3044401,27.7124957],[85.3045568,27.712453],[85.3045776,27.7124975],[85.3044609,27.7125402],[85.3044401,27.7124957]]]},"properties":{"osm_id":904487836,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.304594,27.7119985],[85.3045987,27.7119018],[85.3046863,27.7119051],[85.3046816,27.7120019],[85.304594,27.7119985]]]},"properties":{"osm_id":904487857,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3040897,27.7122573],[85.3041092,27.7121659],[85.3041972,27.7121806],[85.3041777,27.712272],[85.3040897,27.7122573]]]},"properties":{"osm_id":904487863,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3046117,27.7114342],[85.3046446,27.7114338],[85.3046441,27.7114073],[85.3046827,27.7114068],[85.3046842,27.7114878],[85.3046503,27.7114883],[85.3046498,27.7114628],[85.3046123,27.7114634],[85.3046117,27.7114342]]]},"properties":{"osm_id":904487598,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3041185,27.7111968],[85.3041202,27.7111659],[85.3042125,27.7111698],[85.3042108,27.7112007],[85.3041185,27.7111968]]]},"properties":{"osm_id":904487744,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3013117,27.7114761],[85.3013231,27.7114269],[85.3014615,27.7114521],[85.3014502,27.7115013],[85.3013117,27.7114761]]]},"properties":{"osm_id":517171759,"version":2,"tags":{"building":"residential","building:levels":"4"},"changeset":51963685,"timestamp":"2017-09-12T07:52:49"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3020872,27.7110027],[85.3020943,27.7109526],[85.3021939,27.7109636],[85.3021868,27.7110137],[85.3020872,27.7110027]]]},"properties":{"osm_id":523992682,"version":1,"tags":{"building":"residential","building:levels":"5"},"changeset":51963054,"timestamp":"2017-09-12T07:29:18"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3013495,27.7125877],[85.3013629,27.7124994],[85.3014402,27.7125086],[85.3014268,27.7125969],[85.3013495,27.7125877]]]},"properties":{"osm_id":206850558,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:27"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.303121,27.7129172],[85.3031525,27.7128546],[85.3031796,27.7128652],[85.3031909,27.7128426],[85.3032318,27.7128586],[85.303189,27.7129438],[85.303121,27.7129172]]]},"properties":{"osm_id":220996443,"version":7,"tags":{"oid":"1","source":"OpenDRI survey","building":"school","operator":"Surena English Boarding School","retrofit":"no","roof:shape":"flat","shape:plan":"rectangular","start_date":"1990-2000","column:size":"9x9","occupant:day":"75","roof:material":"concrete","building:bay:x":"3","building:bay:y":"2","floor:material":"concrete","occupant:night":"10","building:levels":"4","shape:elevation":"setback","occupant:evening":"10","occupant:morning":"10","building:overhang":"yes","building:adjacency":"one_side_different_height","building:ownership":"rent","building:structure":"non_engineered_reinforced_concrete","physical_condition":"average","seismic_resistance":"no","building:soft_storey":"no"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3028484,27.7109816],[85.302865,27.7108931],[85.3031669,27.7109374],[85.3031504,27.7110259],[85.3028484,27.7109816]]]},"properties":{"osm_id":906251415,"version":1,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.301397,27.7112412],[85.3014085,27.7111917],[85.3015576,27.711219],[85.301546,27.7112685],[85.301397,27.7112412]]]},"properties":{"osm_id":523998373,"version":2,"tags":{"building":"residential","building:levels":"5"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3039201,27.713743],[85.3040025,27.7137343],[85.3040133,27.7138134],[85.3039308,27.7138221],[85.3039201,27.713743]]]},"properties":{"osm_id":904680478,"version":1,"tags":{"building":"yes"},"changeset":98845226,"timestamp":"2021-02-07T10:55:05"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036559,27.7136952],[85.3037161,27.7136651],[85.3037628,27.7137383],[85.3037026,27.7137684],[85.3036559,27.7136952]]]},"properties":{"osm_id":904678126,"version":1,"tags":{"building":"yes"},"changeset":98844885,"timestamp":"2021-02-07T10:44:56"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038284,27.7135111],[85.3038951,27.7134841],[85.3039367,27.7135646],[85.30387,27.7135916],[85.3038284,27.7135111]]]},"properties":{"osm_id":904763643,"version":1,"tags":{"building":"yes"},"changeset":98856929,"timestamp":"2021-02-07T16:50:38"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036751,27.7131181],[85.3036913,27.713093],[85.3036985,27.7130965],[85.3037241,27.7130565],[85.3037691,27.7130792],[85.3037274,27.7131444],[85.3036751,27.7131181]]]},"properties":{"osm_id":906854974,"version":1,"tags":{"building":"yes"},"changeset":99221407,"timestamp":"2021-02-13T16:59:30"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3037482,27.7132444],[85.3038126,27.7131708],[85.3038605,27.7132049],[85.3037908,27.7132731],[85.3037482,27.7132444]]]},"properties":{"osm_id":1052028379,"version":1,"tags":{"building":"yes"},"changeset":119745095,"timestamp":"2022-04-15T10:20:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038854,27.7132747],[85.3039479,27.713214],[85.3040048,27.7132747],[85.3039954,27.7132977],[85.3040185,27.7133164],[85.3039815,27.7133523],[85.3038854,27.7132747]]]},"properties":{"osm_id":652709963,"version":3,"tags":{"building":"yes"},"changeset":99221407,"timestamp":"2021-02-13T16:59:30"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3031572,27.7131686],[85.3032066,27.7130837],[85.3032873,27.7131205],[85.3032592,27.7131687],[85.3032107,27.7131466],[85.3031894,27.7131833],[85.3031572,27.7131686]]]},"properties":{"osm_id":906837513,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034948,27.7130545],[85.3035323,27.7129979],[85.3036047,27.7130355],[85.30359,27.7130576],[85.303619,27.7130727],[85.3035962,27.7131072],[85.3034948,27.7130545]]]},"properties":{"osm_id":652739826,"version":4,"tags":{"building":"yes"},"changeset":116246317,"timestamp":"2022-01-17T10:01:53"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034336,27.7129058],[85.3034668,27.7128619],[85.3035305,27.7128996],[85.3034973,27.7129435],[85.3034336,27.7129058]]]},"properties":{"osm_id":1021894177,"version":1,"tags":{"building":"yes"},"changeset":116246317,"timestamp":"2022-01-17T10:01:53"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.302981,27.7130891],[85.3030296,27.7130009],[85.3031256,27.7130426],[85.3031047,27.7130803],[85.3031303,27.7130914],[85.3031024,27.7131417],[85.302981,27.7130891]]]},"properties":{"osm_id":348055477,"version":7,"tags":{"source":"METEOR Kathmandu Field Survey 2019","building":"residential","roof:shape":"flat","building:age":"pre_2000","roof:material":"concrete","building:levels":"3","capacity:persons":"10to19","building:adjacency":"attached","building:condition":"average","building:lateral:system":"masonry_wall","building:geological_site":"flat_land","building:lateral:material":"brick","building:levels:underground":"none"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3029503,27.713235],[85.3030183,27.7131243],[85.3030584,27.7131436],[85.3029904,27.7132543],[85.3029503,27.713235]]]},"properties":{"osm_id":906837520,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3027714,27.7136068],[85.3027997,27.7135159],[85.3029452,27.7135514],[85.3029169,27.7136423],[85.3027714,27.7136068]]]},"properties":{"osm_id":302368016,"version":2,"tags":{"building":"yes"},"changeset":65015047,"timestamp":"2018-11-29T15:56:09"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034964,27.7133774],[85.3035495,27.7133063],[85.3036251,27.7133505],[85.303572,27.7134216],[85.3034964,27.7133774]]]},"properties":{"osm_id":652739836,"version":1,"tags":{"building":"yes"},"changeset":65195379,"timestamp":"2018-12-05T10:27:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036242,27.7136532],[85.3036775,27.7136228],[85.3037054,27.7136613],[85.3036521,27.7136917],[85.3036242,27.7136532]]]},"properties":{"osm_id":652739865,"version":1,"tags":{"building":"yes"},"changeset":65195379,"timestamp":"2018-12-05T10:27:49"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035873,27.7138068],[85.3036875,27.7137892],[85.3037087,27.7138837],[85.3036196,27.7138994],[85.3036097,27.7138553],[85.3035986,27.7138572],[85.3035873,27.7138068]]]},"properties":{"osm_id":348055795,"version":2,"tags":{"source":"nextview","building":"yes"},"changeset":98852312,"timestamp":"2021-02-07T14:42:09"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.303291,27.7138171],[85.3033903,27.7137966],[85.3034482,27.713859],[85.3034169,27.7138813],[85.303291,27.7138171]]]},"properties":{"osm_id":220996986,"version":4,"tags":{"oid":"1","source":"OpenDRI survey","building":"school","operator":"Academy of Sacred Hearts","retrofit":"no","roof:shape":"flat","shape:plan":"rectangular","start_date":"1990-2000","occupant:day":"25","roof:material":"metal","building:bay:x":"2","building:bay:y":"1","floor:material":"wood","occupant:night":"0","building:levels":"1","shape:elevation":"regular","occupant:evening":"0","occupant:morning":"0","building:overhang":"no","building:adjacency":"one_side_different_height","building:ownership":"rent","building:structure":"load_bearing_brick_wall_in_cement_mortar;load_bearing_brick_wall_in_mud_mortar","physical_condition":"poor","seismic_resistance":"no","building:soft_storey":"no"},"changeset":98844836,"timestamp":"2021-02-07T10:43:26"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3024351,27.7138118],[85.3025189,27.7138023],[85.3025246,27.7138417],[85.3024408,27.7138512],[85.3024351,27.7138118]]]},"properties":{"osm_id":906837494,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014956,27.713551],[85.3014973,27.713465],[85.3016874,27.713468],[85.3016856,27.713554],[85.3014956,27.713551]]]},"properties":{"osm_id":343496568,"version":1,"tags":{"building":"yes"},"changeset":30879005,"timestamp":"2015-05-07T17:00:39"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014279,27.7138755],[85.3014425,27.7137977],[85.3015131,27.7138081],[85.3014985,27.7138859],[85.3014279,27.7138755]]]},"properties":{"osm_id":650689608,"version":2,"tags":{"building":"yes"},"changeset":98822994,"timestamp":"2021-02-06T17:33:55"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3039513,27.7128438],[85.3040265,27.7127038],[85.3041072,27.7127378],[85.3040319,27.7128778],[85.3039513,27.7128438]]]},"properties":{"osm_id":652739797,"version":3,"tags":{"building":"yes"},"changeset":98856929,"timestamp":"2021-02-07T16:50:38"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012731,27.7134799],[85.3013128,27.7134764],[85.3013214,27.7135535],[85.3012818,27.713557],[85.3012731,27.7134799]]]},"properties":{"osm_id":906837524,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3017554,27.7109625],[85.3017623,27.7109127],[85.3018476,27.7109217],[85.3018416,27.7109694],[85.3017554,27.7109625]]]},"properties":{"osm_id":523992681,"version":2,"tags":{"building":"residential","building:levels":"2"},"changeset":98823006,"timestamp":"2021-02-06T17:34:17"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3017821,27.7114134],[85.3017958,27.7113443],[85.3018793,27.7113572],[85.3018771,27.711368],[85.3019128,27.7113735],[85.3019013,27.7114318],[85.3017821,27.7114134]]]},"properties":{"osm_id":523998384,"version":2,"tags":{"building":"residential","building:levels":"5"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3017251,27.7116112],[85.3017315,27.7115692],[85.3019356,27.7115934],[85.3019293,27.7116355],[85.3017251,27.7116112]]]},"properties":{"osm_id":517501166,"version":1,"tags":{"building":"yes"},"changeset":51325058,"timestamp":"2017-08-22T05:23:26"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3020063,27.7115833],[85.302037,27.7113177],[85.3021483,27.7113278],[85.3021277,27.7115064],[85.3020498,27.7114993],[85.3020397,27.7115863],[85.3020063,27.7115833]]]},"properties":{"osm_id":906251424,"version":1,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3018496,27.7119725],[85.301859,27.7119161],[85.3018825,27.7119191],[85.3019059,27.7117772],[85.3019769,27.7117863],[85.3019442,27.7119847],[85.3018496,27.7119725]]]},"properties":{"osm_id":904343868,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3015558,27.7115121],[85.3015746,27.7114342],[85.3016362,27.7114459],[85.3016174,27.7115238],[85.3015558,27.7115121]]]},"properties":{"osm_id":523998380,"version":2,"tags":{"building":"residential","building:levels":"4"},"changeset":98823006,"timestamp":"2021-02-06T17:34:17"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012804,27.7115777],[85.301296,27.7114936],[85.3015076,27.7115243],[85.3014975,27.7115793],[85.301377,27.7115618],[85.3013716,27.711591],[85.3012804,27.7115777]]]},"properties":{"osm_id":517501167,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014052,27.7119882],[85.3014091,27.7119354],[85.3014971,27.7119406],[85.3014931,27.7119933],[85.3014052,27.7119882]]]},"properties":{"osm_id":517188599,"version":1,"tags":{"building":"yes"},"changeset":51294215,"timestamp":"2017-08-21T08:09:08"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3018832,27.7123002],[85.3019064,27.7121994],[85.3020065,27.7122175],[85.3019833,27.7123183],[85.3018832,27.7123002]]]},"properties":{"osm_id":517188593,"version":2,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035888,27.7119575],[85.3035975,27.7119249],[85.3036953,27.7119453],[85.3036866,27.711978],[85.3035888,27.7119575]]]},"properties":{"osm_id":904487906,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034057,27.7121012],[85.3034507,27.7120021],[85.3035734,27.7120456],[85.3035442,27.71211],[85.3035092,27.7120976],[85.3034935,27.7121323],[85.3034057,27.7121012]]]},"properties":{"osm_id":904487913,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034309,27.7127662],[85.3034499,27.7127365],[85.3034762,27.7127498],[85.3034888,27.7127302],[85.3035955,27.712784],[85.3035638,27.7128332],[85.3034309,27.7127662]]]},"properties":{"osm_id":652739813,"version":2,"tags":{"building":"yes"},"changeset":98842368,"timestamp":"2021-02-07T09:19:15"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.303219,27.7124862],[85.303253,27.7124032],[85.3033076,27.7124207],[85.3032736,27.7125038],[85.303219,27.7124862]]]},"properties":{"osm_id":904343839,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3033204,27.7110989],[85.3033226,27.7110638],[85.3034151,27.7110683],[85.303413,27.7111034],[85.3033204,27.7110989]]]},"properties":{"osm_id":1023831195,"version":1,"tags":{"building":"yes"},"changeset":116487981,"timestamp":"2022-01-23T06:01:36"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3013949,27.7110027],[85.301414,27.7109316],[85.3014652,27.7109424],[85.301446,27.7110135],[85.3013949,27.7110027]]]},"properties":{"osm_id":650958371,"version":1,"tags":{"building":"yes"},"changeset":65035690,"timestamp":"2018-11-30T08:22:09"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012669,27.7116562],[85.3012759,27.7116051],[85.301664,27.7116583],[85.3016567,27.7116997],[85.3016144,27.7116939],[85.3016127,27.7117036],[85.3012669,27.7116562]]]},"properties":{"osm_id":517501164,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.304062,27.7111589],[85.3040663,27.7110962],[85.3041085,27.7110985],[85.3041041,27.7111612],[85.304062,27.7111589]]]},"properties":{"osm_id":904487745,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038339,27.7114598],[85.3038392,27.7113957],[85.3038637,27.7113973],[85.3038584,27.7114614],[85.3038339,27.7114598]]]},"properties":{"osm_id":904487770,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3037213,27.7116295],[85.3037404,27.7115654],[85.30382,27.711584],[85.3038008,27.7116481],[85.3037213,27.7116295]]]},"properties":{"osm_id":904487791,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3029448,27.7135159],[85.3030167,27.7134303],[85.3031078,27.7134903],[85.3030358,27.7135759],[85.3029448,27.7135159]]]},"properties":{"osm_id":340977405,"version":13,"tags":{"source":"METEOR Kathmandu Field Survey 2019","building":"public","roof:shape":"flat","building:age":"pre_2000","damage:event":"nepal_earthquake_2015","idp:camp_site":"spontaneous_camp","roof:material":"concrete","building:levels":"3","capacity:persons":"10to19","building:adjacency":"attached","building:condition":"good","idp:source_20150427":"Pleiades, CNES, Airbus DS","idp:status_20150427":"new","building:lateral:system":"moment_resisting_frame","building:geological_site":"flat_land","building:lateral:material":"concrete_reinforced","building:levels:underground":"none"},"changeset":67673600,"timestamp":"2019-03-01T05:47:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3032847,27.7129762],[85.3033323,27.7128916],[85.303384,27.7129144],[85.3033364,27.712999],[85.3032847,27.7129762]]]},"properties":{"osm_id":906837508,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3038884,27.7136022],[85.3039787,27.7135731],[85.3040154,27.7136623],[85.3039402,27.7136865],[85.303924,27.7136472],[85.3039089,27.7136521],[85.3038884,27.7136022]]]},"properties":{"osm_id":904677927,"version":1,"tags":{"building":"yes"},"changeset":98844836,"timestamp":"2021-02-07T10:43:26"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3040361,27.7126996],[85.3040595,27.7126337],[85.3041305,27.7126535],[85.304107,27.7127194],[85.3040361,27.7126996]]]},"properties":{"osm_id":904487867,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035477,27.7124514],[85.3035826,27.7123618],[85.30368,27.7123915],[85.3036451,27.7124811],[85.3035477,27.7124514]]]},"properties":{"osm_id":904487918,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3018875,27.7125033],[85.3018994,27.7124283],[85.3019415,27.7124336],[85.3019296,27.7125086],[85.3018875,27.7125033]]]},"properties":{"osm_id":904343895,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036616,27.7116118],[85.30368,27.7115495],[85.3037361,27.7115625],[85.3037177,27.7116248],[85.3036616,27.7116118]]]},"properties":{"osm_id":904487792,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036954,27.7118234],[85.3037196,27.711726],[85.3037679,27.7117354],[85.303748,27.7118157],[85.3037348,27.7118131],[85.3037305,27.7118302],[85.3036954,27.7118234]]]},"properties":{"osm_id":904487897,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014,27.7120468],[85.3014021,27.7119946],[85.3014973,27.7119975],[85.3014953,27.7120497],[85.3014,27.7120468]]]},"properties":{"osm_id":206850570,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.301326,27.7133296],[85.3014153,27.7133277],[85.3014175,27.713409],[85.3013283,27.713411],[85.301326,27.7133296]]]},"properties":{"osm_id":348055488,"version":1,"tags":{"source":"nextview","building":"yes"},"changeset":31432884,"timestamp":"2015-05-25T00:48:21"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3019599,27.7119352],[85.3019721,27.7118624],[85.3020707,27.7118753],[85.3020584,27.7119481],[85.3019599,27.7119352]]]},"properties":{"osm_id":206850586,"version":3,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3029575,27.7122095],[85.3029773,27.7121564],[85.3031295,27.7122009],[85.3031097,27.712254],[85.3029575,27.7122095]]]},"properties":{"osm_id":1021843695,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.301858,27.7111132],[85.301874,27.7110238],[85.3020228,27.7110447],[85.3020067,27.7111342],[85.301858,27.7111132]]]},"properties":{"osm_id":517169782,"version":2,"tags":{"building":"residential","building:levels":"3"},"changeset":51963685,"timestamp":"2017-09-12T07:52:49"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3029554,27.7119199],[85.3029802,27.7118255],[85.3031908,27.7118689],[85.303166,27.7119633],[85.3029554,27.7119199]]]},"properties":{"osm_id":906251421,"version":1,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036572,27.7117972],[85.3036793,27.7116999],[85.3037145,27.7117062],[85.3036924,27.7118035],[85.3036572,27.7117972]]]},"properties":{"osm_id":904487898,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3046489,27.7127429],[85.3047294,27.7127121],[85.3047761,27.712811],[85.304775,27.7128569],[85.3046677,27.7128498],[85.3046489,27.7127429]]]},"properties":{"osm_id":302546443,"version":1,"tags":{"building":"yes"},"changeset":25321748,"timestamp":"2014-09-09T07:00:01"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3046122,27.7131105],[85.3046987,27.7131008],[85.3047213,27.7132581],[85.3046348,27.7132679],[85.3046122,27.7131105]]]},"properties":{"osm_id":652709935,"version":2,"tags":{"building":"yes"},"changeset":99609125,"timestamp":"2021-02-19T17:12:01"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3031211,27.7124076],[85.3031385,27.7123556],[85.3032505,27.7123849],[85.3032331,27.712437],[85.3031211,27.7124076]]]},"properties":{"osm_id":1021843692,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3028073,27.7128697],[85.3028315,27.7128208],[85.3029063,27.7128499],[85.302882,27.7128987],[85.3028073,27.7128697]]]},"properties":{"osm_id":906837505,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3029879,27.7127066],[85.3030221,27.7126303],[85.303107,27.7126601],[85.3030728,27.7127364],[85.3029879,27.7127066]]]},"properties":{"osm_id":1021843686,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034688,27.7126899],[85.3035009,27.712635],[85.3036007,27.7126808],[85.3035685,27.7127357],[85.3034688,27.7126899]]]},"properties":{"osm_id":1021846128,"version":1,"tags":{"building":"yes"},"changeset":116239593,"timestamp":"2022-01-17T06:53:12"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.304097,27.7125225],[85.3041185,27.7124204],[85.3041662,27.7124283],[85.3042187,27.7124369],[85.3041973,27.7125391],[85.304097,27.7125225]]]},"properties":{"osm_id":904487870,"version":2,"tags":{"building":"yes"},"changeset":116239593,"timestamp":"2022-01-17T06:53:12"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036467,27.7128044],[85.3036968,27.7127413],[85.3037574,27.712779],[85.3037073,27.7128421],[85.3036467,27.7128044]]]},"properties":{"osm_id":652739804,"version":2,"tags":{"building":"yes"},"changeset":98842368,"timestamp":"2021-02-07T09:19:15"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3044518,27.7125909],[85.3045013,27.7125638],[85.3045777,27.712673],[85.3045283,27.7127001],[85.3044518,27.7125909]]]},"properties":{"osm_id":904487835,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045594,27.712452],[85.3045641,27.7124019],[85.3046466,27.7124013],[85.3046483,27.7124304],[85.3045594,27.712452]]]},"properties":{"osm_id":904487828,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3044992,27.7118189],[85.3045024,27.7117317],[85.3045774,27.7117339],[85.304576,27.7117692],[85.3045741,27.7118211],[85.3044992,27.7118189]]]},"properties":{"osm_id":904487587,"version":2,"tags":{"building":"yes"},"changeset":116493360,"timestamp":"2022-01-23T10:39:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3045004,27.7117222],[85.3045008,27.7116794],[85.3045806,27.7116799],[85.3045803,27.7117226],[85.3045004,27.7117222]]]},"properties":{"osm_id":904487586,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3044471,27.7116198],[85.3044481,27.7115895],[85.3044492,27.711559],[85.3045085,27.7115607],[85.3045074,27.7115911],[85.3045064,27.7116214],[85.3044471,27.7116198]]]},"properties":{"osm_id":904598368,"version":2,"tags":{"building":"yes"},"changeset":116493360,"timestamp":"2022-01-23T10:39:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3044193,27.7115491],[85.3044212,27.7114959],[85.3044994,27.7114981],[85.3044975,27.7115513],[85.3044193,27.7115491]]]},"properties":{"osm_id":904598367,"version":1,"tags":{"building":"yes"},"changeset":98834565,"timestamp":"2021-02-06T23:50:12"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3030812,27.7115852],[85.3031087,27.7115016],[85.3033112,27.7115539],[85.3032837,27.7116374],[85.3030812,27.7115852]]]},"properties":{"osm_id":1022785527,"version":1,"tags":{"building":"yes"},"changeset":116371852,"timestamp":"2022-01-20T07:35:50"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043494,27.7129899],[85.3044459,27.7129745],[85.3044619,27.713053],[85.3043654,27.7130684],[85.3043494,27.7129899]]]},"properties":{"osm_id":904728643,"version":1,"tags":{"building":"yes"},"changeset":98852312,"timestamp":"2021-02-07T14:42:09"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3016048,27.713426],[85.3016353,27.7132805],[85.3017561,27.7133004],[85.3017255,27.7134457],[85.3016048,27.713426]]]},"properties":{"osm_id":499067059,"version":1,"tags":{"building":"yes"},"changeset":49366624,"timestamp":"2017-06-08T12:44:43"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3006751,27.7136384],[85.3007972,27.713621],[85.3008078,27.7136792],[85.3006857,27.7136966],[85.3006751,27.7136384]]]},"properties":{"osm_id":650689647,"version":1,"tags":{"building":"yes"},"changeset":65014251,"timestamp":"2018-11-29T15:35:05"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3004987,27.7130139],[85.3006369,27.7129646],[85.3006592,27.7130136],[85.300521,27.7130629],[85.3004987,27.7130139]]]},"properties":{"osm_id":903398655,"version":1,"tags":{"building":"yes"},"changeset":98646913,"timestamp":"2021-02-03T13:19:09"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3002363,27.7130775],[85.3002525,27.7130395],[85.3003662,27.7130774],[85.30035,27.7131154],[85.3002363,27.7130775]]]},"properties":{"osm_id":903391878,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3037944,27.7139358],[85.3039128,27.7139164],[85.3039183,27.7139425],[85.303933,27.7139402],[85.3039423,27.7139851],[85.3038091,27.7140067],[85.3037944,27.7139358]]]},"properties":{"osm_id":652739875,"version":2,"tags":{"building":"yes"},"changeset":98844942,"timestamp":"2021-02-07T10:46:41"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.303777,27.7138552],[85.3038839,27.7138361],[85.3039013,27.713912],[85.3037943,27.7139312],[85.303777,27.7138552]]]},"properties":{"osm_id":904678588,"version":1,"tags":{"building":"yes"},"changeset":98844965,"timestamp":"2021-02-07T10:47:33"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3016848,27.7110793],[85.3017052,27.7109884],[85.3017491,27.7109961],[85.3017382,27.7110448],[85.3017677,27.71105],[85.3017582,27.7110922],[85.3016848,27.7110793]]]},"properties":{"osm_id":523998371,"version":2,"tags":{"building":"residential","building:levels":"1"},"changeset":98823006,"timestamp":"2021-02-06T17:34:17"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.301888,27.7112676],[85.3019138,27.7111628],[85.3019764,27.7111749],[85.3019506,27.7112797],[85.301888,27.7112676]]]},"properties":{"osm_id":206850522,"version":4,"tags":{"building":"residential","building:levels":"2"},"changeset":98823006,"timestamp":"2021-02-06T17:34:17"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3018098,27.7112641],[85.3018337,27.7111482],[85.3019032,27.7111594],[85.301881,27.7112669],[85.3018515,27.7112622],[85.3018497,27.7112705],[85.3018098,27.7112641]]]},"properties":{"osm_id":906251425,"version":1,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3015081,27.7115749],[85.301517,27.7115265],[85.3016378,27.7115441],[85.3016289,27.7115925],[85.3015081,27.7115749]]]},"properties":{"osm_id":904343863,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.301486,27.7114903],[85.3014975,27.7114217],[85.3015559,27.7114294],[85.3015443,27.7114981],[85.301486,27.7114903]]]},"properties":{"osm_id":906251423,"version":1,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010949,27.711678],[85.3011051,27.7115783],[85.3012314,27.7115885],[85.301227,27.7116312],[85.3012469,27.7116328],[85.3012411,27.7116898],[85.3010949,27.711678]]]},"properties":{"osm_id":206850500,"version":2,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3012309,27.7127356],[85.3012971,27.7127297],[85.3012913,27.7126785],[85.3013456,27.7126736],[85.3013553,27.712759],[85.3013002,27.712764],[85.3013013,27.7127736],[85.3012359,27.7127795],[85.3012309,27.7127356]]]},"properties":{"osm_id":206850497,"version":3,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3016956,27.7125318],[85.3017164,27.7124249],[85.3017684,27.7124328],[85.3017645,27.7124525],[85.3018103,27.7124595],[85.3017934,27.7125467],[85.3016956,27.7125318]]]},"properties":{"osm_id":206850543,"version":4,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3019301,27.7125197],[85.3019434,27.7124374],[85.301996,27.7124441],[85.3019827,27.7125264],[85.3019301,27.7125197]]]},"properties":{"osm_id":517188591,"version":1,"tags":{"building":"yes"},"changeset":51294215,"timestamp":"2017-08-21T08:09:08"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3025669,27.7127109],[85.3025709,27.7126516],[85.3027164,27.7126593],[85.3027124,27.7127186],[85.3025669,27.7127109]]]},"properties":{"osm_id":1021843712,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3016914,27.7119533],[85.3017008,27.7118748],[85.3017706,27.7118814],[85.3017612,27.7119599],[85.3016914,27.7119533]]]},"properties":{"osm_id":517188602,"version":1,"tags":{"building":"yes"},"changeset":51294215,"timestamp":"2017-08-21T08:09:08"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3029443,27.7123445],[85.3029635,27.7122938],[85.3031295,27.7123431],[85.3031103,27.7123938],[85.3029443,27.7123445]]]},"properties":{"osm_id":1021843691,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3027502,27.7128009],[85.3027627,27.7127505],[85.302844,27.7127662],[85.3028317,27.7128166],[85.3027502,27.7128009]]]},"properties":{"osm_id":650695849,"version":1,"tags":{"building":"yes"},"changeset":65015047,"timestamp":"2018-11-29T15:56:05"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3031541,27.7127466],[85.3031836,27.7126798],[85.3032287,27.7126954],[85.3031992,27.7127622],[85.3031541,27.7127466]]]},"properties":{"osm_id":1021843688,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035363,27.7113398],[85.3035509,27.711306],[85.3036019,27.7113232],[85.3035873,27.7113571],[85.3035363,27.7113398]]]},"properties":{"osm_id":1023831205,"version":1,"tags":{"building":"yes"},"changeset":116487981,"timestamp":"2022-01-23T06:01:36"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3033207,27.7113183],[85.3033256,27.7112781],[85.3033786,27.7112832],[85.3033737,27.7113234],[85.3033207,27.7113183]]]},"properties":{"osm_id":1023831210,"version":1,"tags":{"building":"yes"},"changeset":116487981,"timestamp":"2022-01-23T06:01:36"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3028943,27.7124904],[85.3029115,27.7124301],[85.3030121,27.7124526],[85.3029949,27.712513],[85.3028943,27.7124904]]]},"properties":{"osm_id":1021843704,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3003044,27.7109561],[85.3003831,27.7109469],[85.3003979,27.711046],[85.3003192,27.7110552],[85.3003044,27.7109561]]]},"properties":{"osm_id":903448937,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3008771,27.7111484],[85.3009133,27.7111122],[85.3009947,27.711176],[85.3009585,27.7112122],[85.3008771,27.7111484]]]},"properties":{"osm_id":650958364,"version":1,"tags":{"building":"yes"},"changeset":65035690,"timestamp":"2018-11-30T08:22:09"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.300758,27.7114492],[85.3007674,27.7113919],[85.3008505,27.7114026],[85.3008411,27.7114599],[85.300758,27.7114492]]]},"properties":{"osm_id":650958363,"version":1,"tags":{"building":"yes"},"changeset":65035690,"timestamp":"2018-11-30T08:22:09"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3016629,27.7121278],[85.3016692,27.7120815],[85.3017213,27.712087],[85.3017151,27.7121334],[85.3016629,27.7121278]]]},"properties":{"osm_id":517188595,"version":1,"tags":{"building":"yes"},"changeset":51294215,"timestamp":"2017-08-21T08:09:08"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014779,27.7127649],[85.3014846,27.7127094],[85.3016006,27.7127205],[85.3015939,27.7127759],[85.3014779,27.7127649]]]},"properties":{"osm_id":906837521,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3008525,27.7125066],[85.3008557,27.7124352],[85.3009482,27.7124384],[85.300945,27.7125098],[85.3008525,27.7125066]]]},"properties":{"osm_id":206850597,"version":2,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.300972,27.712496],[85.3009748,27.7124435],[85.3010289,27.7124458],[85.3010261,27.7124982],[85.300972,27.712496]]]},"properties":{"osm_id":904340067,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3005472,27.7112891],[85.3005995,27.711285],[85.3006069,27.711358],[85.3005546,27.7113621],[85.3005472,27.7112891]]]},"properties":{"osm_id":903448951,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3005103,27.7115675],[85.3005521,27.7115654],[85.3005568,27.7116381],[85.300515,27.7116402],[85.3005103,27.7115675]]]},"properties":{"osm_id":903449052,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3033756,27.7125646],[85.3034125,27.7124916],[85.303509,27.7125298],[85.3034721,27.7126028],[85.3033756,27.7125646]]]},"properties":{"osm_id":904487885,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3037625,27.7122354],[85.3037786,27.7121742],[85.3039155,27.7122025],[85.3038994,27.7122636],[85.3037625,27.7122354]]]},"properties":{"osm_id":904487886,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3003246,27.7132517],[85.3003702,27.7131531],[85.3004443,27.71318],[85.3003987,27.7132785],[85.3003246,27.7132517]]]},"properties":{"osm_id":903391872,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3018257,27.7113018],[85.3018327,27.7112811],[85.301937,27.7113035],[85.3019288,27.7113241],[85.3018257,27.7113018]]]},"properties":{"osm_id":523998386,"version":1,"tags":{"building":"residential","building:levels":"1"},"changeset":51963685,"timestamp":"2017-09-12T07:52:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3001402,27.7112689],[85.3002523,27.7112534],[85.300259,27.7112914],[85.3001469,27.7113069],[85.3001402,27.7112689]]]},"properties":{"osm_id":903448948,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3036129,27.7122538],[85.3036558,27.7121392],[85.3037584,27.7121693],[85.3037155,27.7122839],[85.3036129,27.7122538]]]},"properties":{"osm_id":904487917,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3042322,27.7116248],[85.3042413,27.7115542],[85.304292,27.7115593],[85.3042887,27.711585],[85.304342,27.7115904],[85.3043363,27.7116353],[85.3042322,27.7116248]]]},"properties":{"osm_id":904487575,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3043546,27.7116328],[85.3043557,27.7116029],[85.304357,27.7115658],[85.3044287,27.7115678],[85.3044274,27.7116049],[85.3044263,27.7116348],[85.3043546,27.7116328]]]},"properties":{"osm_id":904598361,"version":2,"tags":{"building":"yes"},"changeset":116493360,"timestamp":"2022-01-23T10:39:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3019826,27.7118623],[85.3019957,27.7117844],[85.3020828,27.7117959],[85.3020697,27.7118737],[85.3019826,27.7118623]]]},"properties":{"osm_id":904343871,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3008077,27.7116516],[85.3008372,27.7115672],[85.3009532,27.711599],[85.3009236,27.7116833],[85.3008077,27.7116516]]]},"properties":{"osm_id":206855679,"version":2,"tags":{"building":"yes"},"changeset":15138196,"timestamp":"2013-02-23T17:21:09"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014575,27.712244],[85.3014651,27.7121718],[85.3015105,27.7121756],[85.3015029,27.7122477],[85.3014575,27.712244]]]},"properties":{"osm_id":904343880,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3025927,27.7122051],[85.3026246,27.7121059],[85.3027895,27.7121475],[85.3027576,27.7122467],[85.3025927,27.7122051]]]},"properties":{"osm_id":1021843697,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3032743,27.7114891],[85.3032951,27.7114013],[85.3032988,27.7113858],[85.3033698,27.7113989],[85.3033454,27.7115023],[85.3032743,27.7114891]]]},"properties":{"osm_id":904487798,"version":2,"tags":{"building":"yes"},"changeset":116377715,"timestamp":"2022-01-20T10:04:29"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3033793,27.7113144],[85.303386,27.7112751],[85.303446,27.7112832],[85.3034393,27.7113224],[85.3033793,27.7113144]]]},"properties":{"osm_id":1023831211,"version":1,"tags":{"building":"yes"},"changeset":116487981,"timestamp":"2022-01-23T06:01:36"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.303568,27.7117818],[85.3035942,27.7116714],[85.3036733,27.7116861],[85.3036471,27.7117965],[85.303568,27.7117818]]]},"properties":{"osm_id":904487899,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3006979,27.7110033],[85.3007678,27.710963],[85.3007737,27.710971],[85.3008073,27.7109517],[85.3009029,27.7110815],[85.3008879,27.7110902],[85.3008957,27.7111008],[85.3008639,27.7111191],[85.3008561,27.7111085],[85.3008232,27.7111275],[85.3007614,27.7110434],[85.3007375,27.7110571],[85.3006979,27.7110033]]]},"properties":{"osm_id":341766534,"version":3,"tags":{"building":"house"},"changeset":129585046,"timestamp":"2022-12-01T04:42:03"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.30097,27.7113621],[85.3009969,27.7113002],[85.3009761,27.7112931],[85.3009877,27.7112662],[85.3010732,27.7112953],[85.3010346,27.7113841],[85.30097,27.7113621]]]},"properties":{"osm_id":341766533,"version":1,"tags":{"building":"house"},"changeset":30656324,"timestamp":"2015-04-30T11:23:15"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3015252,27.7112075],[85.3015462,27.7111228],[85.3015851,27.7111304],[85.301564,27.711215],[85.3015252,27.7112075]]]},"properties":{"osm_id":206850539,"version":3,"tags":{"building":"residential","building:levels":"3"},"changeset":98823006,"timestamp":"2021-02-06T17:34:17"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3016277,27.7112197],[85.301642,27.7111463],[85.3016696,27.7111506],[85.3016744,27.7111256],[85.301734,27.7111348],[85.3017148,27.711233],[85.3016277,27.7112197]]]},"properties":{"osm_id":517169784,"version":3,"tags":{"building":"residential","building:levels":"4"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3014594,27.7110455],[85.3014884,27.7109447],[85.3015884,27.7109651],[85.3015609,27.7110649],[85.3014594,27.7110455]]]},"properties":{"osm_id":206850521,"version":3,"tags":{"building":"residential","building:levels":"3"},"changeset":98823006,"timestamp":"2021-02-06T17:34:17"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3013367,27.7119022],[85.3013457,27.7118221],[85.3014162,27.7118284],[85.3014071,27.7119084],[85.3013367,27.7119022]]]},"properties":{"osm_id":206850528,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.304482,27.7121089],[85.304486,27.7120744],[85.3045677,27.7120819],[85.3045636,27.7121164],[85.304482,27.7121089]]]},"properties":{"osm_id":904487852,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3037229,27.7119552],[85.3037333,27.7119071],[85.3037768,27.7119144],[85.3037664,27.7119625],[85.3037229,27.7119552]]]},"properties":{"osm_id":904487904,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3017233,27.7120811],[85.3017349,27.7119831],[85.3018075,27.7119899],[85.301798,27.7120703],[85.3017838,27.712069],[85.3017817,27.7120866],[85.3017233,27.7120811]]]},"properties":{"osm_id":517188604,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3001583,27.7113301],[85.3002411,27.711318],[85.3002545,27.7113905],[85.3001717,27.7114025],[85.3001583,27.7113301]]]},"properties":{"osm_id":903448955,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3004982,27.7130842],[85.300576,27.7130824],[85.3005794,27.713194],[85.3005016,27.7131959],[85.3004982,27.7130842]]]},"properties":{"osm_id":903391874,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3007453,27.7125624],[85.300797,27.7125557],[85.3008193,27.7126901],[85.3007676,27.7126968],[85.3007453,27.7125624]]]},"properties":{"osm_id":206850574,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:28"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3009393,27.7120459],[85.300992,27.7120406],[85.3009934,27.7120517],[85.3010013,27.7120509],[85.3010155,27.7121609],[85.3009549,27.712167],[85.3009393,27.7120459]]]},"properties":{"osm_id":650958381,"version":2,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010655,27.7126889],[85.3011105,27.7126853],[85.3011125,27.7127047],[85.3011787,27.7126993],[85.3011837,27.7127482],[85.3010726,27.7127572],[85.3010655,27.7126889]]]},"properties":{"osm_id":904340066,"version":1,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3003381,27.7123268],[85.3003617,27.7123264],[85.3003625,27.7123635],[85.3003856,27.7123631],[85.3003869,27.7124317],[85.3003656,27.712432],[85.3003663,27.7124642],[85.3003409,27.7124646],[85.3003381,27.7123268]]]},"properties":{"osm_id":903449062,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3008885,27.7131677],[85.3010112,27.7131632],[85.301014,27.7132216],[85.3008912,27.7132261],[85.3008885,27.7131677]]]},"properties":{"osm_id":650689626,"version":1,"tags":{"building":"yes"},"changeset":65014251,"timestamp":"2018-11-29T15:35:05"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3011457,27.7134957],[85.3011999,27.7134914],[85.3012065,27.7135557],[85.3011522,27.7135601],[85.3011457,27.7134957]]]},"properties":{"osm_id":906837526,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010204,27.7130847],[85.3011085,27.7130814],[85.3011155,27.7132298],[85.3010274,27.713233],[85.3010204,27.7130847]]]},"properties":{"osm_id":650689632,"version":2,"tags":{"building":"yes"},"changeset":98824445,"timestamp":"2021-02-06T18:15:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3005797,27.7137248],[85.300661,27.7136971],[85.3006696,27.7137196],[85.3006712,27.7137191],[85.300691,27.7137981],[85.300631,27.713809],[85.3006149,27.713764],[85.3005797,27.7137248]]]},"properties":{"osm_id":650689655,"version":2,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3004624,27.7135274],[85.3005425,27.71351],[85.3005666,27.7135973],[85.3004865,27.7136147],[85.3004624,27.7135274]]]},"properties":{"osm_id":903391869,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3007028,27.7132528],[85.3007537,27.7132374],[85.3007742,27.7132903],[85.3007232,27.7133058],[85.3007028,27.7132528]]]},"properties":{"osm_id":906837527,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3005978,27.7124351],[85.3006036,27.7123503],[85.3006583,27.7123532],[85.3006525,27.712438],[85.3005978,27.7124351]]]},"properties":{"osm_id":206862103,"version":1,"tags":{"building":"yes"},"changeset":15138051,"timestamp":"2013-02-23T17:02:32"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3000899,27.7118705],[85.3001605,27.7118693],[85.3001598,27.7118394],[85.3001999,27.7118387],[85.3001983,27.7117668],[85.3002772,27.7117654],[85.3002785,27.7118231],[85.3003079,27.7118225],[85.3003114,27.7119819],[85.3003139,27.7120924],[85.300297,27.7120927],[85.3002977,27.7121217],[85.3002096,27.7121233],[85.3002089,27.7120951],[85.3001964,27.7120954],[85.3001935,27.7119666],[85.3001672,27.711967],[85.3001457,27.7119674],[85.3001451,27.7119374],[85.3000914,27.7119384],[85.3000899,27.7118705]]]},"properties":{"osm_id":206080956,"version":5,"tags":{"name":"Old Wing","building":"hotel"},"changeset":98655409,"timestamp":"2021-02-03T16:15:12"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.300588,27.7115828],[85.3005915,27.7115424],[85.3006899,27.711549],[85.3006866,27.711587],[85.3007048,27.7115882],[85.3007009,27.711633],[85.3005987,27.7116261],[85.3006023,27.7115837],[85.300588,27.7115828]]]},"properties":{"osm_id":206855680,"version":3,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3003341,27.7111163],[85.3004101,27.7111018],[85.3004278,27.7111743],[85.3004362,27.711209],[85.3003604,27.7112236],[85.3003341,27.7111163]]]},"properties":{"osm_id":903448944,"version":2,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3004738,27.7110912],[85.3005616,27.7110749],[85.3005819,27.7111606],[85.3004941,27.7111769],[85.3004738,27.7110912]]]},"properties":{"osm_id":903448941,"version":2,"tags":{"building":"yes"},"changeset":99124278,"timestamp":"2021-02-11T17:21:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3001361,27.7112054],[85.3002503,27.7111956],[85.3002564,27.7112508],[85.3001422,27.7112606],[85.3001361,27.7112054]]]},"properties":{"osm_id":903448947,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3011018,27.7117395],[85.3011058,27.7116896],[85.3011998,27.7116955],[85.3011958,27.7117454],[85.3011018,27.7117395]]]},"properties":{"osm_id":206850530,"version":1,"tags":{"building":"yes"},"changeset":15136949,"timestamp":"2013-02-23T15:46:25"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3004513,27.7111983],[85.3005906,27.7111736],[85.3006087,27.7112537],[85.3004694,27.7112784],[85.3004513,27.7111983]]]},"properties":{"osm_id":903448949,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3000777,27.7138041],[85.3000886,27.7137588],[85.3001188,27.7137645],[85.300132,27.7137097],[85.3001663,27.7137162],[85.3001421,27.7138163],[85.3000777,27.7138041]]]},"properties":{"osm_id":224469080,"version":3,"tags":{"building":"school","operator":"Gitamata Higher Secondary School"},"changeset":98646913,"timestamp":"2021-02-03T13:19:09"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3009317,27.7118623],[85.3009524,27.7117569],[85.3010264,27.7117683],[85.3010163,27.7118195],[85.3010263,27.711821],[85.3010157,27.7118752],[85.3009317,27.7118623]]]},"properties":{"osm_id":650958382,"version":2,"tags":{"building":"yes"},"changeset":98799717,"timestamp":"2021-02-06T03:39:54"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3002018,27.7131662],[85.300231,27.7131027],[85.3003492,27.7131452],[85.30032,27.7132087],[85.3002018,27.7131662]]]},"properties":{"osm_id":903391879,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3001656,27.712807],[85.3002836,27.7128064],[85.300285,27.7130207],[85.300167,27.7130213],[85.3001656,27.712807]]]},"properties":{"osm_id":903391877,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3001211,27.7111573],[85.3001604,27.7111539],[85.3001587,27.7111378],[85.3002542,27.7111296],[85.3002602,27.7111841],[85.3001253,27.7111957],[85.3001211,27.7111573]]]},"properties":{"osm_id":903448946,"version":1,"tags":{"building":"yes"},"changeset":98655409,"timestamp":"2021-02-03T16:15:11"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3037469,27.7133899],[85.3038124,27.7133519],[85.3038754,27.713437],[85.3038099,27.713475],[85.3037469,27.7133899]]]},"properties":{"osm_id":652709967,"version":5,"tags":{"source":"METEOR Kathmandu Field Survey 2019","building":"mixed_use","roof:shape":"complex_regular","building:age":"pre_2000","roof:material":"mixed","building:levels":"3","capacity:persons":"10to19","building:adjacency":"attached","building:condition":"good","building:lateral:system":"moment_resisting_frame","building:geological_site":"flat_land","building:lateral:material":"concrete_reinforced","building:levels:underground":"none"},"changeset":67673600,"timestamp":"2019-03-01T05:51:45"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3018066,27.7120703],[85.3018215,27.7119945],[85.3019208,27.7120097],[85.3019059,27.7120856],[85.3018066,27.7120703]]]},"properties":{"osm_id":517171763,"version":1,"tags":{"building":"yes"},"changeset":51292352,"timestamp":"2017-08-21T06:57:04"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3032039,27.7128189],[85.3032337,27.7127514],[85.3033745,27.7128001],[85.3033447,27.7128676],[85.3032039,27.7128189]]]},"properties":{"osm_id":906837511,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3015275,27.7128836],[85.3015309,27.7128076],[85.3015984,27.71281],[85.3015951,27.7128859],[85.3015275,27.7128836]]]},"properties":{"osm_id":906837523,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.301781,27.7126034],[85.301787,27.7125618],[85.3019396,27.7125791],[85.3019336,27.7126207],[85.301781,27.7126034]]]},"properties":{"osm_id":904343896,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3037395,27.7136663],[85.3037836,27.7136474],[85.3038195,27.7137239],[85.3037747,27.7137404],[85.3037395,27.7136663]]]},"properties":{"osm_id":904678125,"version":1,"tags":{"building":"yes"},"changeset":98844885,"timestamp":"2021-02-07T10:44:56"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034003,27.7131284],[85.303449,27.7130442],[85.3034879,27.7130619],[85.3034392,27.713146],[85.3034003,27.7131284]]]},"properties":{"osm_id":652739821,"version":2,"tags":{"building":"yes"},"changeset":98856929,"timestamp":"2021-02-07T16:50:38"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035787,27.7130062],[85.303622,27.7129427],[85.3037202,27.7129952],[85.3036769,27.7130587],[85.3035787,27.7130062]]]},"properties":{"osm_id":1021894175,"version":1,"tags":{"building":"yes"},"changeset":116246317,"timestamp":"2022-01-17T10:01:53"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034963,27.712975],[85.3035429,27.7129047],[85.3036116,27.7129404],[85.303565,27.7130107],[85.3034963,27.712975]]]},"properties":{"osm_id":1021894176,"version":1,"tags":{"building":"yes"},"changeset":116246317,"timestamp":"2022-01-17T10:01:53"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.302699,27.7132677],[85.3027103,27.713225],[85.3028075,27.7132452],[85.3027962,27.7132879],[85.302699,27.7132677]]]},"properties":{"osm_id":906837514,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3026607,27.7133551],[85.3026774,27.713273],[85.3027671,27.7132874],[85.3027583,27.7133302],[85.3027478,27.7133285],[85.3027398,27.7133677],[85.3026607,27.7133551]]]},"properties":{"osm_id":906837517,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035188,27.7135896],[85.3035652,27.7135611],[85.303625,27.7136372],[85.3035786,27.7136658],[85.3035188,27.7135896]]]},"properties":{"osm_id":652739862,"version":1,"tags":{"building":"yes"},"changeset":65195379,"timestamp":"2018-12-05T10:27:48"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3035459,27.7137841],[85.3036231,27.7137273],[85.3035838,27.7136686],[85.3036177,27.713653],[85.303655,27.7137064],[85.3036867,27.7137681],[85.3035548,27.713799],[85.3035459,27.7137841]]]},"properties":{"osm_id":904678124,"version":1,"tags":{"building":"yes"},"changeset":98844885,"timestamp":"2021-02-07T10:44:56"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034112,27.7136748],[85.303465,27.7136372],[85.3035712,27.713756],[85.3035175,27.7137936],[85.3034112,27.7136748]]]},"properties":{"osm_id":652739860,"version":1,"tags":{"building":"yes"},"changeset":65195379,"timestamp":"2018-12-05T10:27:48"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3015412,27.7130145],[85.3015517,27.7129029],[85.3017355,27.7129166],[85.301725,27.7130282],[85.3015412,27.7130145]]]},"properties":{"osm_id":904486427,"version":1,"tags":{"building":"yes"},"changeset":98823427,"timestamp":"2021-02-06T17:45:10"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3010383,27.7135067],[85.3011341,27.7135005],[85.3011505,27.7136177],[85.3011003,27.7136137],[85.3010383,27.7135067]]]},"properties":{"osm_id":904486432,"version":2,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3011591,27.7130862],[85.3012651,27.7130851],[85.301266,27.7131515],[85.3011601,27.7131527],[85.3011591,27.7130862]]]},"properties":{"osm_id":348055718,"version":1,"tags":{"source":"nextview","building":"yes"},"changeset":31432918,"timestamp":"2015-05-25T00:51:17"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3030503,27.7134139],[85.3031803,27.713209],[85.3032169,27.7132271],[85.3032361,27.713197],[85.3032854,27.7132216],[85.3031362,27.7134566],[85.3030503,27.7134139]]]},"properties":{"osm_id":348055032,"version":7,"tags":{"source":"METEOR Kathmandu Field Survey 2019","building":"public","roof:shape":"flat","building:age":"pre_2000","roof:material":"concrete","building:levels":"3","capacity:persons":"10to19","building:adjacency":"attached","building:condition":"good","building:lateral:system":"moment_resisting_frame","building:geological_site":"flat_land","building:lateral:material":"concrete_reinforced","building:levels:underground":"none"},"changeset":67673600,"timestamp":"2019-03-01T05:48:33"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3037962,27.7127556],[85.3038383,27.7126691],[85.3039297,27.712704],[85.3038759,27.7128145],[85.3038174,27.7127922],[85.3038291,27.7127682],[85.3037962,27.7127556]]]},"properties":{"osm_id":904487875,"version":2,"tags":{"building":"yes"},"changeset":98856929,"timestamp":"2021-02-07T16:50:38"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3006307,27.7134522],[85.3006953,27.7134339],[85.3007006,27.7134487],[85.3007285,27.7134408],[85.3007618,27.7135333],[85.3006693,27.7135594],[85.3006307,27.7134522]]]},"properties":{"osm_id":343496567,"version":3,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3001609,27.7137996],[85.3001649,27.7137379],[85.3003071,27.713745],[85.3003032,27.7138066],[85.3001609,27.7137996]]]},"properties":{"osm_id":903391890,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3018329,27.7127299],[85.3018402,27.7126877],[85.3018852,27.7126938],[85.301878,27.7127361],[85.3018329,27.7127299]]]},"properties":{"osm_id":206850537,"version":2,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3025997,27.7125128],[85.3026071,27.7124235],[85.3027077,27.7124301],[85.3027003,27.7125193],[85.3025997,27.7125128]]]},"properties":{"osm_id":1021843706,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3032229,27.7126592],[85.303247,27.7126063],[85.3033018,27.712626],[85.3032777,27.7126788],[85.3032229,27.7126592]]]},"properties":{"osm_id":1021843689,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3013495,27.7122393],[85.3013589,27.7121404],[85.3014155,27.7121446],[85.3014124,27.7121773],[85.3014586,27.7121807],[85.3014523,27.7122469],[85.3013495,27.7122393]]]},"properties":{"osm_id":904343881,"version":1,"tags":{"building":"yes"},"changeset":98800172,"timestamp":"2021-02-06T04:29:02"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3005999,27.7130474],[85.3006859,27.7130468],[85.3006864,27.7130999],[85.3006003,27.7131005],[85.3005999,27.7130474]]]},"properties":{"osm_id":341460408,"version":8,"tags":{"building":"yes"},"changeset":69672853,"timestamp":"2019-04-28T19:27:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3025845,27.7129658],[85.3026117,27.7127963],[85.3027597,27.7128149],[85.3027373,27.712954],[85.3026905,27.7129481],[85.3026856,27.7129785],[85.3025845,27.7129658]]]},"properties":{"osm_id":650695852,"version":1,"tags":{"building":"yes"},"changeset":65015047,"timestamp":"2018-11-29T15:56:05"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3030564,27.7132745],[85.3031219,27.7131722],[85.3031769,27.7131999],[85.3031114,27.7133021],[85.3030564,27.7132745]]]},"properties":{"osm_id":906837516,"version":1,"tags":{"building":"yes"},"changeset":99218522,"timestamp":"2021-02-13T15:46:31"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3034446,27.7124378],[85.3034862,27.7123371],[85.3035717,27.7123648],[85.3035301,27.7124655],[85.3034446,27.7124378]]]},"properties":{"osm_id":904487924,"version":1,"tags":{"building":"yes"},"changeset":98823557,"timestamp":"2021-02-06T17:48:44"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3027101,27.7124421],[85.3027325,27.7123582],[85.3029028,27.7123939],[85.3028805,27.7124777],[85.3027101,27.7124421]]]},"properties":{"osm_id":1021843701,"version":1,"tags":{"building":"yes"},"changeset":116239259,"timestamp":"2022-01-17T06:42:06"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3033322,27.7132073],[85.3033582,27.7131614],[85.3033797,27.7131709],[85.3034007,27.7131337],[85.3035259,27.7131893],[85.3035018,27.7132319],[85.3035533,27.7132548],[85.3035304,27.7132954],[85.3033322,27.7132073]]]},"properties":{"osm_id":652739834,"version":3,"tags":{"building":"yes"},"changeset":98856929,"timestamp":"2021-02-07T16:50:38"}},{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[85.3001844,27.7135971],[85.3002193,27.7135051],[85.3003021,27.7135297],[85.3002673,27.7136217],[85.3001844,27.7135971]]]},"properties":{"osm_id":903391885,"version":1,"tags":{"building":"yes"},"changeset":98645816,"timestamp":"2021-02-03T12:54:47"}}]} \ No newline at end of file diff --git a/src/backend/tests/test_projects_routes.py b/src/backend/tests/test_projects_routes.py index c7e2ad7cab..2e9d32e47b 100644 --- a/src/backend/tests/test_projects_routes.py +++ b/src/backend/tests/test_projects_routes.py @@ -18,6 +18,7 @@ """Tests for project routes.""" import functools +import json import os import uuid from io import BytesIO @@ -25,7 +26,6 @@ import pytest import requests -import sozipfile.sozipfile as zipfile from fastapi.concurrency import run_in_threadpool from geoalchemy2.elements import WKBElement from loguru import logger as log @@ -34,6 +34,7 @@ from app.central.central_crud import create_odk_project from app.config import encrypt_value, settings from app.db import db_models +from app.db.postgis_utils import split_geojson_by_task_areas from app.projects import project_crud, project_schemas from app.tasks import tasks_crud from tests.test_data import test_data_path @@ -147,7 +148,55 @@ async def test_create_project_with_project_info(db, project): assert isinstance(project.project_name_prefix, str) -async def test_generate_appuser_files(db, project): +async def test_upload_data_extracts(client, project): + """Test uploading data extracts in GeoJSON and flatgeobuf formats.""" + # Flatgeobuf + fgb_file = { + "custom_extract_file": ( + "file.fgb", + open(f"{test_data_path}/data_extract_kathmandu.fgb", "rb"), + ) + } + response = client.post( + f"/projects/upload-custom-extract/?project_id={project.id}", + files=fgb_file, + ) + + assert response.status_code == 200 + + response = client.get( + f"/projects/data-extract-url/?project_id={project.id}", + ) + assert "url" in response.json() + + # Geojson + geojson_file = { + "custom_extract_file": ( + "file.geojson", + open(f"{test_data_path}/data_extract_kathmandu.geojson", "rb"), + ) + } + response = client.post( + f"/projects/upload-custom-extract/?project_id={project.id}", + files=geojson_file, + ) + + assert response.status_code == 200 + + response = client.get( + f"/projects/data-extract-url/?project_id={project.id}", + ) + assert "url" in response.json() + + # TODO add extra handling for custom extras not in specific format + # TODO replace properties + # TODO fix loading extracts without standard structure + # data_extracts_file = f"{test_data_path}/building_footprint.zip" + # with zipfile.ZipFile(data_extracts_file, "r") as zip_archive: + # data_extracts = zip_archive.read("building_foot_jnk.geojson") + + +async def test_generate_project_files(db, client, project): """Test generate all appuser files (during creation).""" odk_credentials = { "odk_central_url": odk_central_url, @@ -159,14 +208,41 @@ async def test_generate_appuser_files(db, project): project_id = project.id log.debug(f"Testing project ID: {project_id}") - # Load data extracts - data_extracts_file = f"{test_data_path}/building_footprint.zip" - with zipfile.ZipFile(data_extracts_file, "r") as zip_archive: - data_extracts = zip_archive.read("building_foot_jnk.geojson") + # First generate a single task from the project area + task_geojson = json.dumps( + { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [85.29998911, 27.7140080437], + [85.29998911, 27.7108923499], + [85.304783157, 27.7108923499], + [85.304783157, 27.7140080437], + [85.29998911, 27.7140080437], + ] + ], + }, + } + ).encode("utf-8") + task_geojson_file = { + "task_geojson": ( + "file.geojson", + BytesIO(task_geojson).read(), + ) + } + response = client.post( + f"/projects/{project_id}/upload-task-boundaries", + files=task_geojson_file, + ) # Upload data extracts + with open(f"{test_data_path}/data_extract_kathmandu.geojson", "rb") as f: + data_extracts = json.dumps(json.load(f)) log.debug(f"Uploading custom data extracts: {str(data_extracts)[:100]}...") - data_extract_s3_path = await project_crud.upload_custom_data_extract( + data_extract_s3_path = await project_crud.upload_custom_geojson_extract( db, project_id, data_extracts, @@ -180,7 +256,15 @@ async def test_generate_appuser_files(db, project): response = requests.head(internal_file_path, allow_redirects=True) assert response.status_code < 400 - # Get project tasks list + # Extract data extract from flatgeobuf + feature_collection = await project_crud.get_project_features_geojson(db, project) + # Split extract by task area + split_extract_dict = await split_geojson_by_task_areas( + db, feature_collection, project_id + ) + assert split_extract_dict is not None + + # Get project tasks list (no longer required) task_ids = await tasks_crud.get_task_id_list(db, project_id) assert isinstance(task_ids, list) @@ -189,7 +273,7 @@ async def test_generate_appuser_files(db, project): with open(xlsform_file, "rb") as xlsform_data: xlsform_obj = BytesIO(xlsform_data.read()) - for task_id in task_ids: + for task_id in split_extract_dict.keys(): # NOTE avoid the lambda function for run_in_threadpool # functools.partial captures the loop variable task_id in a # way that is safe for use within asynchronous code @@ -199,6 +283,7 @@ async def test_generate_appuser_files(db, project): db, project_id, task_id, + split_extract_dict[task_id], xlsform_file, "building", odk_credentials, @@ -208,7 +293,7 @@ async def test_generate_appuser_files(db, project): # Generate appuser files result = await run_in_threadpool( - lambda: project_crud.generate_appuser_files( + lambda: project_crud.generate_project_files( db, project_id, custom_form=xlsform_obj, diff --git a/src/frontend/src/api/Project.js b/src/frontend/src/api/Project.js index 60c749eac7..175c5b9413 100755 --- a/src/frontend/src/api/Project.js +++ b/src/frontend/src/api/Project.js @@ -57,6 +57,7 @@ export const ProjectById = (existingProjectList, projectId) => { tasks_validated: projectResp.tasks_validated, xform_title: projectResp.xform_title, tasks_bad: projectResp.tasks_bad, + data_extract_url: projectResp.data_extract_url, }), ); dispatch(ProjectActions.SetProjectDetialsLoading(false)); diff --git a/src/frontend/src/api/SubmissionService.ts b/src/frontend/src/api/SubmissionService.ts index 40915ce7ab..2ba55763b7 100644 --- a/src/frontend/src/api/SubmissionService.ts +++ b/src/frontend/src/api/SubmissionService.ts @@ -2,6 +2,7 @@ import CoreModules from '@/shared/CoreModules'; import { ProjectActions } from '@/store/slices/ProjectSlice'; // import { HomeProjectCardModel } from '@/models/home/homeModel'; import { SubmissionActions } from '@/store/slices/SubmissionSlice'; +import { basicGeojsonTemplate } from '@/utilities/mapUtils'; export const ProjectSubmissionService: Function = (url: string) => { return async (dispatch) => { @@ -21,24 +22,6 @@ export const ProjectSubmissionService: Function = (url: string) => { await fetchProjectSubmission(url); }; }; -export const ProjectBuildingGeojsonService: Function = (url: string) => { - return async (dispatch) => { - dispatch(ProjectActions.GetProjectBuildingGeojsonLoading(true)); - - const fetchProjectBuildingGeojson = async (url: string) => { - try { - const fetchBuildingGeojsonData = await CoreModules.axios.get(url); - const resp: any = fetchBuildingGeojsonData.data; - dispatch(ProjectActions.SetProjectBuildingGeojson(resp)); - dispatch(ProjectActions.GetProjectBuildingGeojsonLoading(false)); - } catch (error) { - dispatch(ProjectActions.GetProjectBuildingGeojsonLoading(false)); - } - }; - - await fetchProjectBuildingGeojson(url); - }; -}; export const ProjectSubmissionInfographicsService: Function = (url: string) => { return async (dispatch) => { diff --git a/src/frontend/src/components/CreateEditOrganization/validation/OrganizationDetailsValidation.ts b/src/frontend/src/components/CreateEditOrganization/validation/OrganizationDetailsValidation.ts index 9b1ad182e1..b2b2c73a74 100644 --- a/src/frontend/src/components/CreateEditOrganization/validation/OrganizationDetailsValidation.ts +++ b/src/frontend/src/components/CreateEditOrganization/validation/OrganizationDetailsValidation.ts @@ -1,3 +1,5 @@ +import { isValidUrl } from '@/utilfunctions/urlChecker'; + interface OrganisationValues { id: string; logo: string; @@ -26,15 +28,6 @@ interface ValidationErrors { fillODKCredentials?: boolean; } -function isValidUrl(url: string) { - try { - new URL(url); - return true; - } catch (error) { - return false; - } -} - function OrganizationDetailsValidation(values: OrganisationValues) { const errors: ValidationErrors = {}; diff --git a/src/frontend/src/components/MapComponent/OpenLayersComponent/Layers/VectorLayer.js b/src/frontend/src/components/MapComponent/OpenLayersComponent/Layers/VectorLayer.js index f4ef884ede..162c4f186b 100644 --- a/src/frontend/src/components/MapComponent/OpenLayersComponent/Layers/VectorLayer.js +++ b/src/frontend/src/components/MapComponent/OpenLayersComponent/Layers/VectorLayer.js @@ -13,7 +13,13 @@ import { isExtentValid } from '@/components/MapComponent/OpenLayersComponent/hel import { Draw, Modify, Snap, Select, defaults as defaultInteractions } from 'ol/interaction.js'; import { getArea } from 'ol/sphere'; import { valid } from 'geojson-validation'; +import Point from 'ol/geom/Point.js'; import MultiPoint from 'ol/geom/MultiPoint.js'; +import { buffer } from 'ol/extent'; +import { bbox as OLBbox } from 'ol/loadingstrategy'; +import { geojson as FGBGeoJson } from 'flatgeobuf'; + +import { isValidUrl } from '@/utilfunctions/urlChecker'; const selectElement = 'singleselect'; @@ -36,6 +42,8 @@ const layerViewProperties = { const VectorLayer = ({ map, geojson, + fgbUrl, + fgbExtent, style, zIndex, zoomToLayer = false, @@ -141,6 +149,89 @@ const VectorLayer = ({ }; }, [map, vectorLayer, onDraw]); + function fgbBoundingBox(originalExtent) { + // Add a 50m buffer to the bbox search + const bufferMeters = 50; + const bufferedExtent = buffer(originalExtent, bufferMeters); + + const minPoint = new Point([bufferedExtent[0], bufferedExtent[1]]); + minPoint.transform('EPSG:3857', 'EPSG:4326'); + + const maxPoint = new Point([bufferedExtent[2], bufferedExtent[3]]); + maxPoint.transform('EPSG:3857', 'EPSG:4326'); + + return { + minX: minPoint.getCoordinates()[0], + minY: minPoint.getCoordinates()[1], + maxX: maxPoint.getCoordinates()[0], + maxY: maxPoint.getCoordinates()[1], + }; + } + + function geomWithin(geom, area) { + // Only include features that intersect extent + let geomCoord; + + if (geom.getType() === 'Point') { + geomCoord = geom.getCoordinates(); + } else if (geom.getType() === 'Polygon') { + geomCoord = geom.getInteriorPoint().getCoordinates(); + } else if (geom.getType() === 'LineString') { + geomCoord = geom.getExtent(); + } + + if (area.intersectsCoordinate(geomCoord)) { + return true; + } + + return false; + } + + async function loadFgbRemote(filterExtent = true, extractGeomCol = true) { + this.clear(); + const filteredFeatures = []; + + for await (let feature of FGBGeoJson.deserialize(fgbUrl, fgbBoundingBox(fgbExtent.getExtent()))) { + if (extractGeomCol && feature.geometry.type === 'GeometryCollection') { + // Extract first geom from geomcollection + feature = { + ...feature, + geometry: feature.geometry.geometries[0], + }; + } + let extractGeom = new GeoJSON().readFeature(feature, { + dataProjection: 'EPSG:4326', + featureProjection: 'EPSG:3857', + }); + + // Clip geoms to another geometry (i.e. ST_Within) + if (filterExtent) { + if (geomWithin(extractGeom.getGeometry(), fgbExtent)) { + filteredFeatures.push(extractGeom); + } + } else { + filteredFeatures.push(extractGeom); + } + } + this.addFeatures(filteredFeatures); + } + + function triggerMapClick(feature) { + // Perform an action if a feature is found + if (feature) { + // Extract properties + const properties = feature.getProperties(); + // Remove geometry key if properties are present + // If no properties are set, the feature uid is included + if (!('uid' in properties)) { + const { geometry, ...restProperties } = properties; + mapOnClick(restProperties, feature); + return; + } + mapOnClick(properties, feature); + } + } + useEffect(() => { if (!map) return; if (!geojson) return; @@ -154,6 +245,7 @@ const VectorLayer = ({ }), declutter: true, }); + map.on('click', (evt) => { var pixel = evt.pixel; const feature = map.forEachFeatureAtPixel(pixel, function (feature, layer) { @@ -162,13 +254,9 @@ const VectorLayer = ({ } }); - // Perform an action if a feature is found - if (feature) { - // Do something with the feature - // dispatch() - mapOnClick(feature.getProperties(), feature); - } + triggerMapClick(feature); }); + setVectorLayer(vectorLyr); return () => { setVectorLayer(null); @@ -176,6 +264,38 @@ const VectorLayer = ({ }; }, [map, geojson]); + useEffect(() => { + if (!map || !fgbUrl || !isValidUrl(fgbUrl)) return; + + const vectorLyr = new OLVectorLayer({ + source: new VectorSource({ + useSpatialIndex: true, + strategy: OLBbox, + loader: loadFgbRemote, + }), + }); + + map.on('click', (evt) => { + const pixel = evt.pixel; + + const feature = map.forEachFeatureAtPixel(pixel, function (feature, layer) { + if (layer === vectorLyr) { + return feature; + } + }); + + triggerMapClick(feature); + }); + + // map.addLayer(vectorLyr); + setVectorLayer(vectorLyr); + + return () => { + setVectorLayer(null); + map.un('click', () => {}); + }; + }, [fgbUrl, fgbExtent]); + useEffect(() => { if (!map || !vectorLayer) return; if (visibleOnMap) { @@ -226,7 +346,9 @@ const VectorLayer = ({ useEffect(() => { if (!map || !vectorLayer || !zoomToLayer) return; - const extent = vectorLayer.getSource().getExtent(); + const source = vectorLayer.getSource(); + if (source.getFeatures().length === 0) return; + const extent = source.getExtent(); if (!isExtentValid(extent)) return; map.getView().fit(extent, viewProperties); }, [map, vectorLayer, zoomToLayer]); @@ -328,7 +450,24 @@ VectorLayer.defaultProps = { }; VectorLayer.propTypes = { - geojson: PropTypes.object.isRequired, + // Ensure either geojson or fgbUrl is provided + geojson: (props, propName, componentName) => { + if (!props.geojson && !props.fgbUrl) { + return new Error(`One of 'geojson' or 'fgbUrl' is required in '${componentName}'`); + } + if (props.geojson && props.fgbUrl) { + return new Error(`Only one of 'geojson' or 'fgbUrl' should be provided in '${componentName}'`); + } + }, + fgbUrl: (props, propName, componentName) => { + if (!props.geojson && !props.fgbUrl) { + return new Error(`One of 'geojson' or 'fgbUrl' is required in '${componentName}'`); + } + if (props.geojson && props.fgbUrl) { + return new Error(`Only one of 'geojson' or 'fgbUrl' should be provided in '${componentName}'`); + } + }, + fgbExtent: PropTypes.object, style: PropTypes.object, zIndex: PropTypes.number, zoomToLayer: PropTypes.bool, diff --git a/src/frontend/src/components/ProjectInfo/ProjectInfomap.jsx b/src/frontend/src/components/ProjectInfo/ProjectInfomap.jsx index d100b730b5..f2087219ce 100644 --- a/src/frontend/src/components/ProjectInfo/ProjectInfomap.jsx +++ b/src/frontend/src/components/ProjectInfo/ProjectInfomap.jsx @@ -1,3 +1,5 @@ +// TODO should this be deleted?? + import React, { useCallback, useState, useEffect } from 'react'; import CoreModules from '@/shared/CoreModules'; @@ -8,7 +10,6 @@ import { VectorLayer } from '@/components/MapComponent/OpenLayersComponent/Layer import { Vector as VectorSource } from 'ol/source'; import GeoJSON from 'ol/format/GeoJSON'; import { get } from 'ol/proj'; -import { ProjectBuildingGeojsonService } from '@/api/SubmissionService'; import environment from '@/environment'; import { getStyles } from '@/components/MapComponent/OpenLayersComponent/helpers/styleUtils'; import { ProjectActions } from '@/store/slices/ProjectSlice'; @@ -128,7 +129,7 @@ const ProjectInfomap = () => { useEffect(() => { return () => { - dispatch(ProjectActions.SetProjectBuildingGeojson(null)); + dispatch(ProjectActions.SetProjectDataExtract(null)); }; }, []); @@ -198,11 +199,11 @@ const ProjectInfomap = () => { duration: 2000, }); - dispatch( - ProjectBuildingGeojsonService( - `${import.meta.env.VITE_API_URL}/projects/${decodedId}/features?task_id=${selectedTask}`, - ), - ); + // dispatch( + // ProjectDataExtractService( + // `${import.meta.env.VITE_API_URL}/projects/${decodedId}/features?task_id=${selectedTask}`, + // ), + // ); }, [selectedTask]); const taskOnSelect = (properties, feature) => { diff --git a/src/frontend/src/components/ProjectMap/ProjectMap.jsx b/src/frontend/src/components/ProjectMap/ProjectMap.jsx deleted file mode 100644 index 84056cf1ec..0000000000 --- a/src/frontend/src/components/ProjectMap/ProjectMap.jsx +++ /dev/null @@ -1,102 +0,0 @@ -import React, { useState } from 'react'; -import CoreModules from 'fmtm/CoreModules'; -import { useOLMap } from '@/components/MapComponent/OpenLayersComponent'; -import { MapContainer as MapComponent } from '@/components/MapComponent/OpenLayersComponent'; -import LayerSwitcherControl from '@/components/MapComponent/OpenLayersComponent/LayerSwitcher/index.js'; -import { VectorLayer } from '@/components/MapComponent/OpenLayersComponent/Layers'; - -const basicGeojsonTemplate = { - type: 'FeatureCollection', - features: [], -}; -const ProjectMap = ({}) => { - const defaultTheme = CoreModules.useAppSelector((state) => state.theme.hotTheme); - const { mapRef, map } = useOLMap({ - // center: fromLonLat([85.3, 27.7]), - center: [0, 0], - zoom: 4, - maxZoom: 25, - }); - const projectTaskBoundries = CoreModules.useAppSelector((state) => state.project.projectTaskBoundries); - const projectBuildingGeojson = CoreModules.useAppSelector((state) => state.project.projectBuildingGeojson); - - const [projectBoundaries, setProjectBoundaries] = useState(null); - const [buildingBoundaries, setBuildingBoundaries] = useState(null); - - if (projectTaskBoundries?.length > 0 && projectBoundaries === null) { - const taskGeojsonFeatureCollection = { - ...basicGeojsonTemplate, - features: [ - ...projectTaskBoundries?.[0]?.taskBoundries?.map((task) => ({ - ...task.outline_geojson, - id: task.outline_geojson.properties.uid, - })), - ], - }; - setProjectBoundaries(taskGeojsonFeatureCollection); - } - if (projectBuildingGeojson?.length > 0 && buildingBoundaries === null) { - const buildingGeojsonFeatureCollection = { - ...basicGeojsonTemplate, - features: [ - ...projectBuildingGeojson?.map((building) => ({ - ...building.geometry.geometry, - id: building.id, - })), - ], - // features: projectBuildingGeojson.map((feature) => ({ ...feature.geometry, id: feature.id })) - }; - setBuildingBoundaries(buildingGeojsonFeatureCollection); - } - return ( - - -
- - - {projectBoundaries?.type && ( - - )} - {buildingBoundaries?.type && } - {/* )} */} - -
-
-
- ); -}; - -export default ProjectMap; diff --git a/src/frontend/src/components/ProjectSubmissions/SubmissionsTable.tsx b/src/frontend/src/components/ProjectSubmissions/SubmissionsTable.tsx index 12755a889b..5d95339915 100644 --- a/src/frontend/src/components/ProjectSubmissions/SubmissionsTable.tsx +++ b/src/frontend/src/components/ProjectSubmissions/SubmissionsTable.tsx @@ -15,7 +15,7 @@ import { format } from 'date-fns'; import Button from '@/components/common/Button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/common/Dropdown'; import { ConvertXMLToJOSM, getDownloadProjectSubmission, getDownloadProjectSubmissionJson } from '@/api/task'; -import { Modal } from '../common/Modal'; +import { Modal } from '@/components/common/Modal'; import { useNavigate, useSearchParams } from 'react-router-dom'; import filterParams from '@/utilfunctions/filterParams'; diff --git a/src/frontend/src/components/ProjectSubmissions/TaskSubmissionsMap.tsx b/src/frontend/src/components/ProjectSubmissions/TaskSubmissionsMap.tsx index 100aa7ef74..4ce9771dec 100644 --- a/src/frontend/src/components/ProjectSubmissions/TaskSubmissionsMap.tsx +++ b/src/frontend/src/components/ProjectSubmissions/TaskSubmissionsMap.tsx @@ -8,13 +8,13 @@ import { VectorLayer } from '@/components/MapComponent/OpenLayersComponent/Layer import { Vector as VectorSource } from 'ol/source'; import GeoJSON from 'ol/format/GeoJSON'; import { get } from 'ol/proj'; -import { ProjectBuildingGeojsonService } from '@/api/SubmissionService'; import environment from '@/environment'; import { getStyles } from '@/components/MapComponent/OpenLayersComponent/helpers/styleUtils'; import { ProjectActions } from '@/store/slices/ProjectSlice'; import { basicGeojsonTemplate } from '@/utilities/mapUtils'; import TaskSubmissionsMapLegend from '@/components/ProjectSubmissions/TaskSubmissionsMapLegend'; import Accordion from '@/components/common/Accordion'; +import { isValidUrl } from '@/utilfunctions/urlChecker'; export const defaultStyles = { lineColor: '#000000', @@ -104,7 +104,9 @@ const getChoroplethColor = (value, colorCodesOutput) => { const TaskSubmissionsMap = () => { const dispatch = CoreModules.useAppDispatch(); const [taskBoundaries, setTaskBoundaries] = useState(null); - const [buildingGeojson, setBuildingGeojson] = useState(null); + const [dataExtractUrl, setDataExtractUrl] = useState(null); + const [dataExtractExtent, setDataExtractExtent] = useState(null); + const projectInfo = CoreModules.useAppSelector((state) => state.project.projectInfo); const projectTaskBoundries = CoreModules.useAppSelector((state) => state.project.projectTaskBoundries); const taskInfo = CoreModules.useAppSelector((state) => state.task.taskInfo); @@ -113,7 +115,6 @@ const TaskSubmissionsMap = () => { count: task.submission_count, })); - const projectBuildingGeojson = CoreModules.useAppSelector((state) => state.project.projectBuildingGeojson); const selectedTask = CoreModules.useAppSelector((state) => state.task.selectedTask); const defaultTheme = CoreModules.useAppSelector((state) => state.theme.hotTheme); const params = CoreModules.useParams(); @@ -126,12 +127,6 @@ const TaskSubmissionsMap = () => { maxZoom: 25, }); - useEffect(() => { - return () => { - dispatch(ProjectActions.SetProjectBuildingGeojson(null)); - }; - }, []); - useEffect(() => { if ( !projectTaskBoundries || @@ -150,32 +145,10 @@ const TaskSubmissionsMap = () => { ], }; setTaskBoundaries(taskGeojsonFeatureCollection); - // const taskBuildingGeojsonFeatureCollection = { - // ...basicGeojsonTemplate, - // features: [ - // ...projectBuildingGeojson?.map((feature) => ({ - // ...feature.geometry, - // id: feature.id, - // })), - // ], - // }; - // setBuildingGeojson(taskBuildingGeojsonFeatureCollection); }, [projectTaskBoundries]); - useEffect(() => { - if (!projectBuildingGeojson) return; - const taskBuildingGeojsonFeatureCollection = { - ...basicGeojsonTemplate, - features: [ - ...projectBuildingGeojson?.map((feature) => ({ - ...feature.geometry, - id: feature.id, - })), - ], - }; - setBuildingGeojson(taskBuildingGeojsonFeatureCollection); - }, [projectBuildingGeojson]); useEffect(() => { + console.log(taskBoundaries); if (!taskBoundaries) return; const filteredSelectedTaskGeojson = { ...basicGeojsonTemplate, @@ -186,7 +159,11 @@ const TaskSubmissionsMap = () => { featureProjection: get('EPSG:3857'), }), }); - var extent = vectorSource.getExtent(); + const extent = vectorSource.getExtent(); + + setDataExtractExtent(vectorSource.getFeatures()[0].getGeometry()); + setDataExtractUrl(projectInfo.data_extract_url); + map.getView().fit(extent, { // easing: elastic, animate: true, @@ -197,12 +174,6 @@ const TaskSubmissionsMap = () => { constrainResolution: true, duration: 2000, }); - - dispatch( - ProjectBuildingGeojsonService( - `${import.meta.env.VITE_API_URL}/projects/${decodedId}/features?task_id=${selectedTask}`, - ), - ); }, [selectedTask]); const taskOnSelect = (properties, feature) => { @@ -258,7 +229,6 @@ const TaskSubmissionsMap = () => { {taskBoundaries && ( setChoropleth({ ...municipalStyles, lineThickness: 3 }, feature, resolution) } @@ -287,7 +257,9 @@ const TaskSubmissionsMap = () => { collapsed={true} /> - {buildingGeojson && } + {dataExtractUrl && isValidUrl(dataExtractUrl) && ( + + )} ); diff --git a/src/frontend/src/components/SubmissionMap/SubmissionMap.jsx b/src/frontend/src/components/SubmissionMap/SubmissionMap.jsx deleted file mode 100644 index 881910627c..0000000000 --- a/src/frontend/src/components/SubmissionMap/SubmissionMap.jsx +++ /dev/null @@ -1,64 +0,0 @@ -import React, { useState } from 'react'; -import useOLMap from '@/hooks/useOlMap'; -import { MapContainer as MapComponent } from '@/components/MapComponent/OpenLayersComponent'; -import LayerSwitcherControl from '@/components/MapComponent/OpenLayersComponent/LayerSwitcher/index.js'; -import { VectorLayer } from '@/components/MapComponent/OpenLayersComponent/Layers'; - -function elastic(t) { - return Math.pow(2, -10 * t) * Math.sin(((t - 0.075) * (2 * Math.PI)) / 0.3) + 1; -} - -const SubmissionMap = ({ outlineBoundary, featureGeojson }) => { - const { mapRef, map } = useOLMap({ - // center: fromLonLat([85.3, 27.7]), - center: [0, 0], - zoom: 4, - maxZoom: 25, - }); - - return ( -
- - - {outlineBoundary?.type && ( - - )} - {featureGeojson?.type && } - {/* )} */} - -
- ); -}; - -SubmissionMap.propTypes = {}; - -export default SubmissionMap; diff --git a/src/frontend/src/components/TasksMap/TasksMap.jsx b/src/frontend/src/components/TasksMap/TasksMap.jsx deleted file mode 100644 index c15b806099..0000000000 --- a/src/frontend/src/components/TasksMap/TasksMap.jsx +++ /dev/null @@ -1,67 +0,0 @@ -import React from 'react'; -import useOLMap from '@/hooks/useOlMap'; -import { MapContainer as MapComponent } from '@/components/MapComponent/OpenLayersComponent'; -import LayerSwitcherControl from '@/components/MapComponent/OpenLayersComponent/LayerSwitcher/index.js'; -import { VectorLayer } from '@/components/MapComponent/OpenLayersComponent/Layers'; - -function elastic(t) { - return Math.pow(2, -10 * t) * Math.sin(((t - 0.075) * (2 * Math.PI)) / 0.3) + 1; -} -const basicGeojsonTemplate = { - type: 'FeatureCollection', - features: [], -}; -const TasksMap = ({ projectTaskBoundries, projectBuildingGeojson }) => { - // const projectTaskBoundries = CoreModules.useAppSelector((state) => state.project.projectTaskBoundries); - // const projectBuildingGeojson = CoreModules.useAppSelector((state) => state.project.projectBuildingGeojson); - - const { mapRef, map } = useOLMap({ - // center: fromLonLat([85.3, 27.7]), - center: [0, 0], - zoom: 4, - maxZoom: 25, - }); - console.log(projectTaskBoundries, 'projectTaskBoundries'); - - return ( -
- - - {/* - */} - -
- ); -}; - -TasksMap.propTypes = {}; - -export default TasksMap; diff --git a/src/frontend/src/components/createnewproject/validation/CreateProjectValidation.tsx b/src/frontend/src/components/createnewproject/validation/CreateProjectValidation.tsx index 9f24902769..8aaa8563c4 100755 --- a/src/frontend/src/components/createnewproject/validation/CreateProjectValidation.tsx +++ b/src/frontend/src/components/createnewproject/validation/CreateProjectValidation.tsx @@ -1,3 +1,5 @@ +import { isValidUrl } from '@/utilfunctions/urlChecker'; + interface ProjectValues { organisation_id: string; name: string; @@ -26,15 +28,6 @@ interface ValidationErrors { const regexForSymbol = /_/g; -function isValidUrl(url: string) { - try { - new URL(url); - return true; - } catch (error) { - return false; - } -} - function CreateProjectValidation(values: ProjectValues) { const errors: ValidationErrors = {}; diff --git a/src/frontend/src/components/organisation/Validation/OrganisationAddValidation.tsx b/src/frontend/src/components/organisation/Validation/OrganisationAddValidation.tsx index 0d947418f4..bbd4935658 100644 --- a/src/frontend/src/components/organisation/Validation/OrganisationAddValidation.tsx +++ b/src/frontend/src/components/organisation/Validation/OrganisationAddValidation.tsx @@ -1,3 +1,5 @@ +import { isValidUrl } from '@/utilfunctions/urlChecker'; + interface OrganisationValues { logo: string; name: string; @@ -19,15 +21,6 @@ interface ValidationErrors { odk_central_password?: string; } -function isValidUrl(url: string) { - try { - new URL(url); - return true; - } catch (error) { - return false; - } -} - function OrganisationAddValidation(values: OrganisationValues) { const errors: ValidationErrors = {}; diff --git a/src/frontend/src/store/slices/ProjectSlice.ts b/src/frontend/src/store/slices/ProjectSlice.ts index 20a82bdf03..352cd1a377 100755 --- a/src/frontend/src/store/slices/ProjectSlice.ts +++ b/src/frontend/src/store/slices/ProjectSlice.ts @@ -10,8 +10,7 @@ const ProjectSlice = createSlice({ projectInfo: {}, projectSubmissionLoading: false, projectSubmission: [], - projectBuildingGeojsonLoading: false, - projectBuildingGeojson: [], + projectDataExtractLoading: false, downloadProjectFormLoading: { type: 'form', loading: false }, generateProjectTilesLoading: false, tilesList: [], @@ -48,12 +47,6 @@ const ProjectSlice = createSlice({ SetProjectSubmission(state, action) { state.projectSubmission = action.payload; }, - GetProjectBuildingGeojsonLoading(state, action) { - state.projectSubmissionLoading = action.payload; - }, - SetProjectBuildingGeojson(state, action) { - state.projectBuildingGeojson = action.payload; - }, SetDownloadProjectFormLoading(state, action) { state.downloadProjectFormLoading = action.payload; }, diff --git a/src/frontend/src/utilfunctions/urlChecker.ts b/src/frontend/src/utilfunctions/urlChecker.ts new file mode 100644 index 0000000000..ac2c705c9d --- /dev/null +++ b/src/frontend/src/utilfunctions/urlChecker.ts @@ -0,0 +1,8 @@ +export function isValidUrl(url) { + try { + new URL(url); + return true; + } catch (error) { + return false; + } +} diff --git a/src/frontend/src/views/NewProjectDetails.jsx b/src/frontend/src/views/NewProjectDetails.jsx index cffb47b8b6..e027cfdb68 100644 --- a/src/frontend/src/views/NewProjectDetails.jsx +++ b/src/frontend/src/views/NewProjectDetails.jsx @@ -7,13 +7,13 @@ import environment from '@/environment'; import { ProjectById } from '@/api/Project'; import { ProjectActions } from '@/store/slices/ProjectSlice'; import CustomizedSnackbar from '@/utilities/CustomizedSnackbar'; +import { Modal } from '@/components/common/Modal'; import OnScroll from '@/hooks/OnScroll'; import { HomeActions } from '@/store/slices/HomeSlice'; import CoreModules from '@/shared/CoreModules'; import AssetModules from '@/shared/AssetModules'; import FmtmLogo from '@/assets/images/hotLog.png'; import GenerateBasemap from '@/components/GenerateBasemap'; -import { ProjectBuildingGeojsonService } from '@/api/SubmissionService'; import TaskSectionPopup from '@/components/ProjectDetails/TaskSectionPopup'; import DialogTaskActions from '@/components/DialogTaskActions'; import QrcodeComponent from '@/components/QrcodeComponent'; @@ -28,7 +28,6 @@ import LayerSwitcherControl from '@/components/MapComponent/OpenLayersComponent/ import MapControlComponent from '@/components/ProjectDetails/MapControlComponent'; import { VectorLayer } from '@/components/MapComponent/OpenLayersComponent/Layers'; import { geojsonObjectModel } from '@/constants/geojsonObjectModal'; -import { basicGeojsonTemplate } from '@/utilities/mapUtils'; import getTaskStatusStyle from '@/utilfunctions/getTaskStatusStyle'; import { defaultStyles } from '@/components/MapComponent/OpenLayersComponent/helpers/styleUtils'; import MapLegends from '@/components/MapLegends'; @@ -38,6 +37,7 @@ import { Icon, Style } from 'ol/style'; import { Motion } from '@capacitor/motion'; import locationArc from '@/assets/images/locationArc.png'; import { CommonActions } from '@/store/slices/CommonSlice'; +import { isValidUrl } from '@/utilfunctions/urlChecker'; const Home = () => { const dispatch = CoreModules.useAppDispatch(); @@ -49,11 +49,14 @@ const Home = () => { const [mainView, setView] = useState(); const [featuresLayer, setFeaturesLayer] = useState(); const [toggleGenerateModal, setToggleGenerateModal] = useState(false); - const [taskBuildingGeojson, setTaskBuildingGeojson] = useState(null); - const [initialFeaturesLayer, setInitialFeaturesLayer] = useState(null); + const [taskBoundariesLayer, setTaskBoundariesLayer] = useState(null); + const [dataExtractUrl, setDataExtractUrl] = useState(null); + const [dataExtractExtent, setDataExtractExtent] = useState(null); const [currentCoordinate, setCurrentCoordinate] = useState({ latitude: null, longitude: null }); const [positionGeojson, setPositionGeojson] = useState(null); const [deviceRotation, setDeviceRotation] = useState(0); + const [selectedFeature, setSelectedFeature] = useState(false); + const [dataExtractModalOpen, setDataExtractModalOpen] = useState(false); const encodedId = params.id; const decodedId = environment.decode(encodedId); @@ -61,7 +64,6 @@ const Home = () => { const state = CoreModules.useAppSelector((state) => state.project); const projectInfo = CoreModules.useAppSelector((state) => state.home.selectedProject); const stateSnackBar = CoreModules.useAppSelector((state) => state.home.snackbar); - const projectBuildingGeojson = CoreModules.useAppSelector((state) => state.project.projectBuildingGeojson); const mobileFooterSelection = CoreModules.useAppSelector((state) => state.project.mobileFooterSelection); const mapTheme = CoreModules.useAppSelector((state) => state.theme.hotTheme); const geolocationStatus = CoreModules.useAppSelector((state) => state.project.geolocationStatus); @@ -80,13 +82,13 @@ const Home = () => { }), ); }; + //Fetch project for the first time useEffect(() => { dispatch(ProjectActions.SetNewProjectTrigger()); if (state.projectTaskBoundries.findIndex((project) => project.id == environment.decode(encodedId)) == -1) { dispatch(ProjectActions.SetProjectTaskBoundries([])); dispatch(ProjectById(state.projectTaskBoundries, environment.decode(encodedId))); - // dispatch(ProjectBuildingGeojsonService(`${import.meta.env.VITE_API_URL}/projects/${environment.decode(encodedId)}/features`)) } else { dispatch(ProjectActions.SetProjectTaskBoundries([])); dispatch(ProjectById(state.projectTaskBoundries, environment.decode(encodedId))); @@ -98,9 +100,7 @@ const Home = () => { dispatch(ProjectActions.SetProjectInfo(projectInfo)); } } - return () => { - dispatch(ProjectActions.SetProjectBuildingGeojson(null)); - }; + return () => {}; }, [params.id]); const { mapRef, map } = useOLMap({ @@ -123,39 +123,21 @@ const Home = () => { }, id: `${feature.id}_${feature.task_status}`, })); - const taskBuildingGeojsonFeatureCollection = { + const taskBoundariesFeatcol = { ...geojsonObjectModel, features: features, }; - setInitialFeaturesLayer(taskBuildingGeojsonFeatureCollection); + setTaskBoundariesLayer(taskBoundariesFeatcol); }, [state.projectTaskBoundries[0]?.taskBoundries?.length]); - useEffect(() => { - if (!map) return; - if (!projectBuildingGeojson) return; - - const taskBuildingGeojsonFeatureCollection = { - ...basicGeojsonTemplate, - features: [ - ...projectBuildingGeojson?.map((feature) => ({ - ...feature.geometry, - id: feature.id, - })), - ], - }; - - setTaskBuildingGeojson(taskBuildingGeojsonFeatureCollection); - }, [map, projectBuildingGeojson]); - // TasksLayer(map, mainView, featuresLayer); const projectClickOnMap = (properties, feature) => { setFeaturesLayer(feature, 'feature'); - let extent = properties.geometry.getExtent(); - dispatch( - ProjectBuildingGeojsonService( - `${import.meta.env.VITE_API_URL}/projects/${decodedId}/features?task_id=${properties.uid}`, - ), - ); + const extent = properties.geometry.getExtent(); + + setDataExtractExtent(properties.geometry); + setDataExtractUrl(state.projectInfo.data_extract_url); + mapRef.current?.scrollIntoView({ block: 'center', behavior: 'smooth', @@ -173,6 +155,11 @@ const Home = () => { } }; + const displayDataExtractValues = (properties) => { + setSelectedFeature(properties); + setDataExtractModalOpen(true); + }; + const buildingStyle = { ...defaultStyles, lineColor: '#FF0000', @@ -282,6 +269,23 @@ const Home = () => { /> +
+ + {Object.entries(selectedFeature).map(([key, value]) => ( +

{`${key}: ${value}`}

+ ))} +
+ } + open={dataExtractModalOpen} + onOpenChange={(value) => { + setDataExtractModalOpen(value); + }} + /> + + {/* Top project details heading medium dimension*/} {windowSize.width >= 640 && (
@@ -367,7 +371,6 @@ const Home = () => {
)} - {/* */} {params?.id && (
{ > - {initialFeaturesLayer && initialFeaturesLayer?.features?.length > 0 && ( + {taskBoundariesLayer && taskBoundariesLayer?.features?.length > 0 && ( { getTaskStatusStyle={(feature) => getTaskStatusStyle(feature, mapTheme)} /> )} - {taskBuildingGeojson && taskBuildingGeojson?.features?.length > 0 && ( + {dataExtractUrl && isValidUrl(dataExtractUrl) && ( { constrainResolution: true, duration: 2000, }} + mapOnClick={displayDataExtractValues} zoomToLayer - zIndex={5} + zIndex={10} /> )} {geolocationStatus && currentCoordinate?.latitude && currentCoordinate?.longitude && ( @@ -422,7 +427,7 @@ const Home = () => { constrainResolution: true, duration: 2000, }} - zIndex={5} + zIndex={15} rotation={deviceRotation} /> )} diff --git a/src/frontend/src/views/ProjectDetails.jsx b/src/frontend/src/views/ProjectDetails.jsx index 080e7dd062..518b7b5462 100755 --- a/src/frontend/src/views/ProjectDetails.jsx +++ b/src/frontend/src/views/ProjectDetails.jsx @@ -1,3 +1,5 @@ +// TODO should this be deleted?? + import React, { useEffect, useRef, useState } from 'react'; import '../styles/home.scss'; import WindowDimension from '@/hooks/WindowDimension'; @@ -24,7 +26,6 @@ import GeoJSON from 'ol/format/GeoJSON'; import FmtmLogo from '@/assets/images/hotLog.png'; import GenerateBasemap from '@/components/GenerateBasemap'; -import { ProjectBuildingGeojsonService } from '@/api/SubmissionService'; import { get } from 'ol/proj'; import { buildingStyle, basicGeojsonTemplate } from '@/utilities/mapUtils'; import MapLegends from '@/components/MapLegends'; @@ -82,12 +83,11 @@ const Home = () => { //Fetch project for the first time useEffect(() => { + console.log('HERE'); dispatch(ProjectActions.SetNewProjectTrigger()); if (state.projectTaskBoundries.findIndex((project) => project.id == environment.decode(encodedId)) == -1) { dispatch(ProjectActions.SetProjectTaskBoundries([])); dispatch(ProjectById(state.projectTaskBoundries, environment.decode(encodedId))); - - // dispatch(ProjectBuildingGeojsonService(`${import.meta.env.VITE_API_URL}/projects/${environment.decode(encodedId)}/features`)) } else { dispatch(ProjectActions.SetProjectTaskBoundries([])); dispatch(ProjectById(state.projectTaskBoundries, environment.decode(encodedId))); @@ -100,7 +100,7 @@ const Home = () => { } } return () => { - dispatch(ProjectActions.SetProjectBuildingGeojson(null)); + dispatch(ProjectActions.SetProjectDataExtract(null)); }; }, [params.id]); @@ -180,13 +180,13 @@ const Home = () => { document.querySelector('#project-details-map').scrollIntoView({ behavior: 'smooth', }); - dispatch( - ProjectBuildingGeojsonService( - `${import.meta.env.VITE_API_URL}/projects/${decodedId}/features?task_id=${ - feature?.getId()?.split('_')?.[0] - }`, - ), - ); + // dispatch( + // ProjectDataExtractService( + // `${import.meta.env.VITE_API_URL}/projects/${decodedId}/features?task_id=${ + // feature?.getId()?.split('_')?.[0] + // }`, + // ), + // ); } }); }); @@ -366,7 +366,6 @@ const Home = () => {
)} - {/* */} {params?.id && (
{ const dispatch = CoreModules.useAppDispatch(); @@ -53,8 +53,9 @@ const Home = () => { const [mainView, setView] = useState(); const [featuresLayer, setFeaturesLayer] = useState(); const [toggleGenerateModal, setToggleGenerateModal] = useState(false); - const [taskBuildingGeojson, setTaskBuildingGeojson] = useState(null); - const [initialFeaturesLayer, setInitialFeaturesLayer] = useState(null); + const [dataExtractUrl, setDataExtractUrl] = useState(null); + const [dataExtractExtent, setDataExtractExtent] = useState(null); + const [taskBoundariesLayer, setTaskBoundariesLayer] = useState(null); const [currentCoordinate, setCurrentCoordinate] = useState({ latitude: null, longitude: null }); const [positionGeojson, setPositionGeojson] = useState(null); const [deviceRotation, setDeviceRotation] = useState(0); @@ -65,7 +66,6 @@ const Home = () => { const state = CoreModules.useAppSelector((state) => state.project); const projectInfo = CoreModules.useAppSelector((state) => state.home.selectedProject); const stateSnackBar = CoreModules.useAppSelector((state) => state.home.snackbar); - const projectBuildingGeojson = CoreModules.useAppSelector((state) => state.project.projectBuildingGeojson); const mobileFooterSelection = CoreModules.useAppSelector((state) => state.project.mobileFooterSelection); const mapTheme = CoreModules.useAppSelector((state) => state.theme.hotTheme); const geolocationStatus = CoreModules.useAppSelector((state) => state.project.geolocationStatus); @@ -102,9 +102,7 @@ const Home = () => { dispatch(ProjectActions.SetProjectInfo(projectInfo)); } } - return () => { - dispatch(ProjectActions.SetProjectBuildingGeojson(null)); - }; + return () => {}; }, [params.id]); const { mapRef, map } = useOLMap({ @@ -126,30 +124,13 @@ const Home = () => { }, id: `${feature.id}_${feature.task_status}`, })); - const taskBuildingGeojsonFeatureCollection = { + const taskBoundariesFeatcol = { ...geojsonObjectModel, features: features, }; - setInitialFeaturesLayer(taskBuildingGeojsonFeatureCollection); + setTaskBoundariesLayer(taskBoundariesFeatcol); }, [state.projectTaskBoundries[0]?.taskBoundries?.length]); - useEffect(() => { - if (!map) return; - if (!projectBuildingGeojson) return; - - const taskBuildingGeojsonFeatureCollection = { - ...basicGeojsonTemplate, - features: [ - ...projectBuildingGeojson?.map((feature) => ({ - ...feature.geometry, - id: feature.id, - })), - ], - }; - - setTaskBuildingGeojson(taskBuildingGeojsonFeatureCollection); - }, [map, projectBuildingGeojson]); - useEffect(() => { dispatch(GetProjectDashboard(`${import.meta.env.VITE_API_URL}/projects/project_dashboard/${decodedId}`)); }, []); @@ -158,11 +139,10 @@ const Home = () => { const projectClickOnMap = (properties, feature) => { setFeaturesLayer(feature, 'feature'); let extent = properties.geometry.getExtent(); - dispatch( - ProjectBuildingGeojsonService( - `${import.meta.env.VITE_API_URL}/projects/${decodedId}/features?task_id=${properties.uid}`, - ), - ); + + setDataExtractExtent(properties.geometry); + setDataExtractUrl(state.projectInfo.data_extract_url); + mapRef.current?.scrollIntoView({ block: 'center', behavior: 'smooth', @@ -392,9 +372,9 @@ const Home = () => { > - {initialFeaturesLayer && initialFeaturesLayer?.features?.length > 0 && ( + {taskBoundariesLayer && taskBoundariesLayer?.features?.length > 0 && ( { getTaskStatusStyle={(feature) => getTaskStatusStyle(feature, mapTheme)} /> )} - {taskBuildingGeojson && taskBuildingGeojson?.features?.length > 0 && ( + {dataExtractUrl && isValidUrl(dataExtractUrl) && ( { if (state.projectTaskBoundries.findIndex((project) => project.id == environment.decode(encodedId)) == -1) { dispatch(ProjectActions.SetProjectTaskBoundries([])); dispatch(ProjectById(state.projectTaskBoundries, environment.decode(encodedId))); - - // dispatch(ProjectBuildingGeojsonService(`${import.meta.env.VITE_API_URL}/projects/${environment.decode(encodedId)}/features`)) } else { dispatch(ProjectActions.SetProjectTaskBoundries([])); dispatch(ProjectById(state.projectTaskBoundries, environment.decode(encodedId))); @@ -91,21 +91,6 @@ const ProjectInfo = () => { ); }; - // useEffect(() => { - // const fetchData = () => { - // dispatch(fetchInfoTask(`${environment.baseApiUrl}/tasks/tasks-features/?project_id=${decodedId}`)); - // }; - // fetchData(); - // let interval; - // if (isMonitoring) { - // interval = setInterval(fetchData, 3000); - // } else { - // clearInterval(interval); - // } - - // return () => clearInterval(interval); - // }, [dispatch, isMonitoring]); - useEffect(() => { const fetchData = () => { dispatch(fetchInfoTask(`${import.meta.env.VITE_API_URL}/tasks/tasks-features/?project_id=${decodedId}`)); diff --git a/src/frontend/src/views/Submissions.tsx b/src/frontend/src/views/Submissions.tsx index 6b69859902..a12f4a8301 100755 --- a/src/frontend/src/views/Submissions.tsx +++ b/src/frontend/src/views/Submissions.tsx @@ -1,3 +1,5 @@ +// TODO should this be deleted?? + import React, { useEffect } from 'react'; // import '../styles/home.css' import CoreModules from '@/shared/CoreModules'; @@ -5,7 +7,6 @@ import CoreModules from '@/shared/CoreModules'; import Avatar from '@/assets/images/avatar.png'; import SubmissionMap from '@/components/SubmissionMap/SubmissionMap'; import environment from '@/environment'; -import { ProjectBuildingGeojsonService, ProjectSubmissionService } from '@/api/SubmissionService'; import { ProjectActions } from '@/store/slices/ProjectSlice'; import { ProjectById } from '@/api/Project'; @@ -23,7 +24,7 @@ const Submissions = () => { // const theme = CoreModules.useAppSelector(state => state.theme.hotTheme) useEffect(() => { dispatch(ProjectSubmissionService(`${import.meta.env.VITE_API_URL}/submission/?project_id=${decodedId}`)); - dispatch(ProjectBuildingGeojsonService(`${import.meta.env.VITE_API_URL}/projects/${decodedId}/features`)); + // dispatch(ProjectDataExtractService(`${import.meta.env.VITE_API_URL}/projects/${decodedId}/features`)); //creating a manual thunk that will make an API call then autamatically perform state mutation whenever we navigate to home page }, []); diff --git a/src/frontend/src/views/Tasks.tsx b/src/frontend/src/views/Tasks.tsx index 96dd72ca10..deb90306af 100644 --- a/src/frontend/src/views/Tasks.tsx +++ b/src/frontend/src/views/Tasks.tsx @@ -1,3 +1,5 @@ +// TODO should this be deleted?? + import React, { useEffect, useState } from 'react'; // import '../styles/home.css' import CoreModules from '@/shared/CoreModules'; @@ -6,9 +8,8 @@ import AssetModules from '@/shared/AssetModules'; // import { styled, alpha } from '@mui/material'; import Avatar from '@/assets/images/avatar.png'; -import SubmissionMap from '@/components/SubmissionMap/SubmissionMap'; import environment from '@/environment'; -import { ProjectBuildingGeojsonService, ProjectSubmissionService } from '@/api/SubmissionService'; +import { ProjectSubmissionService } from '@/api/SubmissionService'; import { ProjectActions } from '@/store/slices/ProjectSlice'; import { ProjectById } from '@/api/Project'; import { getDownloadProjectSubmission } from '@/api/task'; @@ -37,22 +38,22 @@ const TasksSubmission = () => { `${import.meta.env.VITE_API_URL}/submission/?project_id=${decodedProjectId}&task_id=${decodedTaskId}`, ), ); - dispatch( - ProjectBuildingGeojsonService( - `${import.meta.env.VITE_API_URL}/projects/${decodedProjectId}/features?task_id=${decodedTaskId}`, - ), - ); + // dispatch( + // ProjectDataExtractService( + // `${import.meta.env.VITE_API_URL}/projects/${decodedProjectId}/features?task_id=${decodedTaskId}`, + // ), + // ); //creating a manual thunk that will make an API call then autamatically perform state mutation whenever we navigate to home page }, []); //Fetch project for the first time useEffect(() => { if (state.projectTaskBoundries.findIndex((project) => project.id == environment.decode(encodedProjectId)) == -1) { dispatch(ProjectById(state.projectTaskBoundries, environment.decode(encodedProjectId))); - dispatch( - ProjectBuildingGeojsonService( - `${import.meta.env.VITE_API_URL}/projects/${environment.decode(encodedProjectId)}/features`, - ), - ); + // dispatch( + // ProjectDataExtractService( + // `${import.meta.env.VITE_API_URL}/projects/${environment.decode(encodedProjectId)}/features`, + // ), + // ); } else { dispatch(ProjectActions.SetProjectTaskBoundries([])); dispatch(ProjectById(state.projectTaskBoundries, environment.decode(encodedProjectId)));