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(2mo ago)748.2k2MITGo

Since Jun 11Pushed 2mo 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 3w 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

53

—

FairBetter than 96% of packages

Maintenance86

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

71d ago

Major Versions

0.9.7 → 1.0.02020-12-10

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1162056?v=4)[Yevhen Terentiev](/maintainers/trntv)[@trntv](https://github.com/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

267116.3M567](/packages/google-gax)[googleads/google-ads-php

Google Ads API client for PHP

3508.5M12](/packages/googleads-google-ads-php)[clarifai/clarifai-php-grpc

Clarifai PHP gRPC client

1229.6k](/packages/clarifai-clarifai-php-grpc)[temporal/sdk

Temporal SDK

4072.9M25](/packages/temporal-sdk)[flow-php/flow

PHP ETL - Extract Transform Load - Data processing framework

85036.3k](/packages/flow-php-flow)[metaseller/tinkoff-invest-api-v2-php

Unofficial PHP SDK for T-Invest API v2

256.8k3](/packages/metaseller-tinkoff-invest-api-v2-php)

PHPackages © 2026

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