In mijn grafisch CADprogramma wil ik op een bepaalde coördinaat (binnen een pand) weten wat de BAGidentificatie van dat pand is.
Het is geen probleem om dit coördinaat om te zetten naar ETRS89, maar wat is de juiste syntax.
En moet deze “geometrie” toegevoegd worden aan het einde van de url
"https://bag.basisregistraties.overheid.nl/api/v1/panden
of moet dit via een header-item gebeuren?
Alvast bedankt,
Kees
De documentatie van de API is hier te vinden:
https://bag.basisregistraties.overheid.nl/restful-api?articleid=1927964#/paths/~1panden/post
Hierin is te lezen dat een geometrie meegegeven dient te worden in de requestbody. Een voorbeeld is:
{ "geometrie": { "contains": { "type": "Polygon", "coordinates": [ [ [ 5.962619, 52.2117585 ], [ 5.9625107, 52.211849 ], [ 5.9623266, 52.2120018 ], [ 5.9622966, 52.2120262 ], [ 5.9621242, 52.2119482 ], [ 5.962341, 52.2116086 ], [ 5.9624274, 52.2116293 ], [ 5.9624014, 52.2116703 ], [ 5.9625066, 52.2116959 ], [ 5.9625415, 52.211667 ], [ 5.9626627, 52.2117222 ], [ 5.962619, 52.2117585 ] ] ] } } }
Hallo Robin (of iemand anders),
Via postman lukt het om de juiste data terug te krijgen van de API bij gebruik van een requestbody.
Maar het lukt me niet als ik dit in C# probeer te implementeren.
Ik heb de volgende code overgenomen en aangepast van internet, maar het werkt niet!
string strUri = "https://bag.basisregistraties.overheid.nl/api/v1/panden";
strPandResult = "";
try
{
// Create a request for the URI.
WebRequest request = WebRequest.Create(strUri);
// Zet een time-out op 10 sec.
request.Timeout = 10000;
request.Headers.Add("x-api-key", "hidden");
request.Method = "POST";
request.ContentType = "application/hal+json";
request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
if (strPandResult.Length > 0)
{
MessageBox.Show(strPandResult);
}
}
catch (WebException e)
{
Error = "Server is niet bereikbaar. Exception: " + e.Message;
return -1;
}
return 0;
}
private void GetRequestStreamCallback(IAsyncResult callbackResult)
{
HttpWebRequest webRequest = (HttpWebRequest)callbackResult.AsyncState;
Stream postStream = webRequest.EndGetRequestStream(callbackResult);
double dLat = double.Parse(strLatitude, System.Globalization.CultureInfo.InvariantCulture);
double dLon = double.Parse(strLongitude, System.Globalization.CultureInfo.InvariantCulture);
string requestBody = " { \"geometrie\": { \"contains\": { \"type\": \"Polygon\", \"coordinates\": [ [ [5.386995 , 52.164745 ], [ 5.387031 , 52.164745 ], [ 5.387031 , 52.164803 ], [ 5.386995 , 52.164803 ], [ 5.386995 , 52.164745 ] ] ] } } }";
byte[] byteArray = Encoding.UTF8.GetBytes(requestBody);
postStream.Write(byteArray, 0, byteArray.Length);
postStream.Close();
webRequest.BeginGetResponse(new AsyncCallback(GetResponseStreamCallback), webRequest);
}
private void GetResponseStreamCallback(IAsyncResult callbackResult)
{
try
{
HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);
using (StreamReader httpWebStreamReader = new StreamReader(response.GetResponseStream()))
{
strPandResult = httpWebStreamReader.ReadToEnd();
}
}
catch (WebException e)
{
MessageBox.Show(e.Message);
}
}
Heeft iemand een suggestie, wat ik fout doe?
Groeten,
Kees
Het ContentType moet in ieder geval application/json
zijn.
Heb je logging of andere informatie van de fout waar je tegen aan loopt? “Het werkt niet” is iets te generiek.
En ik zou beginnen met een simpel POST request, dus zonder asynchrone afhandeling. En daarop voortbouwen zodra dat werkt.
Hallo RobinTopper,
Het is gelukt! Je opmerking:
heeft me geholpen om het “aan de praat te krijgen”.
Hartelijk dank voor je hulp.
Met vriendelijke groet,
Kees
1 like