remove old script
This commit is contained in:
@@ -1,156 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Script to convert geographic data in MongoDB from E6 format to GeoJSON Point format.
|
|
||||||
This script updates all documents in the ingress collection to use proper MongoDB GeoJSON format.
|
|
||||||
"""
|
|
||||||
|
|
||||||
from pymongo import MongoClient
|
|
||||||
from pymongo.errors import PyMongoError
|
|
||||||
import sys
|
|
||||||
|
|
||||||
|
|
||||||
def convert_e6_to_degrees(e6_value):
|
|
||||||
"""
|
|
||||||
Convert E6 format to degrees.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
e6_value: Integer value in E6 format (multiply by 1e-6 to get degrees)
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
Float value in degrees
|
|
||||||
"""
|
|
||||||
return e6_value / 1_000_000 if e6_value else 0.0
|
|
||||||
|
|
||||||
|
|
||||||
def create_geojson_point(lat_e6, lng_e6):
|
|
||||||
"""
|
|
||||||
Create a GeoJSON Point from E6 coordinates.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
lat_e6: Latitude in E6 format
|
|
||||||
lng_e6: Longitude in E6 format
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
GeoJSON Point object or None if coordinates are invalid
|
|
||||||
"""
|
|
||||||
if lat_e6 == 0 and lng_e6 == 0:
|
|
||||||
return None
|
|
||||||
|
|
||||||
lat = convert_e6_to_degrees(lat_e6)
|
|
||||||
lng = convert_e6_to_degrees(lng_e6)
|
|
||||||
|
|
||||||
# GeoJSON Point format: [longitude, latitude]
|
|
||||||
return {
|
|
||||||
"type": "Point",
|
|
||||||
"coordinates": [lng, lat]
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def convert_document(doc):
|
|
||||||
"""
|
|
||||||
Convert a single document to use GeoJSON format.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
doc: MongoDB document
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
Updated document with GeoJSON coordinates
|
|
||||||
"""
|
|
||||||
updated = False
|
|
||||||
updates = {}
|
|
||||||
|
|
||||||
# Convert coordinates field
|
|
||||||
if "coordinates" in doc and isinstance(doc["coordinates"], dict):
|
|
||||||
coords = doc["coordinates"]
|
|
||||||
if "lat" in coords and "lng" in coords:
|
|
||||||
geojson = create_geojson_point(coords["lat"], coords["lng"])
|
|
||||||
if geojson:
|
|
||||||
updates["coordinates"] = geojson
|
|
||||||
updated = True
|
|
||||||
|
|
||||||
# Convert markup array
|
|
||||||
if "markup" in doc and isinstance(doc["markup"], list):
|
|
||||||
new_markup = []
|
|
||||||
for item in doc["markup"]:
|
|
||||||
new_item = item.copy()
|
|
||||||
if "latE6" in item and "lngE6" in item:
|
|
||||||
geojson = create_geojson_point(item["latE6"], item["lngE6"])
|
|
||||||
if geojson:
|
|
||||||
new_item["location"] = geojson
|
|
||||||
updated = True
|
|
||||||
new_markup.append(new_item)
|
|
||||||
if updated:
|
|
||||||
updates["markup"] = new_markup
|
|
||||||
|
|
||||||
return updates if updated else None
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
"""
|
|
||||||
Main function to convert all documents in the collection.
|
|
||||||
"""
|
|
||||||
# Connect to MongoDB
|
|
||||||
mongo_uri = "mongodb://root:root@localhost:27017/?authSource=admin"
|
|
||||||
db_name = "ingress"
|
|
||||||
collection_name = "ingress"
|
|
||||||
|
|
||||||
print(f"Connecting to MongoDB at {mongo_uri}...")
|
|
||||||
print(f"Database: {db_name}, Collection: {collection_name}")
|
|
||||||
|
|
||||||
try:
|
|
||||||
client = MongoClient(mongo_uri)
|
|
||||||
db = client[db_name]
|
|
||||||
collection = db[collection_name]
|
|
||||||
|
|
||||||
# Count total documents
|
|
||||||
total_docs = collection.count_documents({})
|
|
||||||
print(f"Total documents in collection: {total_docs}")
|
|
||||||
|
|
||||||
if total_docs == 0:
|
|
||||||
print("No documents found. Exiting.")
|
|
||||||
return
|
|
||||||
|
|
||||||
# Process documents in batches
|
|
||||||
batch_size = 100
|
|
||||||
processed = 0
|
|
||||||
updated = 0
|
|
||||||
skipped = 0
|
|
||||||
|
|
||||||
print(f"\nProcessing documents in batches of {batch_size}...")
|
|
||||||
|
|
||||||
cursor = collection.find({})
|
|
||||||
|
|
||||||
for doc in cursor:
|
|
||||||
processed += 1
|
|
||||||
|
|
||||||
# Convert document
|
|
||||||
updates = convert_document(doc)
|
|
||||||
|
|
||||||
if updates:
|
|
||||||
# Update the document
|
|
||||||
collection.update_one(
|
|
||||||
{"_id": doc["_id"]},
|
|
||||||
{"$set": updates}
|
|
||||||
)
|
|
||||||
updated += 1
|
|
||||||
else:
|
|
||||||
skipped += 1
|
|
||||||
|
|
||||||
# Progress indicator
|
|
||||||
if processed % batch_size == 0:
|
|
||||||
print(f"Processed: {processed}/{total_docs} | Updated: {updated} | Skipped: {skipped}")
|
|
||||||
|
|
||||||
print(f"\nConversion complete!")
|
|
||||||
print(f"Total processed: {processed}")
|
|
||||||
print(f"Total updated: {updated}")
|
|
||||||
print(f"Total skipped: {skipped}")
|
|
||||||
|
|
||||||
except PyMongoError as e:
|
|
||||||
print(f"Error: {e}", file=sys.stderr)
|
|
||||||
sys.exit(1)
|
|
||||||
finally:
|
|
||||||
client.close()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
Reference in New Issue
Block a user