Hi Everyone.
Thanks for sitting down and watching this video. I’m going to show you how to quickly spin up a Docker image of IBM FHIR Server, check the logs, make sure it’s healthy, and how to use the fhir-examples module with the near
search.
The following are the directions followed in the video:
Navigate to DockerHub: IBM FHIR Server
Run the Server docker run -p9443:9443 ibmcom/ibm-fhir-server
Note, startup may take 2 minutes as the image is bootstrapping a new Apache Derby database in the image. To use Postgres or IBM Db2, please review the documentation.
Review the docker logs
Check the server is up and operational
curl -k -i -u 'fhiruser:change-password' 'https://localhost:9443/fhir-server/api/v4/$healthcheck'
You now have a running IBM FHIR Sever.
Let’s load some data using a Jupyter Notebook.
The IBM FHIR Server team wraps specification and service unit tests into a module called fhir-examples
and posts to Bintray: ibm-fhir-server-releases or go directly to the repository.
We’re going to use the python features and Jupyter Notebook to process the fhir-examples.
We’ll download the zip, filter the interesting jsons, and upload to the IBM FHIR Server in a loop.
entries = z.namelist()
for entry in entries:
if entry.startswith('json/ibm/bulk-data/location/'):
f = z.open(entry);
content = f.read()
r = requests.post('https://localhost:9443/fhir-server/api/v4/Location',
data=content,
headers=headers,
auth=httpAuth,
verify=False)
print('Done uploading - ' + entry)
We’re going to query the data on the IBM FHIR Server using the Search Query Parameter near to search within 10Km of Cambridge Massachusetts.
queryParams = {
'near': '42.373611|-71.110558|10|km',
"_count" : 200
}
Note, the IBM FHIR Server includes some additional search beyond the UCUM and WS48 units and it’s listed in at the Conformance page.
We’ll normalize this data and put in a Pandas dataframe.
From the dataframe, we can now add markers to the page.
cambridge = [ 42.373611, -71.11000]
map_cambridge_locs_from_server = folium.Map(location=cambridge, zoom_start=10)
# Iterate through the Rows
for location_row in location_rows :
# print(location_row)
# Cast the values into the appropriate types as FOLIUM will die weirdly without it.
lat_inc = float(location_row['resource.position.latitude'])
long_inc = float(location_row['resource.position.longitude'])
name_inc = str(location_row['resource.name'])
#print(lat_inc)
#print(long_inc)
#print(name_inc)
label = folium.Popup(name_inc, parse_html=True)
folium.CircleMarker(
[lat_inc, long_inc],
radius=5,
popup=label,
fill=True,
fill_color='red',
fill_opacity=0.7).add_to(map_cambridge_locs_from_server)
map_cambridge_locs_from_server
You can see the possibilities with the IBM FHIR Server and the near search.
Reference