То, что вы нашли, это некоторые из ограничений Базовой карты. Давайте переключимся на Cartopy пока. Рабочий код будет другим, но не очень.
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import math
earth_radius = 6371000.
position = [300000., 75., 0.] # altitude (m), lat, long
radius = math.degrees(math.acos(earth_radius / (earth_radius + position[0])))
print(radius) # in subtended degrees??
fig = plt.figure(figsize=(12,8))
img_extent = [-180, 180, -90, 90]
# here, cartopy's' `PlateCarree` is equivalent with Basemap's `cyl` you use
ax = fig.add_subplot(1, 1, 1, projection = ccrs.PlateCarree(), extent = img_extent)
# for demo purposes, ...
# let's take 1 subtended degree = 112 km on earth surface (*** you set the value as needed ***)
ax.tissot(rad_km=radius*112, lons=position[2], lats=position[1], n_samples=64, \
facecolor='red', edgecolor='black', linewidth=0.15, alpha = 0.3)
ax.coastlines(linewidth=0.15)
ax.gridlines(draw_labels=False, linewidth=1, color='blue', alpha=0.3, linestyle='--')
plt.show()
С кодом выше, результирующий сюжет:
Теперь, если мы используем ортографическую проекцию, (заменить соответствующая строка кода с этим)
ax = fig.add_subplot(1, 1, 1, projection = ccrs.Orthographic(central_longitude=0.0, central_latitude=60.0))
вы получите этот участок:
Не запрашивайте v$sql; получите оператор с помощью ora_sql_txt.
CREATE OR REPLACE TRIGGER log_server_errors
AFTER SERVERERROR
ON DATABASE
DECLARE
sql_text ora_name_list_t;
stmt clob;
n number;
BEGIN
n := ora_sql_txt(sql_text);
if n > 1000 then n:= 1000; end if ;
FOR i IN 1..n LOOP
stmt := stmt || sql_text(i);
END LOOP;
INSERT INTO servererror_log
(error_datetime, error_user, db_name,
error_stack, captured_sql)
VALUES
(systimestamp, sys.login_user, sys.database_name,
dbms_utility.format_error_stack, stmt);
commit;
END log_server_errors;
/
Затем:
SQL> select * from c;
Это производит:
select * from c
*
ERROR at line 1:
ORA-00942: table or view does not exist
Это может теперь быть запрошено:
select * from servererror_log;
Произвести:
ERROR_DATETIME
---------------------------------------------------------------------------
ERROR_USER DB_NAME
------------------------------ ---------
ERROR_STACK
--------------------------------------------------------------------------------
CAPTURED_SQL
--------------------------------------------------------------------------------
11-FEB-09 02.55.35.591259 PM
SYS TS.WORLD
ORA-00942: table or view does not exist
select * from c
Чтобы видеть, стреляет ли триггер, добавьте одну или несколько строк к нему как это:
DBMS_OUTPUT.PUT_LINE( 'Got this far' );
В SQLPlus НАБОР SERVEROUTPUT НА затем выполняют команду для генерации ошибки. Вы должны быть произведены как это:
dev> select * from aldfjh;
select * from aldfjh
*
ERROR at line 1:
ORA-00942: table or view does not exist
ORA-00942: table or view does not exist
Got this far
Проверьте состояние своего триггера и/или существование других триггеров с:
select trigger_name, status
from all_triggers
where triggering_event like 'ERROR%'
Это должно закончиться в:
TRIGGER_NAME STATUS
------------ -------
LOG_SERVER_ERRORS ENABLED
Если триггер не будет включен или другой триггер сбои, то он, вероятно, не будет работать.