Evde can sıkıntısından python'da bişiler yapayım dedim. Çok bilen biri değilim o yüzden hatalarım muhtemel vardır. İBB'den ispark verilerini çektim ve bana en yakın konumdaki isparkı bulmasını istiyorum. Aşağıdaki kodu yazdım ama sonuç vermesi 1 buçuk dk sürüyor nerdeyse. bunu kısaltmanın bir yolu vardır ama nasıl? veya nerede hatalarım var?
Yardımcı olabilecek varsa çok sevinirim.
link: github.com
import requests
import math
def distance(origin, destination):
lat1, lon1 = origin
lat2, lon2 = destination
radius = 6371 # km
dlat = math.radians(lat2-lat1)
dlon = math.radians(lon2-lon1)
a = math.sin(dlat/2) * math.sin(dlat/2) + math.cos(math.radians(lat1)) \
* math.cos(math.radians(lat2)) * math.sin(dlon/2) * math.sin(dlon/2)
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
d = radius * c
return d
sorgu = requests.get("api.ibb.gov.tr")
cevap = sorgu.json()
son = {}
for i in range(len(cevap)):
parkDetaySorgu = requests.get("api.ibb.gov.tr
detay = parkDetaySorgu.json()
uzaklik = distance((40.980876, 29.117209),(float(detay["Latitude"]),float(detay["Longitude"])))
son.update({uzaklik:detay["ParkID"]})
en_yakin = min(son.keys())
print(son[en_yakin])
Yardımcı olabilecek varsa çok sevinirim.
link: github.com
import requests
import math
def distance(origin, destination):
lat1, lon1 = origin
lat2, lon2 = destination
radius = 6371 # km
dlat = math.radians(lat2-lat1)
dlon = math.radians(lon2-lon1)
a = math.sin(dlat/2) * math.sin(dlat/2) + math.cos(math.radians(lat1)) \
* math.cos(math.radians(lat2)) * math.sin(dlon/2) * math.sin(dlon/2)
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
d = radius * c
return d
sorgu = requests.get("api.ibb.gov.tr")
cevap = sorgu.json()
son = {}
for i in range(len(cevap)):
parkDetaySorgu = requests.get("api.ibb.gov.tr
detay = parkDetaySorgu.json()
uzaklik = distance((40.980876, 29.117209),(float(detay["Latitude"]),float(detay["Longitude"])))
son.update({uzaklik:detay["ParkID"]})
en_yakin = min(son.keys())
print(son[en_yakin])
İlk gelen cevapta zaten koordinatlar var, o yüzden for döngüsünün içinde tekrar tekrar istek atmanıza gerek yok.
Ayrıca python'da i ile loop yapmanıza gerek yok, oyun yerine:
for park in parklar:
park.bişey
gibi bir şey yapabilirsiniz.
plutongezegendegilmi
Denedim, 0.18 sn sürüyor.
python3 park.py 0.18s user 0.05s system 8% cpu 2.685 total
Bir de süre için çok farketmez ama distance metodunuzu anlamadım. Normal pisagor yapsanız niye olmuyor? Dünya yuvarlak filan diye mi?
plutongezegendegilmi
1