python实现mongo自动添加地图索引, 自动修正遇到的问题
admin
2023-07-16 22:23:26
0

mongo添加地图索引时常会遇到两个问题: 坐标点冲突和坐标点重合, 所以之前写了个脚本解决一下, 主要思路就是:
当添加地图索引报错时, 根据error信息,判断坐标点冲突or 坐标点重合的地方, 根据正则修正坐标点, 然后通过递归or循环的方式, 重新尝试, 代码如下:


-*- coding: utf-8 -*-
import pymongo
import re

conn = pymongo.MongoClient(host='127.0.0.1', port=27017)
citytest2 = conn."db_name"."collection_name"  # 连接表
i = 0  # 用来统计删除坐标点次数及防止栈溢出
def decoordinates(citytest2):
    '''
    名称: decoordinates
    功能: 添加坐标索引,若发生坐标冲突,则删除靠后的坐标,直至成功(坐标点相同问题尚未添加)
    return: None
    '''
    try:
        global i
        citytest2.create_index([("polygons", "2dsphere")])
        print(i)
    except Exception as e:
        global i
        e = str(e)
        retest = re.compile(r'\[(.*?)\]')
        if "Duplicate vertices" in str(e):  # 坐标重合问题
            retest2 = re.compile(r'and (\d+)')
            test2 = int(retest2.findall(str(e))[0])   # 获取出错在第几条
print test2
        elif "locations in degrees" in str(e):  # 坐标冲突问题
            retest2 = re.compile(r'(\d+?)\s+?cross')
            test2 = retest2.findall(str(e))[0]  # 获取出错在第几条
        i += 1
        idtest = re.compile(r'_id:\s+(\d+)')
        idtest = idtest.findall(str(e))[0]   # 获取出错id
        test = ' [' + retest.findall(str(e))[int(test2)].strip() +  '],' # 获取该条出错的坐标
        errortest = citytest2.find_one({"_id": int(idtest)})
        e = eval(str(errortest).replace(test, ''))
        citytest2.update({"_id": int(idtest)}, e)
        if i < 1000:
            decoordinates(citytest2)
if name == 'main':
    decoordinates(citytest2)

相关内容

热门资讯

“巴基斯坦正与中国、沙特、科威... 中东冲突带来的石油供应短缺正在考验各国石油储备。国际能源署(IEA)当地时间2日表示,如果库存的消耗...
原创 微... 当地时间6月2日,在微软Build 2026开发者大会上,微软正式发布了第二代拓扑量子芯片Major...
原创 骁... 经常关注平板电脑的朋友可能都知道,现在市面上小平板并不多,采用OLED屏幕的更是少之又少。因为大部分...
美国封杀中国海缆设备 文︱陆弃 美国联邦通信委员会近日宣布,计划进一步加强海底通信电缆监管,要求相关运营商申请新的许可证,...
社会需求才是科学革命的最大动力 文一 面对“为什么科学革命发生在西方而不是东方”这个著名的“李约瑟之谜”,马克斯·韦伯和道格拉斯·诺...
联通“时光门”2026—202... (央链融媒体 北京讯)5月30日,联通“时光门”2026—2029合作伙伴招募计划在北京北人亦创国际...
美媒:特朗普的中期选举策略令共... 2026年年底,美国将举行中期选举,共和党正努力保住国会控制权,但是美国总统特朗普的策略让共和党人不...
高市早苗承认:形势非常严峻 【环球网报道】据日本富士新闻网报道,针对日本出生人口跌至历史新低,日本首相高市早苗4日在国会上承认“...
“女子反抗性骚扰被杀害抛尸”案... 6月4日,华商报大风新闻记者从“留守妇女反抗性骚扰被杀害抛尸”案受害者儿子田先生处获悉,该案刑事一审...
万家乐燃气灶打火松手后就熄火什... 原因有多种,1、看一下是否是没有燃气了,如果没有燃气,就有可能会导致打火松手后熄火的情况。2、如果燃...