rentberry / geocoder-grpc
PHP gRPC 绑定到 https://github.com/Rentberry/geocoder
1.0.4
2021-02-04 16:38 UTC
Requires
- ext-grpc: @stable
- google/protobuf: ~3.10
- grpc/grpc: ~1.3.0
This package is auto-updated.
Last update: 2024-09-07 02:38:15 UTC
README
外部地理编码服务的适配器,具有缓存、监控、指标等功能。内置了对时区查询的支持(将坐标解析为时区),使用了惊人的Brad Fitzpatrick库实现。目前支持Google的地理编码API和Opencage。
使用方法
Docker镜像
docker run \
-p 8080:8080 -p 9092:9092 \
-e REDIS_HOST=redis \
-e GOOGLE_API_KEY_SERVER=<your-google-key> \
-e OPENCAGE_API_KEY=<your-opencage-key> \
rentberry:geocoder
这将启动一个地理编码服务,该服务在端口8080
上监听grpc连接,并在端口9092
上的/metrics
上公开Prometheus指标。
gRPC方法
地理编码
正向和反向地理编码 GeocodeService.Geocode (LocationRequest) 返回 (LocationResponse)
示例
请求
// Forward { "address": "berlin", "provider": "opencage", "query": { "country": "de", "language": "en" } } // Reverse { "latLng": {"lat":52.51006317138672, "lng":13.40505599975586}, "provider": "opencage", "query": { "language": "en" } }
响应
{ "locations": [ { "provider": "opencage", "formattedAddress": "Best Western Hotel am Spittelmarkt, Neue Grünstraße 28, 10179 Berlin, Germany", "country": { "name": "Germany", "code": "DE" }, "streetNumber": "28", "streetName": "Neue Grünstraße", "locality": "Berlin", "sublocality": "Spandauer Vorstadt", "postalCode": "10179", "latLng": { "lat": 52.51006317138672, "lng": 13.40505599975586 }, "adminLevels": [ { "level": 1, "name": "Berlin", "code": "BE" } ], "state": { "name": "Berlin", "code": "BE" }, "bounds": { "northEast": { "lat": 52.510196685791016, "lng": 13.405620574951172 }, "southWest": { "lat": 52.50993347167969, "lng": 13.40455150604248 } } }, { "provider": "opencage", "formattedAddress": "Neue Grünstraße 28, 10179 Berlin, Germany", "country": { "name": "Germany", "code": "DE" }, "streetNumber": "28", "streetName": "Neue Grünstraße", "locality": "Berlin", "sublocality": "Spandauer Vorstadt", "postalCode": "10179", "latLng": { "lat": 52.5099983215332, "lng": 13.40558910369873 }, "adminLevels": [ { "level": 1, "name": "Berlin", "code": "BE" } ], "state": { "name": "Berlin", "code": "BE" }, "bounds": { "northEast": { "lat": 52.510047912597656, "lng": 13.405638694763184 }, "southWest": { "lat": 52.50994873046875, "lng": 13.405538558959961 } } }, { "provider": "opencage", "formattedAddress": "10179, Germany", "country": { "name": "Germany", "code": "DE" }, "postalCode": "10179", "latLng": { "lat": 52.51359939575195, "lng": 13.423199653625488 }, "state": { }, "bounds": { "northEast": { }, "southWest": { } } } ], "exists": true } // Response trailers received: // cache-key: b6d1655e0fc8945a33b050c4dfdb43b2cb0ecf58
时区查找
通过提供的坐标查找位置的时区 TimezoneService.Lookup (TimezoneRequest) 返回 (Timezone)
示例
请求
grpcurl -plaintext -import-path ./api -proto geocoder.proto -v -d '{"latLng":{"lat":52.51006317138672, "lng":13.40505599975586}}' 127.0.0.1:8080 geocoder.TimezoneService/Lookup
{"latlng": {"lat":52.51006317138672, "lng":13.40505599975586}}
响应
{ "code": "Europe/Berlin" }