PHPackages                             rentberry/geocoder-grpc - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. rentberry/geocoder-grpc

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

rentberry/geocoder-grpc
=======================

PHP gRPC bindings to https://github.com/Rentberry/geocoder

1.0.6(3w ago)748.1k2MITGo

Since Jun 11Pushed 3w ago2 watchersCompare

[ Source](https://github.com/Rentberry/geocoder)[ Packagist](https://packagist.org/packages/rentberry/geocoder-grpc)[ RSS](/packages/rentberry-geocoder-grpc/feed)WikiDiscussions master Synced 6d ago

READMEChangelog (10)Dependencies (4)Versions (19)Used By (0)

gRPC based geocoding service
============================

[](#grpc-based-geocoding-service)

Adapter for external geocoding services with caching, monitoring, metrics etc. Has built-in support for timezone queries (resolve coordinates to timezone) implemented using [amazing Brad Fitzpatrick's library](https://github.com/bradfitz/latlong). Supports [Google's Geocoding API](https://developers.google.com/maps/documentation/geocoding/start) and [Opencage](https://opencagedata.com) for now.

Usage
=====

[](#usage)

Docker Compose (Recommended)
----------------------------

[](#docker-compose-recommended)

The easiest way to run the service is using Docker Compose:

1. Copy the example environment file and fill in your API keys:

```
cp .env.example .env
# Edit .env and add your GOOGLE_API_KEY_SERVER and OPENCAGE_API_KEY
```

2. Start the services:

```
docker-compose up -d
```

This will start:

- Redis on port `6379`
- Geocoding service on port `8080` (gRPC)
- Prometheus metrics endpoint on port `9092`

3. Check the logs:

```
docker-compose logs -f geocoder
```

4. Stop the services:

```
docker-compose down
```

Docker image
------------

[](#docker-image)

```
docker run \
    -p 8080:8080 -p 9092:9092 \
    -e REDIS_HOST=redis \
    -e GOOGLE_API_KEY_SERVER= \
    -e OPENCAGE_API_KEY= \
    rentberry:geocoder

```

This will start geocoding service that listens for grpc connections on port `8080` and exposes prometheus metrics on `/metrics` on port `9092`

gRPC methods
------------

[](#grpc-methods)

### Geocoding

[](#geocoding)

Forward and reverse geocoding `GeocodeService.Geocode (LocationRequest) returns (LocationResponse)`

#### Example

[](#example)

Request:

```
// Forward
{
  "address": "berlin",
  "provider": "opencage",
  "query": {
    "country": "de",
    "language": "en"
  }
}

// Reverse
{
  "latLng": {"lat":52.51006317138672, "lng":13.40505599975586},
  "provider": "opencage",
  "query": {
    "language": "en"
  }
}
```

Response:

```
{
  "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
```

### Timezone lookup

[](#timezone-lookup)

Find location's timezone by provided coordinates `TimezoneService.Lookup (TimezoneRequest) returns (Timezone)`

#### Example

[](#example-1)

Request:

```
 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}}
```

Response:

```
{
  "code": "Europe/Berlin"
}
```

###  Health Score

55

—

FairBetter than 98% of packages

Maintenance95

Actively maintained with recent releases

Popularity32

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity64

Established project with proven stability

 Bus Factor1

Top contributor holds 77.8% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~153 days

Recently: every ~489 days

Total

15

Last Release

24d ago

Major Versions

0.9.7 → 1.0.02020-12-10

### Community

Maintainers

![](https://www.gravatar.com/avatar/9a67acd28d366ff328006f3e62c314993301a3742af6dbf0da18693cda04c9c6?d=identicon)[trntv](/maintainers/trntv)

![](https://avatars.githubusercontent.com/u/18612064?v=4)[Rentberry](/maintainers/Rentberry)[@Rentberry](https://github.com/Rentberry)

---

Top Contributors

[![trntv](https://avatars.githubusercontent.com/u/1162056?v=4)](https://github.com/trntv "trntv (21 commits)")[![kozebobinka](https://avatars.githubusercontent.com/u/17119840?v=4)](https://github.com/kozebobinka "kozebobinka (4 commits)")[![Bukashk0zzz](https://avatars.githubusercontent.com/u/1908342?v=4)](https://github.com/Bukashk0zzz "Bukashk0zzz (1 commits)")[![svitiashchuk](https://avatars.githubusercontent.com/u/11519148?v=4)](https://github.com/svitiashchuk "svitiashchuk (1 commits)")

---

Tags

geocodinggogolanggoogle-geocode-apigrpchacktoberfestopencage

### Embed Badge

![Health badge](/badges/rentberry-geocoder-grpc/health.svg)

```
[![Health](https://phpackages.com/badges/rentberry-geocoder-grpc/health.svg)](https://phpackages.com/packages/rentberry-geocoder-grpc)
```

###  Alternatives

[google/gax

Google API Core for PHP

263103.1M454](/packages/google-gax)[google/grpc-gcp

gRPC GCP library for channel management

18497.8M3](/packages/google-grpc-gcp)[googleads/google-ads-php

Google Ads API client for PHP

3497.6M9](/packages/googleads-google-ads-php)[alibaba/nacos

阿里巴巴nacos配置中心php客户端

19340.8k1](/packages/alibaba-nacos)[hasanmertermis/milvus-php-client

Milvus 2 Grpc Php Client

142.1k](/packages/hasanmertermis-milvus-php-client)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
