or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

factory.mdformatters.mdgeocoding.mdindex.mdproviders.md

geocoding.mddocs/

0

# Geocoding Operations

1

2

Core geocoding functionality for converting addresses to coordinates and coordinates to addresses.

3

4

## Capabilities

5

6

### Geocode Method

7

8

Converts addresses, place names, or IP addresses to geographic coordinates.

9

10

```javascript { .api }

11

/**

12

* Geocode an address, place name, or IP address to coordinates

13

* @param {string|object} value - Address string, IP address, or query object

14

* @param {function} callback - Optional callback function

15

* @returns {Promise<GeocodeResult[]>} Promise resolving to array of geocoding results

16

*/

17

geocode(value, callback);

18

```

19

20

**Usage Examples:**

21

22

```javascript

23

const NodeGeocoder = require('node-geocoder');

24

const geocoder = NodeGeocoder('google', { apiKey: 'YOUR_API_KEY' });

25

26

// Simple address geocoding

27

const results = await geocoder.geocode('1600 Amphitheatre Parkway, Mountain View, CA');

28

console.log(results[0].latitude, results[0].longitude);

29

30

// IP address geocoding (provider dependent)

31

const ipResults = await geocoder.geocode('8.8.8.8');

32

33

// Structured address query

34

const structuredResults = await geocoder.geocode({

35

address: '1600 Amphitheatre Parkway',

36

country: 'US',

37

zipcode: '94043'

38

});

39

40

// With callback style

41

geocoder.geocode('Paris, France', (err, results) => {

42

if (err) {

43

console.error(err);

44

return;

45

}

46

console.log(results);

47

});

48

```

49

50

### Reverse Geocode Method

51

52

Converts geographic coordinates to addresses and place information.

53

54

```javascript { .api }

55

/**

56

* Reverse geocode coordinates to address information

57

* @param {object} query - Coordinates object with lat/lon properties

58

* @param {function} callback - Optional callback function

59

* @returns {Promise<GeocodeResult[]>} Promise resolving to array of reverse geocoding results

60

*/

61

reverse(query, callback);

62

```

63

64

**Usage Examples:**

65

66

```javascript

67

// Basic reverse geocoding

68

const results = await geocoder.reverse({ lat: 45.767, lon: 4.833 });

69

console.log(results[0].formattedAddress);

70

71

// With language preference

72

const frenchResults = await geocoder.reverse({

73

lat: 45.767,

74

lon: 4.833,

75

language: 'fr'

76

});

77

78

// Provider-specific options (Google example)

79

const detailedResults = await geocoder.reverse({

80

lat: 45.767,

81

lon: 4.833,

82

result_type: 'street_address',

83

location_type: 'ROOFTOP'

84

});

85

86

// With callback style

87

geocoder.reverse({ lat: 45.767, lon: 4.833 }, (err, results) => {

88

if (err) {

89

console.error(err);

90

return;

91

}

92

console.log(results[0].city);

93

});

94

```

95

96

### Batch Geocode Method

97

98

Processes multiple addresses in a single operation, with individual error handling. **Note:** All providers support batch operations, but only some (aplace, here, tomtom) have native batch implementations for better performance. Others fallback to individual geocode calls.

99

100

```javascript { .api }

101

/**

102

* Batch geocode multiple addresses (native batch support: aplace, here, tomtom; others fallback to individual calls)

103

* @param {string[]|object[]} values - Array of address strings or query objects

104

* @param {function} callback - Optional callback function

105

* @returns {Promise<BatchResult[]>} Promise resolving to array of batch results

106

*/

107

batchGeocode(values, callback);

108

```

109

110

**Usage Examples:**

111

112

```javascript

113

// Works with all providers (aplace, here, tomtom have native batch; others use individual calls)

114

const geocoder = NodeGeocoder('here', { apiKey: 'YOUR_API_KEY' });

115

116

// Batch geocoding with strings

117

const addresses = [

118

'1600 Amphitheatre Parkway, Mountain View, CA',

119

'Eiffel Tower, Paris, France',

120

'Times Square, New York, NY'

121

];

122

123

const batchResults = await geocoder.batchGeocode(addresses);

124

125

// Process results with error handling

126

batchResults.forEach((result, index) => {

127

if (result.error) {

128

console.error(`Failed to geocode ${addresses[index]}:`, result.error);

129

} else {

130

console.log(`${addresses[index]}:`, result.value[0]);

131

}

132

});

133

134

// Batch geocoding with query objects

135

const queries = [

136

{ address: '1600 Amphitheatre Parkway', country: 'US' },

137

{ address: 'Eiffel Tower', country: 'FR' },

138

{ address: 'Times Square', country: 'US' }

139

];

140

141

const queryResults = await geocoder.batchGeocode(queries);

142

```

143

144

### Confidence Filtering

145

146

Filter geocoding results based on confidence scores when supported by the provider.

147

148

```javascript { .api }

149

/**

150

* Query object with confidence filtering

151

*/

152

interface ConfidenceQuery {

153

/** Address to geocode */

154

address: string;

155

/** Minimum confidence threshold (0-1) */

156

minConfidence: number;

157

/** Other query parameters */

158

[key: string]: any;

159

}

160

```

161

162

**Usage Examples:**

163

164

```javascript

165

// Filter results by confidence level

166

const highConfidenceResults = await geocoder.geocode({

167

address: 'ambiguous street name',

168

minConfidence: 0.8 // Only return results with 80%+ confidence

169

});

170

171

// Confidence is provider-dependent

172

const geocoder = NodeGeocoder('google', { apiKey: 'YOUR_API_KEY' });

173

const results = await geocoder.geocode('123 Main Street');

174

175

// Check confidence in results

176

results.forEach(result => {

177

if (result.extra && result.extra.confidence) {

178

console.log(`Confidence: ${result.extra.confidence}`);

179

}

180

});

181

```

182

183

### Provider-Specific Query Options

184

185

Different providers support various query parameters for enhanced geocoding.

186

187

```javascript { .api }

188

/**

189

* Google-specific query options

190

*/

191

interface GoogleQuery {

192

address?: string;

193

/** Google Place ID for direct lookup */

194

googlePlaceId?: string;

195

/** Language override */

196

language?: string;

197

/** Region biasing override */

198

region?: string;

199

/** Country filter */

200

country?: string;

201

/** ZIP code filter */

202

zipcode?: string;

203

}

204

205

/**

206

* General address query structure

207

*/

208

interface AddressQuery {

209

/** Main address string */

210

address: string;

211

/** Country filter/preference */

212

country?: string;

213

/** ZIP/postal code filter */

214

zipcode?: string;

215

/** Language preference */

216

language?: string;

217

/** Minimum confidence level */

218

minConfidence?: number;

219

}

220

```

221

222

**Usage Examples:**

223

224

```javascript

225

// Google Place ID lookup

226

const placeResults = await geocoder.geocode({

227

googlePlaceId: 'ChIJN1t_tDeuEmsRUsoyG83frY4'

228

});

229

230

// Country and ZIP filtering

231

const filteredResults = await geocoder.geocode({

232

address: 'Main Street',

233

country: 'US',

234

zipcode: '90210'

235

});

236

237

// Language-specific results

238

const germanResults = await geocoder.geocode({

239

address: 'Brandenburger Tor',

240

language: 'de'

241

});

242

```

243

244

## Error Handling

245

246

Geocoding operations can fail due to network issues, API limits, or invalid queries.

247

248

```javascript { .api }

249

/**

250

* Common geocoding errors

251

*/

252

interface GeocodingError extends Error {

253

/** Error message */

254

message: string;

255

/** HTTP status code if applicable */

256

code?: number;

257

/** Raw response data */

258

raw?: any;

259

}

260

```

261

262

**Error Handling Examples:**

263

264

```javascript

265

try {

266

const results = await geocoder.geocode('invalid address');

267

if (results.length === 0) {

268

console.log('No results found');

269

}

270

} catch (error) {

271

if (error.message.includes('OVER_QUERY_LIMIT')) {

272

console.error('API quota exceeded');

273

} else if (error.message.includes('REQUEST_DENIED')) {

274

console.error('Invalid API key or permissions');

275

} else if (error.code) {

276

console.error(`HTTP Error ${error.code}: ${error.message}`);

277

} else {

278

console.error('Geocoding failed:', error.message);

279

}

280

}

281

282

// Provider-specific error handling

283

geocoder.geocode('test address')

284

.then(results => {

285

// Handle zero results

286

if (results.length === 0) {

287

console.log('Address not found');

288

return;

289

}

290

console.log('Found:', results[0].formattedAddress);

291

})

292

.catch(error => {

293

console.error('Geocoding error:', error);

294

});

295

```