Nội dung bài viết
Video học lập trình mỗi ngày
Làm thế nào để chuyển đổi một Address sang Longitude và Latitude. 2 ví dụ sau đây có thể giúp bạn xử lý nhanh chóng.
Tình huống nào convert place to coordinates
Thực tế tình huống thì có nhiều, nhưng điển hình là những tình huống sau:
- Tìm sản phẩm shop xung quanh vị trí của mình
- Tìm xe grab gần mình
- Giảm ùn tắc giao thông(VTL) tương lai.
- Xem giao thông tắc nghẽn ở chỗ nào mà thông báo như Google.
Tôi đưa ra những tình huống phổ biến vậy cho các bạn hình dung, tầm quan trọng Geolocation API
như thế nào đối với đời sống của chúng ta.
Cách chuyển một địa chỉ sang toạ độ
Ở bài viết trước chúng tôi có những phiếu giảm giá, và đã khắc phục được nhiều người dành giật nhiều phiếu một lúc. Và cách chúng tôi sử dụng để ngăn ngừa sự gian lận đó là sử dụng atom database một cách hiểu quả.
Giờ đây chúng tôi tiếp tục cung cấp những SHOP có phiếu giảm giá gần bạn để giúp bạn di chuyển nhanh chóng, chính vì vậy, chúng tôi cho thêm chức năng Tìm phiếu giảm giá xung quanh vị trí người dùng. Và bước đầu tiên chúng tôi phải biết SHOP tạo voucher ở địa chỉ nào. Thì buộc chúng tôi phải convert place to coordinates từ SHOP. Ví dụ:
const address = '134, nguyễn thái học, Phường Đa Kao, Quận 1, TP Hồ Chí Minh'
const coordinates = await convertPlaceToCoordinates({address});
/*
"providedLocation": {
"location": "134, nguyễn thái học, Phường Đa Kao, Quận 1, TP Hồ Chí Minh"
},
"displayLatLng": {
"lat": 46.389157,
"lng": -116.988669
},
*/
Geolocation API Nodejs
Vì googleMap API đã đóng cửa ở Việt Nam vì nhiều lý do khác nhau, và cũng có nhiều cách để vượt qua bị chặn đó của googleMap. Vì lý do đó, tôi sẽ hướng dẫn cho các bạn 2 cách chính đáng mà không cần dùng đến googleMap. Đó là node-geocoder
và OpenCage Geocoding API
. Cả hai có thể sử dụng Nodejs để triển khai.
Đầu tiên chúng tôi sẽ nói về OpenCage Geocoding API
. Đương nhiên khi sử dụng Opencage thì bạn phải đăng ký tạo cho mình một key API
. Sau đó có thể thực hiện như sau.
Install nodejs package
$ npm install opencage-api-client
# or using yarn
$ yarn add opencage-api-client
Set API key
OPENCAGE_API_KEY=3b1158a4ed084125afb2f6d49e6fd
Forward geocode (address to coordinates)
const opencage = require('opencage-api-client');
opencage
.geocode({ q: '134, nguyễn thái học, Phường Đa Kao, Quận 1, TP Hồ Chí Minh' })
.then((data) => {
// console.log(JSON.stringify(data));
if (data.results.length > 0) {
const place = data.results[0];
console.log(place.formatted);
console.log(place.geometry);
console.log(place.annotations.timezone.name);
} else {
console.log('Status', data.status.message);
console.log('total_results', data.total_results);
}
})
.catch((error) => {
// console.log(JSON.stringify(error));
console.log('Error', error.message);
// other possible response codes:
// https://opencagedata.com/api#codes
if (error.status.code === 402) {
console.log('hit free trial daily limit');
console.log('become a customer: https://opencagedata.com/pricing');
}
});
// ... prints
// Theresienhöhe 11, 80339 Munich, Germany
// { lat: 48.1341651, lng: 11.5464794 }
// Europe/Berlin
Còn để sử dụng node-geocoder
thì bạn cũng phải đăng ký key API
với các app sau: Mapquest, OpenCage.
Install nodejs package
# install with npm or yarn
$ npm install node-geocoder
Forward geocode (address to coordinates) with node-geocoder
var NodeGeocoder = require('node-geocoder');
var geocoder = NodeGeocoder({
provider: 'opencage',
apiKey: 'aaaaaaaaa'
});
// Using callback
geocoder.geocode('37.4396, -122.1864', function(err, res) {
console.log(res);
});
geocoder.geocode('134, nguyễn thái học, Phường Đa Kao, Quận 1, TP Hồ Chí Minh', function(err, res) {
console.log(res);
});
// Or using Promise
geocoder.geocode('37.4396, -122.1864')
.then(function(res) {
console.log(res);
})
.catch(function(err) {
console.log(err);
});
Xong!!!