def sync(self): LIMIT = 0 # 每一種同步動作的次數限制,除錯用 # 注意!! 實驗階段指向測試伺服器 #host = 'api06.dev.openstreetmap.org' host = 'api.openstreetmap.org' user = '******' pwf = '%s/.osmpass' % os.environ['HOME'] # 注意!! 有中文的地方需要使用 unicode 字串型態 chset = { u'comment': u'自動同步 (%s)' % self.source_name, u'created_by': u'小璋流同步機器人 (osmapi/0.6.0)', u'bot': u'yes' } api = OsmApi(api=host, username=user, passwordfile=pwf) api.ChangesetCreate(chset) # 新增/修改/刪除 actions = ['create', 'update', 'delete'] points_map = { 'create': self.points_new, 'update': self.points_changed, 'delete': self.points_disappeared } for act in actions: points = points_map[act] count = 0 failed = 0 total = len(points) for p in points: node = self.toNode(p, api) if node is not None: try: if act == 'create': api.NodeCreate(node) if act == 'update': api.NodeUpdate(node) if act == 'delete': api.NodeDelete(node) except: # TODO: 加入 logger 機制 failed = failed + 1 else: # TODO: 加入 logger 機制 failed = failed + 1 # 計數/次數限制/摘要顯示 count = count + 1 print('\r%s: %d/%d (失敗: %d)' % (act, count, total, failed)), sys.stdout.flush() if count == LIMIT: break print('') return api.ChangesetClose()
def main(): global myOSMAPI config = configparser.ConfigParser() config.read('config.ini') myOSMAPI = OsmApi(username=config.get('OSM', 'OPENSTREETMAP_USERNAME'), password=config.get('OSM', 'OPENSTREETMAP_PASSWORD')) myOSMAPI.ChangesetCreate( {u"comment": u"district wikidata and wikipedia tags"}) i = 0 #reads list of relations that need to be modified txt = open("tmplist", 'r') for place in txt.readlines(): try: i += 1 #get relation details relJSON = myOSMAPI.RelationGet(place) name = relJSON["tag"]["name"] print name #get wikipedia article name qid = open("qidandname", 'r') sch = wikipedia.search(name + '_district', results=1) article = sch[0] print article #get wikidata qid n = wptools.page(sch[0].encode('ascii', 'ignore'), silent=True) qid = n.get_wikidata().wikibase print qid #make changes in osm newrelJSON = relJSON #newrelJSON["tag"]["wikidata"] = qid newrelJSON["tag"]["wikipedia"] = "en:" + article if (i >= 10): myOSMAPI.ChangesetClose() break except: print place + " failed"
async def main(): osm = OsmApi(username=config.get("OSM_SUBMIT_USER"), password=config.get("OSM_SUBMIT_PASSWORD")) print("Connecting...") await database.connect() print("Updating materialised view...") await database.execute("REFRESH MATERIALIZED VIEW CONCURRENTLY solartag.candidates") print("Fetching changes...") while True: res = await database.fetch_all("""SELECT results.osm_id, array_agg(results.user_id) AS users, solartag.int_decision_value(module_count) AS modules FROM solartag.results, solartag.candidates WHERE results.osm_id = candidates.osm_id GROUP BY results.osm_id HAVING solartag.int_decision(module_count) = true AND solartag.int_decision_value(module_count) IS NOT NULL ORDER BY results.osm_id DESC LIMIT 100""") users = set() for row in res: users |= set(row['users']) if len(list(res)) < 10: print("Fewer than 10 new changes, not submitting.") return print(f"Submitting changeset of {len(list(res))} objects...") print("Creating changeset...") osm.ChangesetCreate({"contributor_ids": ";".join(map(str, users)), "source": "https://solartagger.russss.dev", "comment": "Add generator:solar:modules tag", "bot": "yes", "imagery_used": "Bing" }) for row in res: node = osm.NodeGet(row['osm_id']) if 'generator:solar:modules' in node['tag']: print("Tag already exists for node", node['id']) continue node['tag']['generator:solar:modules'] = str(row['modules']) osm.NodeUpdate(node) osm.ChangesetClose() print("Done")
print('Vols inserir (y/n)') tecla = press_key() print(tecla) if (tecla == 'y'): #primer les dades que segur que hi són: data = '{"lat":%f, "lon":%f, "tag": { "historic":"archaeological_site","site_type":"megalith", "name":"%s", "megalith_type":"%s"' % ( lat, lon, name, megalith_type) if (wikipedia != ""): data += ',"wikipedia":"%s"' % (wikipedia) if (wikidata != ""): data += ',"wikidata":"%s"' % (wikidata) if (source != ""): data += ',"source":"%s"' % (source) if (alt_name != ""): data += ',"alt_name":"%s"' % (alt_name) data += '}}' print(data) #data = '{"lat":%f, "lon":%f, "tag": { "natural": "tree", "name": "%s", "species": "%s", "species:ca": "%s", "note": "%s", "website": "%s" }}' % (lat, lon, name, species, species_ca, note, website) data_json = json.loads(data) print(data_json) print(MyApi.NodeCreate(data_json)) #MyApi.flush() print("dolmen inserit\n") num_item = num_item + 1 else: print('No volem inserir\n') # tanquem la sessió MyApi.ChangesetClose()
user = '******' pwf = '%s/.osmpass' % os.environ['HOME'] # 注意!! 有中文的地方需要使用 unicode 字串型態 chset = { u'comment': u'自動同步 U-bike 租借站', u'created_by': u'小璋流同步機器人 (osmapi/0.6.0)' } node = { u'id': 4299484763, u'lat': 25.10, u'lon': 121.0, u'version': 1, } api = OsmApi(api=host, username=user, passwordfile=pwf) api.ChangesetCreate(chset) n = api.NodeGet(4299484799) n = api.NodeDelete(n) print(n) #n = api.NodeUpdate(node) #n = api.NodeDelete(node) cid = api.ChangesetClose() # 更新結果摘要 print('Changeset 編號: %d' % cid) print('URL: http://api06.dev.openstreetmap.org/changeset/%d' % cid) print('Node 編號: %s' % n['id']) print('URL: http://api06.dev.openstreetmap.org/api/0.6/node/%s' % n['id'])
#Initialise osmapi - Replace the value in username with your username. #Replace the value in password with your password myOSMAPI = OsmApi(username="******", password="******") #retrieve the result nodes using overpass for the Rajajinagar bounding box resultNodes = overpyAPI.query( "[out:json];node(12.9936,77.549,12.99651,77.55526);out;") #Iterate through all the nodes in the result for i in resultNodes.nodes: #filter nodes having tags if (i.tags): tag = i.tags #if Kannada tag(Or any other Indic Tag) is present, filter once more if ("name:kn" in tag.keys()): #transliterate value in tag to required Indic language tag["name:ta"] = kannadaToTamizhTransliterator.transliterate_indic_indic( tag["name:kn"], "kn_IN", "ta_IN") #store the result in a new JSON nodeJSON = {} nodeJSON["id"] = i.id nodeJSON["lat"] = i.lat nodeJSON["lon"] = i.lon nodeJSON["version"] = 8 nodeJSON["tag"] = i.tags #update Node according to osmapi guidelines -1) Create changeset 2) Update node 3)Close changeset myOSMAPI.ChangesetCreate( {u"comment": u"Automating Transliteration"}) myOSMAPI.NodeUpdate(nodeJSON) myOSMAPI.ChangesetClose()
class OsmFix(object): def __init__(self): osm_user = BaseConfig.OSM_USER osm_pass = BaseConfig.OSM_PASSWORD osm_api = BaseConfig.OSM_API_URL self.osm = OsmApi(api=osm_api, appid='Kort', username=osm_user, password=osm_pass) self.kort_api = kort_api.KortApi() def get_for_type(self, type, id): """ Returns the 'getter' of the requested OSM type """ if type == 'node': return self.osm.NodeGet(id) if type == 'way': return self.osm.WayGet(id) if type == 'relation': return self.osm.RelationGet(id) def update_for_type(self, type, new_values): """ Returns the 'update' method of the requested OSM type """ if type == 'node': return self.osm.NodeUpdate(new_values) if type == 'way': return self.osm.WayUpdate(new_values) if type == 'relation': return self.osm.RelationUpdate(new_values) def apply_kort_fix(self, limit=1, dry=False): try: for kort_fix in self.kort_api.read_fix(): try: log.debug("---- Fix from Kort: ----") log.debug("%s" % pprint.pformat(kort_fix)) osm_entity = self.get_for_type(kort_fix['osm_type'], kort_fix['osm_id']) if not osm_entity: raise OsmEntityNotFoundError("OSM entity not found") log.debug("---- OSM type before fix ----") log.debug("%s" % pprint.pformat(osm_entity['tag'])) error_type = errortypes.Error(kort_fix['error_type'], osm_entity) fixed = error_type.apply_fix(kort_fix) fixed_osm_entity, description = fixed log.debug("---- OSM type after fix ----") log.debug("%s" % pprint.pformat(fixed_osm_entity['tag'])) except (errortypes.ErrorTypeError, OsmEntityNotFoundError, ValueError) as e: log.warning("The fix could not be applied: %s, fix: %s" % (str(e), kort_fix)) fixed_osm_entity = None if not dry: if fixed_osm_entity is not None: comment = self.gen_changelog_comment( kort_fix, description) self.submit_entity(kort_fix['osm_type'], fixed_osm_entity, comment, kort_fix) self.kort_api.mark_fix(kort_fix['fix_id']) except Exception as e: log.exception("Failed to apply fix of Kort to OpenStreetMap") def gen_changelog_comment(self, kort_fix, change_description): comment = ( u"Change from kort, user: %s (id: %s), " u"fix id: %s, error: %s (source: %s), " u"description: %s, " u"see this users profile for more information: " u"http://www.openstreetmap.org/user/kort-to-osm" % (kort_fix['username'], kort_fix['user_id'], kort_fix['fix_id'], kort_fix['error_type'], kort_fix['source'], change_description)) return comment def submit_entity(self, type, entity, comment, kort_fix): """ Submits an OSM entity (node, way, relation) to OSM """ self.osm.ChangesetCreate({ "comment": comment[:255], "mechanical": "yes", "kort:username": kort_fix['username'], "kort:user_id": str(kort_fix['user_id']), "kort:fix_id": str(kort_fix['fix_id']), "kort:error_type": kort_fix['error_type'], "kort:error_source": kort_fix['source'] }) changeset = self.update_for_type(type, entity) log.info("%s" % pprint.pformat(changeset)) self.osm.ChangesetClose()
#if action == "modify": deletenode = {"id": osm_id , "version" : osm_version , "lat" : latitude, "lon": longitude , "tag": jtags} #else: # editnode = {"id": -counter , "version" : osm_version , "lat" : latitude, "lon": longitude , "tag": jtags} # counter = counter + 1; #print (str(latitude)+""+str(longitude)+""+street+" "+housenumber) print (deletenode) res = api.NodeDelete(deletenode) print(res) #number = 3122745503 #print(number) #editednode = {"id": 4303211109, "lat" : "59.6395566", "lon" : "11.3226128", "tag" : {"addr:housenumber": "47A", "addr:street":"Skramrudåsen", "addr:postcode": "1860","addr:city":"Trøgstad"} , "version" : 1} ##editednode = {"id": , "lat" : "59.6395566", "lon" : "11.3226128", "tag" : {"addr:housenumber": "47A", "addr:street":"Skramrudåsen", "addr:postcode": "1860","addr:city":"Trøgstad"}} #print(api.NodeGet("4303211109")) #import json #print(json.dumps(editednode)) #print(api.NodeUpdate(editednode)) #print(api.NodeCreate(editednode)) print(api.ChangesetClose()) db = mysql.connector.connect(host="localhost",user=mypasswords.sqldbuser,password=mypasswords.sql,database=mypasswords.sqldbname) cursor = db.cursor() cursor.execute("set names utf8") cursor.execute("insert into update_requests (kommunenummer,ip,tid) values ('"+str(munipnumber)+"','script',addtime(now(),\"0:05:00\"));") db.commit() db.close() #os.system("echo \"insert into update_requests (kommunenummer,ip,tid) values (543,'script',now())\" | mysql -u ruben --password="******" beebeetle") ##api.flush() #api.NodeCreate