-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
2c25ae9
commit c49d36c
Showing
4 changed files
with
131 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
import staticmaps # pip install py-staticmaps | ||
import math | ||
import random | ||
|
||
|
||
def anonymize_location(lat, lon, radius=1000): | ||
# Generate random offsets for latitude and longitude | ||
lat_offset = random.uniform(-radius / 111320, radius / 111320) | ||
lon_offset = random.uniform( | ||
-radius / (111320 * math.cos(lat)), radius / (111320 * math.cos(lat)) | ||
) | ||
|
||
# Apply the offsets to the location coordinates | ||
new_lat = lat + lat_offset | ||
new_lon = lon + lon_offset | ||
|
||
return new_lat, new_lon | ||
|
||
|
||
def get_map(locations, zoom=None, image_size=None, radius=10000): | ||
""" | ||
Anonymize a location to 10km by default | ||
""" | ||
context = staticmaps.Context() | ||
context.set_tile_provider(staticmaps.tile_provider_OSM) | ||
context.set_zoom(zoom) | ||
|
||
for location in locations: | ||
new_location = anonymize_location( | ||
lat=float(location["lat"]), | ||
lon=float(location["lon"]), | ||
radius=radius, | ||
) | ||
radio = staticmaps.create_latlng(new_location[0], new_location[1]) | ||
context.add_object(staticmaps.Marker(radio, size=10)) | ||
|
||
# render non-anti-aliased png | ||
if image_size: | ||
return context.render_pillow(image_size[0], image_size[1]) | ||
else: | ||
return context.render_pillow(1000, 1000) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
import os | ||
import io | ||
import aiofiles.os | ||
from PIL import Image | ||
from nio import AsyncClient, UploadResponse | ||
import base64 | ||
|
||
|
||
async def upload_image(client: AsyncClient, image: Image.Image) -> UploadResponse: | ||
buffer = io.BytesIO() | ||
image.save(buffer, format="PNG") | ||
image_data = buffer.getvalue() | ||
|
||
response, maybe_keys = await client.upload( | ||
io.BytesIO(image_data), | ||
content_type="image/png", | ||
filename="location.png", | ||
filesize=len(image_data), | ||
) | ||
|
||
return response | ||
|
||
|
||
async def send_room_image( | ||
client: AsyncClient, room_id: str, upload_response: UploadResponse | ||
): | ||
response = await client.room_send( | ||
room_id=room_id, | ||
message_type="m.room.message", | ||
content={"msgtype": "m.image", "url": upload_response.content_uri, "body": ""}, | ||
) | ||
|
||
|
||
async def send_image(client: AsyncClient, room_id: str, image: Image.Image): | ||
response = await upload_image(client=client, image=image) | ||
await send_room_image(client, room_id, upload_response=response) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
meshtastic==2.1.6 | ||
matrix-nio==0.20.2 | ||
matrix-nio==0.20.2 | ||
py-staticmaps==0.4.0 |