GeoMKE

Geocoding and reverse geocoding for Milwaukee County, Wisconsin.

Find coordinates for an address, or find an address near a coordinate. Requests use locally indexed county GIS data, not an external geocoding service. No API key is required.

Geocode an address

GET /v1/geocode

Geocode query parameters
ParameterDefaultDescription
qRequiredNonblank address text, at most 256 bytes. URL-encode the value.
limit5Maximum number of results, from 1 to 20.

Example request

curl 'https://geo.mke.dev/v1/geocode?q=1421+n+humboldt+ave&limit=1'

Open this request on this server.

Matching normalizes capitalization, punctuation, directions, street-type aliases, and numeric or spelled ordinal street names. City, state, ZIP code, and unit constraints are respected when supplied. Address points take precedence over parcel and street-range fallbacks.

Small street-name typos or omitted components can receive lower confidence. A different house number or explicitly conflicting direction is not substituted. A conflicting street type may be corrected for an exact street-name match with a house number, after strict matches are exhausted. For example, 1421 N Humboldt Blvd resolves to 1421 N Humboldt Ave in the county data.

Reverse geocode a coordinate

GET /v1/reverse

Reverse geocode query parameters
ParameterDefaultDescription
latRequiredFinite WGS84 latitude, from -90 to 90.
lonRequiredFinite WGS84 longitude, from -180 to 180.
limit1Maximum number of results, from 1 to 20.
radius100Nearby-search radius in meters, from 1 to 1000.

Example request

curl 'https://geo.mke.dev/v1/reverse?lat=43.05&lon=-87.90&radius=100'

Open this request on this server.

Lookup uses the first available tier:

  1. Address points inside a containing building.
  2. Address points associated with a containing parcel, or a representative point inside the parcel.
  3. Nearby address points within the search radius.
  4. A projection onto a nearby street centerline, without inventing a house number.

The radius limits nearby fallbacks, not addresses associated with a containing building or parcel. Results within the selected tier are ordered by confidence and distance; a larger limit does not add lower-accuracy tiers. Reverse results include distance_m, the distance in meters from the input coordinate to the returned point.

Response format

Successful geocoding requests return HTTP 200 with Content-Type: application/geo+json and a GeoJSON FeatureCollection. Coordinates are WGS84 in [longitude, latitude] order.

Example feature collection

The parcel identifier below is illustrative; results depend on the loaded data snapshot.

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [-87.8985732478243, 43.0486198314883]
      },
      "properties": {
        "label": "1421 N HUMBOLDT AVE, Milwaukee, WI 53202",
        "house_number": "1421",
        "street": "N HUMBOLDT AVE",
        "city": "Milwaukee",
        "state": "WI",
        "postcode": "53202",
        "taxkey": "example-parcel-id",
        "accuracy": "address_point",
        "confidence": 1.0
      }
    }
  ]
}

Every feature includes the properties shown above. Missing source text is an empty string; house_number is null for unnumbered street or parcel results. An additional unit property appears when present. Separate units remain separate results; duplicate records for the same address are deduplicated.

Accuracy values
AccuracyMeaning
address_pointCounty address-point coordinates, including points found through building or parcel containment.
parcelRepresentative interior point of a parcel, not a surveyed address point.
street_interpolatedEstimated location along a street centerline using address ranges.
streetRepresentative street location or nearest centerline projection, not a precise address.

confidence is a ranking heuristic, not a calibrated probability or the county locator's score. Interpolated results do not establish that an address or building exists. This API covers Milwaukee County; it is not a nationwide address, intersection, or point-of-interest search service.

No match

No match is a successful HTTP 200 response with an empty feature list:

{"type":"FeatureCollection","features":[]}

Errors and HTTP methods

Use GET with query parameters. HEAD is also supported and returns no response body. Error responses use Content-Type: application/json.

Example: a request with limit=0 returns HTTP 400:

{"error":"limit must be between 1 and 20"}

Health check

GET /health returns HTTP 200 with Content-Type: application/json once the local indexes are ready:

{"status":"ok"}