Reprojecting data between coordinat systems

How accurate do you need the conversion to be?

import clr

from math import cos, sin

clr.AddReference("RevitServices")
from RevitServices.Persistence import DocumentManager

clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import *

doc = DocumentManager.Instance.CurrentDBDocument

def ll2cc(lat, lon, deg=True):
    
    def rad(d):
        return UnitUtils.Convert(d, UnitTypeId.Degrees, UnitTypeId.Radians)
    
    R = 63710088 # Arithmetic mean radius of Earth in meters
    
    if deg:
        lat, lon = rad(lat), rad(lon)
        
    return XYZ(R * cos(lat) * cos(lon), R * cos(lat) * sin(lon), 0)

loc = doc.SiteLocation # Site Location

lat = loc.Latitude
lon = loc.Longitude

# Translate site location lat, lon to 0, 0
translation = XYZ.Zero.Subtract(ll2cc(lat, lon, False))
transform = Transform.CreateTranslation(translation)

latlons = IN[0] # List of lat lon pairs in degrees

OUT = [transform.OfPoint(ll2cc(*ll)) for ll in latlons]
2 Likes