File:Rossmo diagram of Kyllikki Saari murder site 1 v 1.png

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search

Original file(698 × 748 pixels, file size: 105 KB, MIME type: image/png)

Captions

Captions

Rossmo diagram of Kyllikki Saari murder site

Summary

[edit]
Description
English: Attempt to make Rossmo's diagram of Kyllikki Saari murder site.

Basic data for estimation: grave, site where Kyllikki was last seen and cache site of Bike, Kellunlaakso swamp.

Radius of maximup propability is here estimeted quite arbitrary.
Date
Source Own work
Author Merikanto
Camera location62° 08′ 41.99″ N, 21° 57′ 06.02″ E  Heading=90° Kartographer map based on OpenStreetMap.View this and other nearby images on: OpenStreetMapinfo

Python 3 code to produce image.

This map is based on Folium OpenStreetMap.

https://www.openstreetmap.org/copyright

Data for locations comes from Finnish Wikipedia.

Locations: grave of Kyllikki Saari, bike was cached to Lellunlaakso.


Python3 code


    1. rossmo formula with folium
    1. test program only, maybe buggy
  1. here murder on Kyllikki Saari, Isojoki, Finland
  2. python 3 script
    1. 23.8.2023 v. 0000.0000.0004


import os import time import math from math import pow import numpy as np import matplotlib.pyplot as plt from PIL import Image

import folium from folium import plugins from selenium import webdriver


dimx=512 dimy=512

kenterlon1=21.951671 kenterlat1=62.144996

olon1=21.92 olat1=62.125 olon2=21.98 olat2=62.155


sw1=[ olat1, olon1] ne1=[ olat2, olon2]


rosmo1=np.zeros((dimy, dimx))


rosmo1=rosmo1*1


data =[[ 62.144996, 21.951671, 1. ],

      [    62.133412, 21.956548,   1.    ]]
  1. [ 62.1406, 21.9481, 1. ]]


    1. minimum radius oh highest propab
    1. calculatend in below
  1. buffer_dist = 0

param_f = 1 param_g = 2

data2=np.array(data)

dimlon=olon2-olon1 dimlat=olat2-olat1 lonk=dimx/dimlon latk=dimy/dimlat

lokx=[] loky=[]


print(olon1, olat1, olon2, olat2)

for n in range (0, len(data2)): lon0=data2[n,1] lat0=data2[n,0] print(lon0, lat0) x=int((lon0-olon1)*lonk) y=dimy-int((lat0-olat1)*latk) #x=int((lon0-olon1)*lonk) #y=int((lat0-olat1)*latk) lokx.append(x) loky.append(y)


print(lokx) print(loky)


lenu=len(data2)

sites=[]


for n in range (0, lenu): x=lokx[n] y=loky[n] #print(x,y) pp=(x,y) sites.append(pp)


print(sites)

    1. experimental only auto-radius ...

x00=lokx[0] y00=loky[0]

xr=0 yr=0

for n in range (1, lenu): x=lokx[n]-x00 y=loky[n]-y00 xr=xr+x yr=yr+y


xr=xr/lenu yr=yr/lenu


rr=int(math.sqrt(xr*xr+yr*yr))

print(rr) buffer_dist =rr

  1. quit(-1)


p = 0

def phi( x, y, i, j ):

   if abs(x-i) + abs(y-j) > buffer_dist:
       return 1
   else:
       return 0

for x in range(dimx):

   for y in range(dimy):
       for site in sites:
           i = site[0]
           j = site[1]
           characteristic = phi(x, y, i, j)
           manhattan_dist = abs(x-i) + abs(y-j)
           try:
               p += characteristic / pow(manhattan_dist, param_f)
           except ZeroDivisionError:
               pass
           n = (1-characteristic)*pow(buffer_dist, (param_g-param_f))
           d = (2*buffer_dist)-characteristic
           d = pow(d, param_g)
       rosmo1[y,x]=p ## tsek it!
       p = 0
   #print("")


imr=np.copy(rosmo1) imb=np.copy(rosmo1) img=np.copy(rosmo1) ima=np.copy(rosmo1)


imr=imr imb=imb*0 img=img*0 ima=255-imr

ima2=ima/256

rosmo2=np.dstack((imr, img, imb, ima))


map = folium.Map(location=[kenterlat1, kenterlon1], TileProvider='OpenStreetMap', zoom_start=17, control_scale = True,)


folium.raster_layers.ImageOverlay(rosmo2,

                   [[ olat1, olon1],[ olat2, olon2]],
                   opacity=0.2,
                  ).add_to(map)


folium.LayerControl().add_to(map)


    1. markers
    2. grave
  1. folium.Marker(location=[data[0][0], data[0][1]],html="Hauta",popup="Kyllikki saaren suohauta").add_to(map)
    1. bike
  2. folium.Marker(location=[data[1][0], data[1][1]],html="Pyörä", popup="Polkupyörän kätköpaikka").add_to(map)

latx1=data[0][0] lonx1=data[0][1]


folium.Circle([latx1, lonx1], 45, fill_color="grey", opacity=0.7,color = 'grey', fill=True).add_child(folium.Popup('Hauta')).add_to(map) folium.map.Marker(

   [latx1 + 0.0001,  lonx1 - 0.0001],
   icon=folium.DivIcon(
       icon_size=(150,36),
       icon_anchor=(0,0),

html='

%s

' % "Hauta",

       )
   ).add_to(map)
   
  

latx1=data[1][0] lonx1=data[1][1]


folium.Circle([latx1, lonx1], 45, fill_color="blue", opacity=0.7,color = 'blue', fill=True).add_child(folium.Popup('Pyörä')).add_to(map) folium.map.Marker(

   [latx1 + 0.0001,  lonx1 - 0.0001],
   icon=folium.DivIcon(
       icon_size=(150,36),
       icon_anchor=(0,0),

html='

%s

' % "Pyörä",

       )
   ).add_to(map)
   

map.fit_bounds([sw1, ne1])


  1. map.save("rossmotest1.html")


delay=5

  1. Save the map as an HTML file

fn='testmap.html' tmpurl='file://{path}/{mapfile}'.format(path=os.getcwd(),mapfile=fn) map.save(fn)

  1. Open a browser window...

browser = webdriver.Firefox()

  1. ..that displays the map...

browser.get(tmpurl)

  1. Give the map tiles some time to load

time.sleep(delay)

  1. Grab the screenshot

browser.save_screenshot('testmap.png')

  1. Close the browser

browser.quit()






Licensing

[edit]
I, the copyright holder of this work, hereby publish it under the following license:
w:en:Creative Commons
attribution share alike
This file is licensed under the Creative Commons Attribution-Share Alike 4.0 International license.
You are free:
  • to share – to copy, distribute and transmit the work
  • to remix – to adapt the work
Under the following conditions:
  • attribution – You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
  • share alike – If you remix, transform, or build upon the material, you must distribute your contributions under the same or compatible license as the original.

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeThumbnailDimensionsUserComment
current12:11, 23 August 2023Thumbnail for version as of 12:11, 23 August 2023698 × 748 (105 KB)Merikanto (talk | contribs)Update
10:15, 23 August 2023Thumbnail for version as of 10:15, 23 August 2023696 × 744 (102 KB)Merikanto (talk | contribs)Update
08:47, 21 August 2023Thumbnail for version as of 08:47, 21 August 2023697 × 746 (83 KB)Merikanto (talk | contribs)Uploaded own work with UploadWizard

There are no pages that use this file.