Nhận vị trí từ GPS bằng Python

Ảnh bạn chụp bằng điện thoại thông minh hoặc máy ảnh kỹ thuật số có siêu dữ liệu phong phú về thông tin bổ sung về ảnh. Họ lưu trữ siêu dữ liệu này ở định dạng gọi là EXIF, viết tắt của Định dạng tệp hình ảnh có thể trao đổi, có các phiên bản tiêu chuẩn khác nhau

Chương trình này đọc vị trí địa lý. GPS yêu cầu đường ngắm của các vệ tinh GPS hoạt động. Điều này có nghĩa là bạn cần phải ở trạng thái mở nếu không sẽ báo lỗi. Trong trường hợp như vậy, mạng có thể được sử dụng để lấy vị trí. Bạn nên chạy ứng dụng bản đồ yêu thích của mình để sửa vị trí của mình nếu bạn đang chạy ví dụ này lần đầu tiên

gps. py

nhập android droid = android. Android() người máy. startLocation() in "đang đọc GPS. " sự kiện = droid. eventWaitFor('vị trí',10000). kết quả nếu sự kiện ['tên'] == "địa điểm". cố gắng. lat = str(sự kiện['dữ liệu']['gps']['vĩ độ']) lng = str(sự kiện['dữ liệu']['gps']['kinh độ']) ngoại trừ KeyError. lat = str(sự kiện['dữ liệu']['mạng']['vĩ độ']) lng = str(sự kiện['dữ liệu']['mạng']['kinh độ']) latlng = 'lat. ' + lat + ' lng. ' + lng in latlng droid. dừngĐịnh vị()

giải thích mã

Khởi động GPS

sự kiện = droid. eventWaitFor('vị trí',10000). kết quả

Đợi tối đa 10000 mili giây để sự kiện vị trí xảy ra

lat = str(sự kiện['dữ liệu']['gps']['vĩ độ']) lng = str(sự kiện['dữ liệu']['gps']['kinh độ'])

Nhận thông tin lat và lng

Dừng GPS

mã địa lý

Mã địa lý trả về địa chỉ dựa trên thông tin vĩ độ và kinh độ. Thông tin về phương pháp mã địa lý có thể được tìm thấy trong. Bạn không cần khóa API GoogleMap nhưng phải có quyền truy cập mạng để khóa này hoạt động

Tiết lộ. Bài đăng này có thể chứa các liên kết liên kết, nghĩa là khi bạn nhấp vào liên kết và mua hàng, chúng tôi sẽ nhận được hoa hồng

Mã hóa địa lý là quá trình chuyển đổi mô tả về một vị trí (chẳng hạn như địa chỉ vật lý hoặc tên của một địa điểm) thành một cặp vĩ độ và kinh độ trên bề mặt Trái đất cho địa điểm đó

Nó cũng đề cập đến việc chuyển đổi tọa độ địa lý thành mô tả về một vị trí (chẳng hạn như địa chỉ); . Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách thực hiện cả hai với sự trợ giúp của thư viện GeoPy trong Python

Tuy nhiên, nếu bạn muốn định vị địa chỉ IP, thì hướng dẫn này là dành cho bạn

GeoPy là một ứng dụng khách Python cung cấp một số dịch vụ web mã hóa địa lý phổ biến;

Để bắt đầu, hãy cài đặt nó

pip3 install geopy

GeoPy cung cấp nhiều trình bao bọc dịch vụ mã hóa địa lý, chẳng hạn như OpenStreetMap Nominatim, Google Geocoding API V3, Bing Maps, v.v. Trong hướng dẫn này, chúng tôi sẽ gắn bó với OpenStreetMap Nominatim

Đây là những gì chúng tôi sẽ đề cập

Nhận Vĩ độ và Kinh độ từ một Địa chỉ (Mã hóa địa lý)

Trong phần này, chúng tôi sẽ sử dụng OpenStreetMap Nominatim API để lấy vĩ độ và kinh độ từ một địa chỉ thực, thành phố hoặc bất kỳ tên vị trí nào

Hãy nhập thư viện trước

from geopy.geocoders import Nominatim
import time
from pprint import pprint

Lưu ý rằng chúng tôi đã chọn Trình mã hóa địa lý Nominatim, hiện đang tạo một phiên bản mới của nó

# instantiate a new Nominatim client
app = Nominatim(user_agent="tutorial")

Bây giờ, hãy thử lấy dữ liệu địa lý từ một địa chỉ

# get location raw data
location = app.geocode("Nairobi, Kenya").raw
# print raw data
pprint(location)

đầu ra

{'boundingbox': ['-1.444471', '-1.163332', '36.6509378', '37.1038871'],
 'class': 'place',
 'display_name': 'Nairobi, Kenya',
 'icon': 'https://nominatim.openstreetmap.org/images/mapicons/poi_place_city.p.20.png',
 'importance': 0.845026759433763,
 'lat': '-1.2832533',
 'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. '
            'https://osm.org/copyright',
 'lon': '36.8172449',
 'osm_id': 9185096,
 'osm_type': 'relation',
 'place_id': 273942566,
 'type': 'city'}

Tuyệt vời, chúng tôi có vĩ độ tại thuộc tính

from geopy.geocoders import Nominatim
import time
from pprint import pprint
1 (trong đó chúng tôi có thể truy cập bằng
from geopy.geocoders import Nominatim
import time
from pprint import pprint
2) và kinh độ tại thuộc tính
from geopy.geocoders import Nominatim
import time
from pprint import pprint
3, chúng tôi cũng có quyền truy cập vào hộp giới hạn của địa chỉ tại thuộc tính
from geopy.geocoders import Nominatim
import time
from pprint import pprint
4

Như bạn có thể thấy, API Nominatim không yêu cầu địa chỉ đầy đủ (bao gồm đường phố, số nhà và thành phố), bạn cũng có thể chuyển địa chỉ doanh nghiệp và điểm bạn quan tâm, nó hỗ trợ điều đó

Tuy nhiên, nếu bạn gọi chức năng này nhiều lần (chẳng hạn như lặp lại danh sách địa chỉ), bạn sẽ gặp phải lỗi hết thời gian chờ và đó là bởi vì nếu bạn đọc Chính sách sử dụng chỉ định, nó yêu cầu bạn sử dụng tối đa 1 yêu cầu cho mỗi

Do đó, chức năng bên dưới tôn trọng yêu cầu đó và ngủ trong một giây trước khi đưa ra yêu cầu

def get_location_by_address(address):
    """This function returns a location as raw from an address
    will repeat until success"""
    time.sleep(1)
    try:
        return app.geocode(address).raw
    except:
        return get_location_by_address(address)

Vì vậy, bất cứ khi nào xảy ra lỗi hết thời gian chờ, chúng tôi sẽ nắm bắt lỗi đó và gọi hàm theo cách đệ quy và hàm này sẽ ngủ thêm một giây nữa và hy vọng sẽ lấy được kết quả

address = "Makai Road, Masaki, Dar es Salaam, Tanzania"
location = get_location_by_address(address)
latitude = location["lat"]
longitude = location["lon"]
print(f"{latitude}, {longitude}")
# print all returned data
pprint(location)

đầu ra

-6.7460493, 39.2750804
{'boundingbox': ['-6.7467061', '-6.7454602', '39.2741806', '39.2760514'],
 'class': 'highway',
 'display_name': 'Makai Road, Masaki, Msasani, Dar es-Salaam, Dar es Salaam, '
                 'Coastal Zone, 2585, Tanzania',
 'importance': 0.82,
 'lat': '-6.7460493',
 'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. '
            'https://osm.org/copyright',
 'lon': '39.2750804',
 'osm_id': 23347726,
 'osm_type': 'way',
 'place_id': 89652779,
 'type': 'residential'}

Nhận địa chỉ từ Vĩ độ và Kinh độ (Mã hóa địa lý ngược)

Bây giờ để truy xuất địa chỉ, thành phố, quốc gia và nhiều thông tin khác, chỉ từ vĩ độ và kinh độ, chúng ta chỉ cần sử dụng phương thức

from geopy.geocoders import Nominatim
import time
from pprint import pprint
5 thay vì
from geopy.geocoders import Nominatim
import time
from pprint import pprint
6, phương thức này chấp nhận tọa độ (
from geopy.geocoders import Nominatim
import time
from pprint import pprint
7 và
from geopy.geocoders import Nominatim
import time
from pprint import pprint
8) dưới dạng một chuỗi được phân tách bằng dấu phẩy

Hàm sau đảo ngược tọa độ cùng với việc tôn trọng chính sách sử dụng Nominatim

def get_address_by_location(latitude, longitude, language="en"):
    """This function returns an address as raw from a location
    will repeat until success"""
    # build coordinates string to pass to reverse() function
    coordinates = f"{latitude}, {longitude}"
    # sleep for a second to respect Usage Policy
    time.sleep(1)
    try:
        return app.reverse(coordinates, language=language).raw
    except:
        return get_address_by_location(latitude, longitude)

Vì vậy, chức năng này mong đợi vĩ độ và kinh độ làm tham số và trả về dữ liệu địa lý thô, đây là một cách sử dụng ví dụ

# define your coordinates
latitude = 36.723
longitude = 3.188
# get the address info
address = get_address_by_location(latitude, longitude)
# print all returned data
pprint(address)

đầu ra

from geopy.geocoders import Nominatim
import time
from pprint import pprint
0

Vì vậy, điều này sẽ trả về tất cả dữ liệu địa chỉ, bao gồm tiểu bang, thị trấn, mã bưu điện, quận, v.v. Nếu bạn muốn trả lại thông tin này bằng một ngôn ngữ cụ thể, bạn có thể đặt tham số

from geopy.geocoders import Nominatim
import time
from pprint import pprint
9 thành ngôn ngữ bạn muốn hoặc bạn có thể đặt thành
# instantiate a new Nominatim client
app = Nominatim(user_agent="tutorial")
0 cho ngôn ngữ mặc định cho vị trí cụ thể đó

Phần kết luận

Như mọi khi, chúng tôi chỉ xem các ví dụ đơn giản về những gì GeoPy có thể làm, tôi thực sự khuyên bạn nên đọc tài liệu nếu bạn quan tâm đến các tiện ích nâng cao hơn

Cuối cùng, nếu bạn là người mới bắt đầu và muốn học Python, tôi khuyên bạn nên tham gia khóa học Python For Everyone Coursera, trong đó bạn sẽ học được nhiều điều về Python. Bạn cũng có thể xem trang tài nguyên và khóa học của chúng tôi để xem các tài nguyên Python mà tôi đề xuất về các chủ đề khác nhau

Làm cách nào để lấy tọa độ trong Python?

Các bước − .
Nhập bộ mã hóa địa lý Nominatim từ mô-đun geopy
Khởi tạo API Nominatim và sử dụng phương thức mã địa lý để lấy vị trí của chuỗi đầu vào
Cuối cùng, lấy vĩ độ và kinh độ của vị trí theo vị trí. vĩ độ và vị trí. kinh độ

Làm cách nào để lấy vị trí từ địa chỉ IP trong Python?

hàm get_location() . //ipapi. co/{ip}/{format}/ để lấy thông tin vị trí cho một địa chỉ IP cụ thể. {ip} được thay thế bằng địa chỉ IP và {format} có thể được thay thế bằng bất kỳ thứ nào trong số này – json , jsonp , xml , csv , yaml.

Làm cách nào để sử dụng Python API định vị địa lý?

Cách lấy vị trí địa lý bằng Python .
cài đặt địa lý pip3
từ geopy. .
# khởi tạo ứng dụng khách Nominatim mới = Nominatim(user_agent="tutorial")
# lấy vị trí dữ liệu thô vị trí = ứng dụng